仅将一种产品从 Django 传递到 Stripe 结账
Passing only one product to Stripe checkout from Django
我已经将 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。
我想我需要创建一个新列表。那正确吗?在我的情况下我该怎么做?
谢谢
您实际上需要将每个项目添加到 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/',
)
我已经将 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。
我想我需要创建一个新列表。那正确吗?在我的情况下我该怎么做?
谢谢
您实际上需要将每个项目添加到 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/',
)