如何处理条带支付成功?

Posted

技术标签:

【中文标题】如何处理条带支付成功?【英文标题】:How to handle payment success in stripe? 【发布时间】:2021-03-17 03:41:46 【问题描述】:

在用户访问payments page 并成功付款后,Stripe 会将客户重定向到提供给success_url 的任何网址

Stripe.api_key = 'sk_test_51HYHSFGtUKse83O9J4QeAib3cp8sHzGaOQRrn7sba92Hd8dCHE3AIHe5ModevMK7TVAUCyJU0ADSwIUoX00qxZmBI9r'

session = Stripe::Checkout::Session.create(
  payment_method_types: ['card'],
  line_items: [
    name: 'Kavholm rental',
    amount: 1000,
    currency: 'aud',
    quantity: 1,
  ],
  payment_intent_data: 
    application_fee_amount: 123,
    transfer_data: 
      destination: 'CONNECTED_STRIPE_ACCOUNT_ID',
    ,
  ,
  success_url: 'https://example.com/success',
  cancel_url: 'https://example.com/failure',
)

现在应用/平台必须安排“履行”:

付款完成后,您需要自行处理任何必要的履行事宜。例如,需要预付款的房屋租赁公司会在付款成功后将房主与承租人联系起来。

还有(来自我的粗体):

不要仅仅依靠重定向到 success_url 参数来完成购买:

恶意用户无需付费即可直接访问success_url,并获得您的商品或服务的访问权限。 成功付款后,客户可能无法始终联系到success_url。他们可能会在重定向发生之前关闭浏览器选项卡。

到目前为止,一切都在 Stripe 文档中得到了很好的解释并且非常容易理解。

但我想知道:接下来最好做什么,注意:

    付款可能不会立即完成,因此仅加载 success_url 可能为时过早 可以(轻松)配置 webhook 以侦听事件,但是如果在 webhook 收到成功消息之前甚至 1 秒加载了 success_url,则它不会知道付款成功(例如,显示“恭喜,您的产品将发货!”消息可能是冒昧的

问题

最后,问题是:从success_url 开始的流程的最佳实践是什么?我只是对什么是最好的模式感到困惑..

想法

以下是我考虑过的一些事情:

在路由到success_url 时,只需使用sleep(5),然后检查控制器中的webhook 是否有success_url,这样加载需要额外5 秒,让webhook 有机会接收传入事件,因此您可以显示要么“恭喜您的产品将发货!”或“哦,不,您的付款出了点问题,请重试或联系您的银行”。

直接路由到success_url,但随后有一条消息说“请稍后刷新”(然后监听表明付款成功的 webhook,然后有条件地显示“恭喜您的产品将发货!”消息)

【问题讨论】:

【参考方案1】:

documentation for fulfilling orders 在代码 sn-p 下的信息框中有这个:

当您确认收到事件时,您的 Webhook 端点会将您的客户重定向到 success_url。在您的端点已关闭或未正确确认事件的情况下,您的处理程序会在成功付款 10 秒后将客户重定向到success_url

上面引用的事件是发送到您的 webhook 端点的 checkout.session.completed 事件。延迟旨在让您确认支付成功,并根据 Checkout Session 的结果自定义成功页面。

换句话说,Checkout 不会将某人发送到您的 success_url,直到您通过成功 (2xx) 响应从您的 webhook 端点响应 checkout.session.completed 事件请求,让您有时间自定义成功页面根据结果​​。

例如,您可以默认为“您的付款正在处理中”成功页面,但如果您在收到checkout.session.completed 事件后确认结帐会话和付款成功,您可以改为将页面更改为“恭喜您的产品将被发货”。

这种方法意味着您可以可靠地展示一个始终显示准确信息的成功页面。

【讨论】:

看起来虽然从 webhook(即 4xx)返回否定响应不会影响流程......它仍然会将用户发送到 successUrl。也许它只是让您有机会首先确认收据(时间安排)而不是实际上让您影响成功/失败结果? 是的,无论来自 webhook 的响应如何,客户都将被发送到 success_url。你的理解是正确的。

以上是关于如何处理条带支付成功?的主要内容,如果未能解决你的问题,请参考以下文章

Paypal Business Standard:付款后如何处理?

app支付环境报毒如何处理

微服务架构的分布式事务问题如何处理?

支付成功后渲染视图

SSH网上商城项目实战24Struts2中如何处理多个Model请求

使用 ActiveMerchant 时如何处理超时?