【发布时间】:2021-05-19 18:58:03
【问题描述】:
我正在将 Stripe Checkout 与我的 django 网站集成。我有 2 个产品,每次 PaymentIntent 成功时,我都想获取与价格相关的(购买的产品)。
我有 2 个结帐,每个产品一个,还有一个要收听的 webhook。
views.py - 创建购买会话(产品 1 和 2 存在两次)
@csrf_exempt
def create_checkout_session_product1(request):
if request.method == 'GET':
domain_url = 'example.com'
checkout_session = stripe.checkout.Session.create(
success_url=domain_url + 'paiement_ok/',
cancel_url=domain_url + 'paiement_ko/',
payment_method_types=['card'],
line_items=[
{
"price" : "price_1...", <----- What I want to fetch
"quantity": 1,
},
],
mode='payment',
customer_email=request.user.get_username(),
)
return JsonResponse({'sessionId': checkout_session['id']})
views.py - 购买后触发流程的 Webhook
@csrf_exempt
def webhook(request):
payload = request.body
sig_header = request.META['HTTP_STRIPE_SIGNATURE']
event = None
try:
event = stripe.Webhook.construct_event(
payload, sig_header, endpoint_secret
)
except ValueError as e:
# Invalid payload
return HttpResponse(status=400)
except stripe.error.SignatureVerificationError as e:
# Invalid signature
return HttpResponse(status=400)
# Handle the checkout.session.completed event
if event['type'] == 'checkout.session.completed':
session = event['data']['object']
#then I'd want to do something like :
line_items = stripe.checkout.Session.list_line_items(session.id)
price = line_items.data.price.id
if price == product1:
activate_process_product1(session.customer_email)
elif price == product2:
activate_process_product2(session.customer_email)
# Passed signature verification
return HttpResponse(status=200)
所以自从我拿到钱后,webhook 就可以工作了。
但我不知道购买完成后如何获取产品?
【问题讨论】:
-
购买完成后,您希望在什么时候取货?
checkout.session.completed事件在购买完成并且您将产品信息拉到那里后已经触发。 -
或者您的问题是如何从 Payment Intent 对象中获取产品?
-
感谢 karbi,理想情况下,当付款意图的状态成功时,我想获取产品。不确定如何,我想应该从 Webhook 视图中完成,但它似乎不起作用
-
在下方留下答案 - 当付款意图成功时,您应该会收到一个
payment_intent.succeeded事件。您可以提取付款意图并使用以下步骤获取价格产品。或者,您可以依靠付款成功后发出checkout.session.completed的事实,直接使用 Checkout Session。