Stripe國際支付介紹
Stripe是由20多歲的兩兄弟Patrick Collison和John Collison創(chuàng)辦的Stripe為公司提供網(wǎng)上支付的解決方案。Stripe向服務(wù)的公司收取每筆交易的2.9%加上30美分的手續(xù)費(fèi)。
很多中國賣家想要借用stripe來實(shí)現(xiàn)建站收款,Stripe現(xiàn)在被稱為“移動(dòng)時(shí)代PayPal”。目前服務(wù)的客戶有大家熟知的facebook、Twitter、Shopify、Kickstarter、Target、Wish、Digitalocean、Pinterest、Docker、Sap這些知名公司外,Stripe還擁有大量的個(gè)體中小型客戶商戶,全球超過10萬家企業(yè)都在使用Stripe的服務(wù),平臺(tái)完成的年交易量已超10億美元。Stripe近些年發(fā)展迅猛,在國外市場(chǎng)的占有率相當(dāng)高。Stripe提供了一目了然簡(jiǎn)單的收費(fèi)方式,設(shè)計(jì)簡(jiǎn)潔的,易操作,可站內(nèi)付款的付款方式,簡(jiǎn)直具備了創(chuàng)建快速有效的移動(dòng)商務(wù)體驗(yàn)所需的一切。
Stripe介紹
Stripe專注在解決網(wǎng)絡(luò)商戶支付的問題,Stripe的產(chǎn)品涵蓋了網(wǎng)絡(luò)商戶支付的方方面面,目前來看總共分為三大產(chǎn)品(Payments、Subscription、Connect),三小產(chǎn)品(Sigma、Atlas、Radar)
Payments
Payments是Stripe最首要也是最基礎(chǔ)的產(chǎn)品。Payments提供了API以及toolkit使得開發(fā)者們可以開發(fā)適合自己的支付流程(payment flow)。Payments接受信用卡以及常見網(wǎng)絡(luò)支付方式(ACH debits,bitcoin,alipay,WeChat Pay),通過為客戶端提供符合PCI-DSS規(guī)范的token,敏感信息不會(huì)經(jīng)過客戶的服務(wù)器(免除責(zé)任)。Stripe致力于簡(jiǎn)化開發(fā)者的煩惱,集成Payments最快只需要一行javascript代碼(包括UI)。
Subscription
Subscription解決的問題是如何高效的處理周期賬單(recurring billing)。Stripe發(fā)現(xiàn)了周期賬單處理中的諸多痛點(diǎn)并給出了一體化的解決方案。Subscription可以自動(dòng)計(jì)算周期中cancel后返款數(shù)額,支持試用期以及基于使用率(usage-based)的plan。對(duì)于企業(yè)用戶,可以支持per-seat(基礎(chǔ)價(jià)格+用戶費(fèi)用*用戶量)的定價(jià)方案。另一個(gè)周期付賬的痛點(diǎn)就是信用卡過期,Subscription通過與信用卡網(wǎng)絡(luò)合作可以在舊卡過期后自動(dòng)更新新卡信息,從而避免因信用卡過期而導(dǎo)致支付失敗。
Connect
Connect服務(wù)的目標(biāo)群體是marketplace或者platform(類似于淘寶網(wǎng),ebay,eventtribe)。這類平臺(tái)的支付需求是鏈接買家跟賣家,包括一對(duì)一(比如uber),一對(duì)多(比如淘寶網(wǎng)上一個(gè)訂單來自不同商家),多對(duì)多(比如Google Play提供給所有用戶HBO,ShowTime等附加服務(wù)),資金暫存(比如支付在演唱會(huì)結(jié)束后發(fā)生,類似于支付寶的作用)。在美國平臺(tái)支付會(huì)牽涉到稅務(wù)法律方面的問題,Connect會(huì)在某些用戶收款數(shù)額超過一定臨界時(shí)通知平臺(tái)進(jìn)行相應(yīng)法律規(guī)定的流程。
Sigma
Sigma是基于該用戶在Stripe上所有已有資料而提供的數(shù)據(jù)分析產(chǎn)品。通過Sigma用戶(企業(yè))不需要自己建立復(fù)雜的pipeline來分析自己的payment數(shù)據(jù),而直接通過Stripe自身的web UI和SQL語句來進(jìn)行復(fù)雜的數(shù)據(jù)分析,快速準(zhǔn)確的進(jìn)行商業(yè)決策。
Atlas
為了幫助更多的人快速建立公司,Atlas把建立公司所有的步驟一次性負(fù)責(zé)。注冊(cè)Atlas提交一次性費(fèi)用之后,Stripe會(huì)在一周時(shí)間內(nèi)為你在Delaware注冊(cè)一家incorporation,并且在Silicon Valley Bank開通商業(yè)銀行賬戶,并且提供一次免費(fèi)法律服務(wù),另外提供附加的法律以及稅務(wù)服務(wù)。通過之前收購的Indie Hackers,Atlas還提供了創(chuàng)業(yè)家社群幫助開始創(chuàng)業(yè)的用戶快速上手
Radar
一套自研的風(fēng)控引擎系統(tǒng),幫助企業(yè)規(guī)避風(fēng)險(xiǎn)。
集成Stripe支付
在集成Stripe的支付之前,我們需要先了解一下Stripe的管理平臺(tái)。
- 注冊(cè)管理平臺(tái),測(cè)試環(huán)境注冊(cè)地址
- 成功以后在管理平臺(tái)會(huì)給我們生成一個(gè)秘鑰
- 請(qǐng)求時(shí)帶上此秘鑰,那么錢就會(huì)流轉(zhuǎn)到你注冊(cè)的管理平臺(tái)賬戶上
- 在管理平臺(tái)進(jìn)行綁定卡,就可以進(jìn)行提現(xiàn)等操作
注冊(cè)成功以后我們可以看到管理頁面如下所示,可以看到我們的秘鑰,還有資金的流轉(zhuǎn)情況等等。

我們選擇一個(gè)最簡(jiǎn)單的集成方式,就是集成Stripe的Chekcout頁面,只需要幾行代碼就能夠集成Stripe的支付能力。大概的流程我用時(shí)序圖表示,如下所示:

CheckOut頁面是Stripe提供的頁面,我們無需進(jìn)行改動(dòng)。頁面如下所示。

廢話不多說直接上代碼,我使用的Java進(jìn)行的集成,其中生成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", "胡鵬飛測(cè)試商品");
lineItem.put("description", "這是一個(gè)測(cè)試單描述");
lineItem.put("amount", 500); // 支付金額
lineItem.put("currency", "usd"); //支付幣種
lineItem.put("quantity", 1);
lineItems.add(lineItem);
params.put("line_items", lineItems);
//TODO 必須使用https 返回的回調(diào)地址
String uuid = UUID.randomUUID().toString();
params.put("client_reference_id", uuid);//業(yè)務(wù)系統(tǒng)唯一標(biāo)識(shí) 即訂單唯一編號(hào)
log.info("uuid:{}",uuid);
params.put("success_url", URLUtils.getBaseURl(httpRequest)+"/paySuccess");// 支付成功跳轉(zhuǎn)頁面
params.put("cancel_url", URLUtils.getBaseURl(httpRequest)+"/payError");// 支付失敗跳轉(zhuǎn)頁面
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;
}
其中商戶信息我沒有讓前端來傳,我在后臺(tái)寫死了,只是為了方便調(diào)用。可以看到生成sessionId傳給前端,然后前端做如下調(diào)用。就可以直接跳轉(zhuǎn)到checkOut頁面進(jìn)行支付了。
stripe.redirectToCheckout({
sessionId: data.sessionId
}).then(function (result) {
console.log(result);
});
到目前為止就這幾行代碼我們就已經(jīng)集成了Stripe的支付功能,其實(shí)Stripe支持的功能還有很多,就像我們上面介紹的還支持訂閱支付,當(dāng)然也能夠不使用它的checkout頁面,而是我們自定義的頁面,只不過稍微麻煩了點(diǎn),我這里就不介紹了,具體有需求的可以查看它的文檔里面寫的很詳細(xì)。相關(guān)文檔都在下面列出來了。
在GitHub代碼中還有相關(guān)的退款、回調(diào)等接口的信息,我這里就不一一介紹了,大家可以去github上面拉下來代碼查看一下就明白了。