成功的Stripe结账后重定向

6

我正在使用C# .Net和Stripes支付网关。首先我创建了一个结账页面,将用户重定向到Stripe的支付网关(因为我不想麻烦地维护信用卡号等信息,所以这种方式将请求转发给Stripe来获取信用卡详细信息、处理付款等)—这是在代码后台完成的。https://stripe.com/docs/payments/checkout/one-time

我将成功的URL设置为www.example.com/myHandler.ashx(通用处理程序),该URL将订单ID设置为成功。我的处理程序代码类似于https://stripe.com/docs/webhooks/build(因为我使用的是通用处理程序,所以我使用的是表格而不是MVC)。

成功付款后,付款记录将保存到我的数据库中。

考虑到这是一个Webhook,我该如何显示或重定向到一个感谢页面?


1
您的成功URL是用户将被重定向到的URL。因此,该页面应该是显示感谢的页面。 - Joost K
好的,但是我该如何记录它是一笔成功的付款并执行数据库任务呢?我可以将处理程序转换为页面,但我不确定是否完全理解。 - Computer
1个回答

8

你有多种解决此问题的方式。

选项1:
将成功页面与Webhook组合使用。这意味着它会向用户显示页面,并在后端更新交易状态。

您的URL应该是这样的
SuccessUrl = "https://example.com/success?session_id={CHECKOUT_SESSION_ID}"
然后使用会话ID处理状态更改,就像使用Webhook一样,但将HTML页面返回给用户(从技术上讲,这不是Webhook)。

根据您的问题,SuccessUrl可能会以会话对象作为正文,否则您当前的代码应该无法工作,但我不确定。

要根据ID获取会话对象,可以调用Stripe进行另一个调用,请参见: https://stripe.com/docs/api/checkout/sessions/retrieve#retrieve_checkout_session

一旦支付成功,结帐会话将包含对客户的引用,以及成功的PaymentIntent或活动Subscription。

选项2:
单独创建Webhook,与您的感谢页面分开。这意味着SuccessUrl将是您的感谢页面。
Webhook需要单独以及全局地定义为stripe。您可以在此处查看如何完成此操作:https://stripe.com/docs/webhooks/configure


让我先尝试选项1。我提供的链接用于处理数据库任务,显示从POST请求中的stripeEvent.Type == Events.PaymentIntentSucceeded - 我如何访问订单详细信息,即我有会话ID,但如何加载记录以采取行动? - Computer
我很快就会看一下这个问题,但在我深入研究之前还有一个问题。会话ID必须是成功URL的一部分吗?我正在使用MetaData来保存其他数据,所以我能否只使用MD来保存会话ID? - Computer
哦,是的,您还应该能够将其放入元数据中。我只是使用了这个示例,因为它也在官方文档中。 - Joost K
我有一个SessionService(来自您提供的链接),但是如何将其与成功付款相关联以进一步处理呢?以前我除了Response外还有Stripe.PaymentIntent,而且Response中不包括MetaData,我需要再打一个电话吗? - Computer
不确定您的意思?您之前是如何获取PaymentIntent的?您不能保持大部分与之前相同,但在asp.net中返回一个视图吗? - Joost K
1
选项1不是一个好主意。你希望你的“感谢页面”仅依赖于checkout.Session。在感谢页面中,您应该告诉客户的只有“我们确认您的订单”和任何存在于checkout.Session对象中的数据。与此分开,您使用由Stripe调用的Webhook来完成交易、履行订单、向客户发送确认电子邮件等。它应该基于PaymentIntentSubscription对象。这是Stripe文档中描述的首选方法。 - Neil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接