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

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. 在管理平台进行绑定卡,就可以进行提现等操作

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

image

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

image

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

image

废话不多说直接上代码,我使用的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上面拉下来代码查看一下就明白了。

相关资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容