如何快速对接Stripe国际支付系统

泛型季风
• 阅读 6104

Stripe国际支付介绍

Stripe是由20多岁的两兄弟Patrick Collison和John Collison创办的Stripe为公司提供网上支付的解决方案。Stripe向服务的公司收取每笔交易的2.9%加上30美分的手续费。

很多中国卖家想要借用stripe来实现建站收款,Stripe现在被称为“移动时代PayPal”。目前服务的客户有大家熟知的facebook、Twitter、Shopify、Kickstarter、Target、Wish、Digitalocean、Pinterest、Docker、Sap这些知名公司外,Stripe还拥有大量的个体中小型客户商户,全球超过10万家企业都在使用Stripe的服务,平台完成的年交易量已超10亿美元。Stripe近些年发展迅猛,在国外市场的占有率相当高。Stripe提供了一目了然简单的收费方式,设计简洁的,易操作,可站内付款的付款方式,简直具备了创建快速有效的移动商务体验所需的一切。

Stripe介绍

Stripe专注在解决网络商户支付的问题,Stripe的产品涵盖了网络商户支付的方方面面,目前来看总共分为三大产品(Payments、Subscription、Connect),三小产品(Sigma、Atlas、Radar)

Payments

Payments是Stripe最首要也是最基础的产品。Payments提供了API以及toolkit使得开发者们可以开发适合自己的支付流程(payment flow)。Payments接受信用卡以及常见网络支付方式(ACH debits,bitcoin,alipay,WeChat Pay),通过为客户端提供符合PCI-DSS规范的token,敏感信息不会经过客户的服务器(免除责任)。Stripe致力于简化开发者的烦恼,集成Payments最快只需要一行javascript代码(包括UI)。

Subscription

Subscription解决的问题是如何高效的处理周期账单(recurring billing)。Stripe发现了周期账单处理中的诸多痛点并给出了一体化的解决方案。Subscription可以自动计算周期中cancel后返款数额,支持试用期以及基于使用率(usage-based)的plan。对于企业用户,可以支持per-seat(基础价格+用户费用*用户量)的定价方案。另一个周期付账的痛点就是信用卡过期,Subscription通过与信用卡网络合作可以在旧卡过期后自动更新新卡信息,从而避免因信用卡过期而导致支付失败。

Connect

Connect服务的目标群体是marketplace或者platform(类似于淘宝网,ebay,eventtribe)。这类平台的支付需求是链接买家跟卖家,包括一对一(比如uber),一对多(比如淘宝网上一个订单来自不同商家),多对多(比如Google Play提供给所有用户HBO,ShowTime等附加服务),资金暂存(比如支付在演唱会结束后发生,类似于支付宝的作用)。在美国平台支付会牵涉到税务法律方面的问题,Connect会在某些用户收款数额超过一定临界时通知平台进行相应法律规定的流程。

Sigma

Sigma是基于该用户在Stripe上所有已有资料而提供的数据分析产品。通过Sigma用户(企业)不需要自己建立复杂的pipeline来分析自己的payment数据,而直接通过Stripe自身的web UI和SQL语句来进行复杂的数据分析,快速准确的进行商业决策。

Atlas

为了帮助更多的人快速建立公司,Atlas把建立公司所有的步骤一次性负责。注册Atlas提交一次性费用之后,Stripe会在一周时间内为你在Delaware注册一家incorporation,并且在Silicon Valley Bank开通商业银行账户,并且提供一次免费法律服务,另外提供附加的法律以及税务服务。通过之前收购的Indie Hackers,Atlas还提供了创业家社群帮助开始创业的用户快速上手

Radar

一套自研的风控引擎系统,帮助企业规避风险。

集成Stripe支付

在集成Stripe的支付之前,我们需要先了解一下Stripe的管理平台。

  1. 注册管理平台,测试环境注册地址
  2. 成功以后在管理平台会给我们生成一个秘钥
  3. 请求时带上此秘钥,那么钱就会流转到你注册的管理平台账户上
  4. 在管理平台进行绑定卡,就可以进行提现等操作

注册成功以后我们可以看到管理页面如下所示,可以看到我们的秘钥,还有资金的流转情况等等。

如何快速对接Stripe国际支付系统

我们选择一个最简单的集成方式,就是集成Stripe的Chekcout页面,只需要几行代码就能够集成Stripe的支付能力。大概的流程我用时序图表示,如下所示:

如何快速对接Stripe国际支付系统

CheckOut页面是Stripe提供的页面,我们无需进行改动。页面如下所示。

如何快速对接Stripe国际支付系统

废话不多说直接上代码,我使用的Java进行的集成,其中生成Session的代码如下

@GetMapping("/pay")
@ResponseBody
public Map<String,String>  pay(HttpServletRequest httpRequest, HttpServletResponse httpResponse){
    Map<String,String> resultMap = new HashMap<>();
    try {
        Stripe.apiKey = privateKey;
        Map<String, Object> params = new HashMap<String, Object>();
        ArrayList<String> paymentMethodTypes = new ArrayList<>();
        paymentMethodTypes.add("card");
        params.put("payment_method_types", paymentMethodTypes);
        ArrayList<HashMap<String, Object>> lineItems = new ArrayList<>();
        HashMap<String, Object> lineItem = new HashMap<String, Object>();
        lineItem.put("name", "胡鹏飞测试商品");
        lineItem.put("description", "这是一个测试单描述");
        lineItem.put("amount", 500); // 支付金额
        lineItem.put("currency", "usd"); //支付币种
        lineItem.put("quantity", 1);
        lineItems.add(lineItem);
        params.put("line_items", lineItems);
        //TODO 必须使用https 返回的回调地址
        String uuid = UUID.randomUUID().toString();
        params.put("client_reference_id", uuid);//业务系统唯一标识 即订单唯一编号
        log.info("uuid:{}",uuid);
        params.put("success_url", URLUtils.getBaseURl(httpRequest)+"/paySuccess");// 支付成功跳转页面
        params.put("cancel_url",  URLUtils.getBaseURl(httpRequest)+"/payError");// 支付失败跳转页面
        Session session = Session.create(params);
        String sessionId = session.getId();
        log.info("sessionId :{}",session.getId());
        resultMap.put("sessionId",sessionId);
    } catch (StripeException e) {
        e.printStackTrace();
    }
    return resultMap;
}

其中商户信息我没有让前端来传,我在后台写死了,只是为了方便调用。可以看到生成sessionId传给前端,然后前端做如下调用。就可以直接跳转到checkOut页面进行支付了。

stripe.redirectToCheckout({
    sessionId: data.sessionId
}).then(function (result) {
    console.log(result);
});

到目前为止就这几行代码我们就已经集成了Stripe的支付功能,其实Stripe支持的功能还有很多,就像我们上面介绍的还支持订阅支付,当然也能够不使用它的checkout页面,而是我们自定义的页面,只不过稍微麻烦了点,我这里就不介绍了,具体有需求的可以查看它的文档里面写的很详细。相关文档都在下面列出来了。

在GitHub代码中还有相关的退款、回调等接口的信息,我这里就不一一介绍了,大家可以去github上面拉下来代码查看一下就明白了。

有感兴趣的可以关注一下我新建的公众号,搜索[程序猿的百宝袋]。或者直接扫下面的码也行。

如何快速对接Stripe国际支付系统

代码地址

相关资料

点赞
收藏
评论区
推荐文章
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
4年前
java程序支付宝接口付费功能的实现
以前做过c应用程序支付宝api接口功能,现在转移到Java程序上,代码如何实现呢?1、从你的网站提交到支付宝:/\\\将订单提交支付宝进行网上支付\/publicActionForwardsubmitAlipayUrl(ActionMappingmapping,ActionFormform,HttpServletReque
【提升团队运营效率】交易履约之订单中心实践
交易履约订单中心为履约行为提供必要的系统能力支撑,交易履约订单中心记录了交易流通的过程和状态,包括交易主体、产品信息、成交金额、计费、支付、业务信息等全流程信息,为上下游提供数据标准化、全集数据查询和串联流程的功能。
Wesley13 Wesley13
4年前
NEO从源码分析看UTXO交易
_0x00前言_社区大佬:“交易是操作区块链的唯一方式。”_0x01交易类型_在NEO中,几乎除了共识之外的所有的对区块链的操作都是一种“交易”,甚至在“交易”面前,合约都只是一个小弟。交易类型的定义在Core中的TransactionType中:源码位置:neo/Core/TransactionType
Stella981 Stella981
4年前
DOIS 2019 DevOps国际峰会北京站来袭~
DevOps国际峰会是国内唯一的国际性DevOps技术峰会,由OSCAR 联盟指导、DevOps时代社区与高效运维社区联合主办,共邀全球80余名顶级专家畅谈DevOps体系与方法、过程与实践、工具与技术。会议召开时间:2019070508:00至2019070618:00结束会议召开地点:北京主办单位:DevOps
Easter79 Easter79
4年前
TiDB 在中国电信翼支付的大规模深度实践
作者介绍:刘宇,天翼支付资深架构师。天翼电子商务有限公司(翼支付)成立于2011年3月,是中国电信股份有限公司的全资子公司、中国人民银行核准的第三方支付机构、中国证监会核准的基金支付结算机构,是中国电信布局互联网金融的重要板块,是行业领先的创新型金融科技企业。业务覆盖全国近400个主要城市,注册用户超5亿,合作商户超过1000万,
E小媛同学 E小媛同学
2年前
银行卡二要素API:支付交易的必备工具,保障支付安全
银行卡二要素API用于验证用户提供的姓名和银行卡号是否一致。这两个要素是支付交易的基本元素,因此确保它们的一致性至关重要。这个API通过自动验证用户提供的信息,从而减少了人为错误的可能性,提高了支付交易的准确性。