Http 考虑到GET请求应该是安全的,如何处理条带上的成功URL?

Http 考虑到GET请求应该是安全的,如何处理条带上的成功URL?,http,get,stripe-payments,idempotent,Http,Get,Stripe Payments,Idempotent,在进行条带签出会话时,我们会包含一个成功url: session=等待this.stripe.checkout.sessions.create({ 付款方式类型:[“卡”], 行项目:行项目, 付款意向数据:{ 传输数据:{ 金额:9999999, 目的地:someaccountId, }, }, 成功网址:`http://localhost:4000/api/checkout/success?true&session_id={CHECKOUT\u SESSION\u ID}&alias\u I

在进行条带签出会话时,我们会包含一个成功url:

session=等待this.stripe.checkout.sessions.create({
付款方式类型:[“卡”],
行项目:行项目,
付款意向数据:{
传输数据:{
金额:9999999,
目的地:someaccountId,
},
},
成功网址:`http://localhost:4000/api/checkout/success?true&session_id={CHECKOUT\u SESSION\u ID}&alias\u ID=${aliasId}`,
取消url:`http://localhost:4000/api/checkout/canceled?session_id={CHECKOUT\u SESSION\u ID}`,
});
成功URL是stripe在成功付款后向用户发送的URL。这是一个GET请求,因为stripe正在重定向用户。许多使用stripe的应用程序在成功签出后需要执行操作-发送电子邮件收据、通知、发送付费内容、更新数据库中的订单等。但建议不要在GET请求中执行这些操作,因为GET请求应该是和

例如,电子邮件中的退订链接不应退订用户,而应“退订链接的正确方法是指向一个页面,用户可以在该页面中单击按钮退订(在该页面中,按钮单击会触发POST请求)。”这是因为“很多很多工具、实用程序、网络爬虫和其他东西都认为GET永远不会是一个破坏性的行为(这是正确的,因为它是以这种方式指定的)。如果您现在通过破坏该规范来破坏应用程序,那么您将保留应用程序的两个部分。”


所以我想知道什么是处理条带成功url的正确方法?如果我们遵循上面的建议,那么成功url将链接到一个页面,用户单击一个按钮更新订单,通过电子邮件发送收据等。但是,我们依赖于客户完成已经支付的订单。如果他们不按t键hat按钮,则重要操作未完成。正确的方法是什么?或者不在GET请求中更改数据库的建议是否因某种原因不适用于这些类型的操作?

使页面中处理签出会话代码的部分等幂-即,让它先检查其步骤是否已完成已处理(在这种情况下,跳过),或者使其在第一次运行后可以重复多次,而不会产生任何额外效果

对于“工具、实用程序、网络爬虫和其他东西”来说,使用有效的签出会话ID点击URL几乎是不可能的,所以无论您使用什么代码来处理“坏会话ID”,都可以很好地处理


您还应该为此提供一个webhook,它将收到一个POST请求。

谢谢。作为对“for”工具、实用程序、网络爬虫和其他内容的响应“使用有效的签出会话ID点击您的URL几乎是不可能的”-签出ID参数是否已硬编码到成功URL中,以便使用正确的ID发送已爬网的链接?或者这并不重要,因为我的代码中确实有它来检查该id的付款是否已被真正处理,这就是为什么它可以吗?不,您在重定向URL中使用模板
{CHECKOUT\u SESSION\u id}
,当它重定向时,Stripe会将其替换为该会话的签出会话id。如果不完成签出过程,网络爬虫将无法获得该重定向。