海外支付渠道对接
在新公司中,遇到了一个之前没遇到过的业务,那就是对接海外的支付。之前一直以为管理对接有什么技术高山需要登顶,接触之后发现好像也没啥,都是对接接口。按照各种支付平台文档要求去对接就好。
前后对接过几个平台的支付:Alipay、PayPal、Payssion、Stripe 。最后发现套路好像都差不多。目前应用到的支付有两种模式:单次支付、订阅支付。
单次支付
各个平台的单次支付都差不多,大体流程如下:
1、商户系统 调用支付平台 API,生成支付订单。
2、支付平台 返回支付链接 / 支付页面。
3、用户 在支付页面完成支付。
4、支付平台 同步/异步通知支付结果。
5、商户系统 根据通知更新订单状态。
支付平台异步通知支付结果的接口有的需要在平台去注册,有的需要在请求生成支付订单的时候作为参数传进去。
| 平台 | 发起支付 | 支付页面 | 支付完成回调 | 特点 |
|---|---|---|---|---|
| Alipay | 商户调用支付宝下单接口 | 跳转支付宝收银台 | 支付宝回调 + 商户查询 | 国内主流,强制回调机制 |
| PayPal | 商户调用 create payment API |
跳转 PayPal 网页/APP | PayPal 回调 + IPN | 跨境常用,用户体验好 |
| Payssion | 商户调用 Payssion API | 跳转到对应本地支付方式 | Payssion 回调 + 查询 | 聚合多国本地支付 |
| Stripe | 商户调用 PaymentIntent API |
Stripe Checkout 页面 | Webhook 通知 | 开发者友好,API 统一 |
sequenceDiagram
participant U as 用户
participant M as 商户系统
participant A as 支付平台
rect rgb(230,230,250)
U->>M: 调用商户支付
M->>A: 调用统一收单下单接口 (各平台不同)
A-->>M: 返回支付链接
M->>U: 添加回调页面返回用户
U->>A: 打开支付链接完成支付
A->>M: 打开回调页面
A-->>M: 异步回调通知支付结果
M->>A: 可选:查询订单确认
end
订阅支付
几个平台的订阅支付,就有所不同了,主要分三种:
1、以alipay为代表,在订单和授权都完成的情况下,每期扣款都需要商户主动调取相应接口。
2、以PayPal / Stripe为代表,在订单和授权都完成的情况下,支付平台会每期自动扣款。
3、以Payssion为代表,每次都需要重新生成订单,重走流程,需要用户手动确认。
sequenceDiagram
participant User as 用户
participant App as 商户系统
participant Pay as 支付平台
Note over User,Pay: 订阅签约流程
User->>App: 选择订阅
App->>Pay: 创建签约 / 订阅计划
Pay-->>App: 返回授权页面链接
App->>User: 跳转到授权页面
User->>Pay: 确认授权(免密代扣)
Pay-->>App: 返回协议号/订阅ID
Pay-->>User: 回跳到 return_url
Note over App,Pay: 后续周期扣款
alt 支付宝
App->>Pay: 主动调用 alipay.trade.create (带 agreement_no)
Pay-->>App: 返回扣款结果 + notify
else PayPal / Stripe
Pay-->>User: 到期日自动扣款
Pay-->>App: Webhook 通知结果
else Payssion
App->>Pay: 每期重新生成支付订单
User->>Pay: 手动完成支付
end