我成功创建了一个结账会话,但是当我检查payment_intent值时,它显示为null。下面是我使用的代码:
@csrf_exempt
def create_checkout_session(request,id):
request_data = json.loads(request.body)
order = Order.objects.filter(id = id).last()
stripe.api_key = PaymentConfig.objects.all().last().stripe_secret_key
checkout_session = stripe.checkout.Session.create(
# Customer Email is optional,
# It is not safe to accept email directly from the client side
customer_email=request_data['email'],
payment_method_types=['card'],
line_items=[
{
'price_data': {
'currency': str(order.amount_type.lower()),
'product_data': {
'name': order.plan.title,
},
'unit_amount': int(order.amount * 100),
},
'quantity': 1,
}
],
mode='payment',
success_url=request.build_absolute_uri(
reverse('paymentsuccess')
) + "?session_id={CHECKOUT_SESSION_ID}",
cancel_url=request.build_absolute_uri(reverse('paymentfailed')),
)
order.stripe_payment_intent = checkout_session['payment_intent']
print(payment_intent) -- **null value**
order.save()
return JsonResponse({'sessionId':checkout_session.id})
字符串
获取这个值并将其保存到order对象中是很重要的,这样我就可以在付款后在处理程序视图中访问订单。下面是处理程序视图的代码:
class PaymentSuccessView(TemplateView):
template_name = "v3/payment-successful.html"
def get(self, request, *args, **kwargs):
session_id = request.GET.get('session_id')
if session_id is None:
return HttpResponseNotFound()
stripe.api_key = PaymentConfig.objects.all().last().stripe_secret_key
session = stripe.checkout.Session.retrieve(session_id)
order = get_object_or_404(Order, stripe_payment_intent=session.payment_intent) --**HERE**
call=AfterPaymentBackend(request, order.id)
ctx = {
'order':order,
'siteInfo':Company.objects.all().last()
}
return render(request, self.template_name, ctx)
型
我是不是忽略了什么?谢谢。
我试着向聊天GPT寻求帮助,但AI不是那么强大。我试着在谷歌上搜索,但找不到任何东西。我在部署后尝试了一下,但没有任何变化。
1条答案
按热度按时间mcvgt66p1#
如果您使用的是API版本2022-08-01或更高版本,则仅在确认会话时才会创建PaymentIntent。
您可以通过侦听
checkout.session.completed
事件或随后使用success_url
中的session_id
查询参数检索Checkout Session来保存相应的PaymentIntent。我会推荐通过这个指南:https://stripe.com/docs/payments/checkout/fulfill-orders