在成功页面检索条带会话 ID

Retrieve stripe session id at success page

我在 django 中使用 stripe,我想将从结帐会话收到的一些信息传递到成功页面。

看完文档https://stripe.com/docs/payments/checkout/custom-success-page#modify-success-url我修改成功url为

MY_DOMAIN = 'http://127.0.0.1:8000/orders'

success_url=MY_DOMAIN + '/success?session_id={CHECKOUT_SESSION_ID}',
cancel_url=YOUR_DOMAIN + '/cancel/',
            metadata={
                "price_id": price_id,
                
                }
            )

def Success(request):
    session = stripe.checkout.Session.retrieve('session_id')
    return render(request, 'orders/success.html')

但这给了我一个错误:

无效checkout.session ID:session_id

如果我手动输入 url 中打印的实际 ID 而不是“session_id”,一切正常。

所以我的问题是我应该写什么而不是 'session_id' 来检索会话?

使用预建的结帐页面时,您向 Stripe 提供成功 url 以在用户成功完成付款时将其发送至。这是这样做的:

checkout_session = stripe.checkout.Session.create(
                        line_items=[{'price': price, 'quantity': 1}],
                        payment_method_types=['card'],
                        mode='payment',
                        success_url="http://yoursite.com/order/success?session_id={CHECKOUT_SESSION_ID}"
                        cancel_url=domain + cancelURL,
                    )

return redirect(checkout_session.url)

这将创建一个 Stripe 结帐会话并将用户发送给它。 一旦用户成功付款,Stripe 会将它们发送到您提供的 success_url 并输入正确的结帐会话 ID。

你将不得不使用webhooks获取你想要的数据,将其保存到你的数据库中,然后在成功页面视图中查询数据库。从成功页面 URL 获取结帐会话 ID 将取决于您使用的是像上面示例中的 GET 还是作为 URL 的一部分,例如 https://yoursite.com/order/12345. If you use the GET method, see here 以获取更多信息。