在 Django 中使用 Stripe API 创建产品

Creating Products with Stripe API in Django

创建我的第一个正式网站并尝试连接 Stripe 进行支付。他们的 API 似乎不是很有活力(我可能读错了)。试图整合他们的 checkout page.

我对如何一次制作多个产品感到困惑。试图遍历我的 OrderItems:

def checkout(request):
    customer = request.user.customer
    order = Order.objects.get(customer=customer)
    items = order.orderitem_set.all()
    for item in items:
        stripe.Product.create(
            name = item.name
            description= item.desc
        )
        stripe.Price.create(
            product= product.id,
            unit_amount=int(order.get_cart_total),
            currency='gbp',
        )

但一直纠结于如何声明 Price.create

的产品 ID

他们对这部分也感到困惑 API:

session = stripe.checkout.Session.create(
  payment_method_types=['card'],
  line_items=[{
    'price': '{{PRICE_ID}}',
    'quantity': 1,
  }],
  mode='payment',
  success_url='https://example.com/success?session_id={CHECKOUT_SESSION_ID}',
  cancel_url='https://example.com/cancel',

我还没有在任何网站上托管我的网站,所以我可以将 URL 设置成什么? Checkout_session 从哪里来?找不到任何关于此的最新信息,所以我很抱歉问什么可能不是一个好问题但不知道该怎么做。谢谢!

使用 Stripe,每个 API 请求 returns 一个 JSON 响应,然后可以在相应的 API 资源中反序列化。这意味着当您调用创建产品 API you get a Product back and when you call the Create Price API 时,您会得到 Price 返回。

您与之交互的大多数 API 资源都有一个 ID。所以对于 Product 它是 prod_123456 而对于 Price 它是 price_abcdefg.

在您的代码中,您需要将 Product 创建的结果存储在一个变量中,以便您在创建 Price 时可以引用它。

def checkout(request):
    customer = request.user.customer
    order = Order.objects.get(customer=customer)
    items = order.orderitem_set.all()
    for item in items:
        product = stripe.Product.create(
            name = item.name
            description= item.desc
        )
        price = stripe.Price.create(
            product= product.id,
            unit_amount=int(order.get_cart_total),
            currency='gbp',
        )

同样,当您尝试创建会话时,您需要确保将行项目列表设置为具有您刚刚创建的正确价格 ID。

同样,在大多数情况下,您已经提前在 Stripe 中创建了产品和价格目录。这个想法是你已经知道你在卖什么产品,在什么价格点,你在 Stripe 中设置所有这些。稍后,您自己的订单模型将在您创建结帐会话时引用这些价格和产品 ID。

如果您只想要一次性产品,那么您应该做的是在创建结帐会话时内联创建它们,方法是使用 price_data 作为 parameter

最后,对于 URL 部分,这将是您网站的 URL,您希望客户在付款后返回该网站。这个想法是,在您的网站上付款后,您可以将您的客户直接重定向到 Stripe 上的 Checkout。一旦他们付款,Stripe 会将它们发回给您,发送给您在该电话中提供的特定 URL,以便您可以感谢他们的订单。这在文档 here 中有所介绍。类似地,URL 中的 {CHECKOUT_SESSION_ID} 部分只是一个神奇的值,当他们将客户发送回您的网站时,Stripe 将用真实的结帐会话 ID cs_test_1234567 替换它。

(如果您有后续问题,您可能想直接与 Stripe's support team 交谈)