【发布时间】: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,然后有条件地显示“恭喜您的产品将发货!”消息)
【问题讨论】:
标签: ruby-on-rails stripe-payments