Payment Intent value is null Stripe Django

tcbh2hod  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(148)

我成功创建了一个结账会话,但是当我检查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不是那么强大。我试着在谷歌上搜索,但找不到任何东西。我在部署后尝试了一下,但没有任何变化。

mcvgt66p

mcvgt66p1#

如果您使用的是API版本2022-08-01或更高版本,则仅在确认会话时才会创建PaymentIntent。
您可以通过侦听checkout.session.completed事件或随后使用success_url中的session_id查询参数检索Checkout Session来保存相应的PaymentIntent。
我会推荐通过这个指南:https://stripe.com/docs/payments/checkout/fulfill-orders

相关问题