海外支付渠道对接
在新公司中,遇到了一个之前没遇到过的业务,那就是对接海外的支付。之前一直以为管理对接有什么技术高山需要登顶,接触之后发现好像也没啥,都是对接接口。按照各种支付平台文档要求去对接就好。
前后对接过几个平台的支付: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