java 对接 PayPal 或者 Stripe 支付,订阅

2 篇文章 0 订阅

1.对接流程思路:

简单说一下订阅的思路,要处理的问题(PayPal和stripe差不多):

1.注册开发者平台账号,获取key,secret

2.动态创建商品,设置价格:从数据库取出商品和价格,代码创建

3.创建完商品后,返回一个会话的界面,后台要做的是在此时创建一个初始订单,使用会话产生的session作为订单的唯一标识。会话界面是用户需要使用自己的账号或者银行卡登陆支付。

4.用户支付完成后,回调,后台更改订单状态,处理自己的业务,后台维护一个订阅表,记录订阅状态。方便后续我们自己取消订阅。

5.续费,取消订阅(订阅到期),支付失败,三个关键事件,使用webhook监听处理,webhook在开发者后台配置就好了。使用订阅ID作为唯一标识,来处理指定的订阅业务。

6.订阅的升级和降级,目前的业务是,必须取消之前的订阅,才能重新选择。

已完成开发且部署上线,有问题联系Q656984220

2.文档地址:

  1. Stripe开发者后台:https://dashboard.stripe.com/
  2. Stripe支付API文档:Payments | Stripe Documentation
  3. Stripe支付Charge API文档:https://stripe.com/docs/payments/charges-api
  4. PayPal开发者后台:https://developer.paypal.com/
  5. PayPal商家沙盒地址:https://sandbox.paypal.com

3.webhooks监听事项

 如果前端在用户支付成功后,主动回调服务器进行验证,那服务端就不需要配置webhooks了,但是一定要保证前端回调服务不会有问题。

webhooks才是最保险的,前端处理完用户支付流程,直接返回支付结果给用户就好了,剩余支付成功的处理,让服务器监听webhooks最好。

3.1Stripe一次性支付

1.采用Charge方式支付,由服务器端扣款,方法是同步的,基本不需要webhooks了,但是由于在某些情况下,stripe支付会有风险检查、支付延迟等,会导致同步返回的支付状态并不是最新的,支付成功不等于扣款成功。

charge.getPaid():返回用户是否支付

charge.getStatus():返回支付状态

所以这种方式也是可以用webhooks监听的,监听事项为:charge.succeeded

不监听也可以,其实很少会遇到上述的 “在某些情况下”

2.采用支付会话和回调的方式,异步支付

看前端使用 checkout API,就监听:checkout.session.completed

看前端使用payment API ,就监听:payment_intent.succeeded

跟前端问清楚。

3.2Stripe订阅

监听事件:

checkout.session.completed 监听会话是否完成
invoice.paid 监听每次付款成功,包括首次和续费
customer.subscription.deleted  监听取消订阅
subscription_schedule.aborted  监听订阅逾期,续费失败

3.3PayPal一次性支付

PayPal只有异步回调的方式,由于paypal支付扣钱是由服务器端控制的,前端可以直接回调服务器,即便调用服务器失败,该笔订单也不会被扣钱。

其实可以不需要配置webhooks,如果配置的话,可以配置监听:

PAYMENT.CAPTURE.COMPLETED:表示支付已成功完成并已经扣款。

3.4PayPal订阅

监听事件:

BILLING.SUBSCRIPTION.PAYMENT.FAILED  支付失败
BILLING.SUBSCRIPTION.CANCELLED  订阅取消
PAYMENT.SALE.COMPLETED 订阅支付成功,包括首次和续费都会通知

3.5监听事件注意的问题

1."PAYMENT.CAPTURE.COMPLETED" 和 "PAYMENT.SALE.COMPLETED"事件的区别


(1)一次性支付(One-time Payment):当用户进行一次性支付时,支付的核心目标是完成一次性的交易,即购买商品或服务后立即支付。在这种情况下,"PAYMENT.CAPTURE.COMPLETED"事件通知更适合,因为它表示支付金额已经从买家的账户中成功扣款,并且到达商家的账户。这个事件的重点在于支付款项的扣款和到达的过程。


(2)订阅付费(Subscription Payment):对于订阅付费,用户通过订阅服务以周期性的方式支付费用。在这种情况下,"PAYMENT.SALE.COMPLETED"事件通知更适合,因为它表示订阅期内的付款已经成功完成,资金从买家的账户转移到商家的账户。这个事件的重点在于订阅付费的销售操作和资金的转移。


2. 当系统中同时存在一次性支付和订阅时,webhook又监听了两个事件,那么一次支付或者订阅完成,会收到两个事件的通知,需要在业务中判断,避免重复处理。


(1)对于一次性支付,event_type字段的值为PAYMENT.CAPTURE.COMPLETED,而resource字段中包含有关该次支付的信息,如支付ID(id)、支付状态(status)、支付金额(amount)等。


(2)对于订阅支付,event_type字段的值也是PAYMENT.CAPTURE.COMPLETED,但在resource字段中,您可以进一步检查是否存在billing_agreement_id字段。如果存在billing_agreement_id字段,则表示这是与订阅协议相关的订阅支付。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落墨留白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值