【问题标题】:Passing only one product to Stripe checkout from Django仅将一种产品从 Django 传递给 Stripe 结帐
【发布时间】:2021-08-05 14:49:27
【问题描述】:

我已经将 Django 与 Stripe 集成在一起,看起来效果不错。但是,我在条纹结帐页面中显示所有产品时遇到了问题。我需要告诉 Stripe 我们要购买哪些产品。如果我在购物车中有 2 件产品,我只会在条带结帐中看到一件产品。

views.py

def payments_stripe(request):
    YOUR_DOMAIN = "http://127.0.0.1:8000/orders"
    print(request.body)
    body = json.loads(request.body)
    cart = Cart.objects.get(cart_id=_cart_id(request))
    cart_items = cartItem.objects.filter(cart=cart, is_active=True)
    print(cart_items)
    order = Order.objects.get(cart=cart, is_ordered=False, order_number=body['orderID'])
    print(order)

    for cart_item in cart_items:
        quantity = cart_item.quantity
        print(quantity)
        name = cart_item.product.name
        print(name)
        
    try:
        checkout_session = stripe.checkout.Session.create(
            customer_email=order.email,
            billing_address_collection='auto',
            payment_method_types=['card'],
            line_items=[
                {
                    'price_data': {
                        'currency': 'eur',
                        'unit_amount': int(order.order_total * 100),
                        'product_data': {
                            'name': name,
                            'images': ['https://i.imgur.com/EHyR2nP.png'],
                        },
                    },
                    'quantity': quantity,
                },
            ],
            metadata={
                'order_number': body['orderID'], 
                'payment_method': body['payment_method'], 
                'cart_id': cart,
            },
            mode='payment',
            success_url=YOUR_DOMAIN + '/success/',
            cancel_url=YOUR_DOMAIN + '/cancel/',
        )

        return JsonResponse({'id': checkout_session.id})
    except Exception as e:
        return JsonResponse(error=str(e)), 403

我迭代购物车项目,迭代给出: 1 金箭 1 银心

但是在 Stripe 仪表板中我只看到一个产品 1 Golden Arrow。

我想我需要创建一个新列表。那正确吗?在我的情况下,我该怎么做?

谢谢

【问题讨论】:

    标签: django view stripe-payments


    【解决方案1】:

    您需要将每个项目实际添加到line_items 数组中,因此您希望执行更多类似的操作:

    line_items = []
    
    for cart_item in cart_items:
        # I presume you have something like cart_item.amount, right?
        unit_amount = int(cart_item.amount * 100)
    
        line_items.add({
            'price_data': {
                'currency': 'eur',
                'unit_amount': unit_amount,
                'product_data': {
                    'name': cart_item.product.name,
                    'images': ['https://i.imgur.com/EHyR2nP.png'],
                },
            },
            'quantity': cart_item.quantity,
        })
        
    try:
        checkout_session = stripe.checkout.Session.create(
            customer_email=order.email,
            billing_address_collection='auto',
            payment_method_types=['card'],
            line_items=line_items,
            metadata={
                'order_number': body['orderID'], 
                'payment_method': body['payment_method'], 
                'cart_id': cart,
            },
            mode='payment',
            success_url=YOUR_DOMAIN + '/success/',
            cancel_url=YOUR_DOMAIN + '/cancel/',
        )
    

    【讨论】:

    • 非常感谢您的回复。我尝试了您的建议,但出现错误 l line_items.add({ AttributeError: 'list' object has no attribute 'add' 我通过将 add 替换为 append 来纠正它。然后我又试了一次,但我又在条纹结帐页面中得到了一个产品。 [{'price_data': {'currency': 'eur', 'unit_amount': 1700, 'product_data': {'name': 'Golden Arrow', 'images': ['https://i.imgur.com/EHyR2nP.png']}}, 'quantity': 1}]
    • 它与附加一起工作。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 2022-07-12
    • 2016-06-05
    • 1970-01-01
    • 2023-04-02
    • 2016-07-29
    • 2023-03-07
    相关资源
    最近更新 更多