【发布时间】:2021-01-29 08:19:29
【问题描述】:
我需要为 Stripe Checkout 创建一个会话。根据 Stripe Checkout Docs:
在您的服务器上添加一个端点以创建一个结帐会话。结帐会话控制您的客户在 Stripe 托管的付款页面中看到的内容,例如订单项、订单金额和货币以及可接受的付款方式。在响应中返回 Checkout Session 的 ID 以引用客户端上的 Session。
我正在努力在 Graphene(用于 Django 实现的 GraphQL 包装器)中创建此服务。
这是文档显示的示例(Flask):
21@app.route('/create-session', methods=['POST'])
22def create_checkout_session():
23 try:
24 checkout_session = stripe.checkout.Session.create(
25 payment_method_types=['card'],
26 line_items=[
27 {
28 'price_data': {
29 'currency': 'usd',
30 'unit_amount': 2000,
31 'product_data': {
32 'name': 'Stubborn Attachments',
33 'images': ['https://i.imgur.com/EHyR2nP.png'],
34 },
35 },
36 'quantity': 1,
37 },
38 ],
39 mode='payment',
40 success_url=YOUR_DOMAIN + '?success=true',
41 cancel_url=YOUR_DOMAIN + '?canceled=true',
42 )
43 return jsonify({'id': checkout_session.id})
44 except Exception as e:
45 return jsonify(error=str(e)), 403
我知道如何让前端(反应)工作,并且知道如何在每次用户想要购买东西时请求这个创建会话 ID,但我被困在创建会话服务的 GraphQl 服务器实现上。本质上,我想将上面的代码转换为 GraphQL 等价物。我想知道我是否需要为此服务创建模型?任何能让我开始的事情都会有所帮助!
【问题讨论】:
-
在这种特殊情况下,使用 GraphQL 可能不适合您。 GraphQL 是一种工具,可用于更新/改变 your 数据库中的对象。在这种情况下,您只需要一个创建 Checkout Session 的 API 端点,如您帖子中的示例所示。不会有任何查询或突变要做,因此 GraphQL 的真正目的/需求不存在。我个人的建议是维护一个 graphql 端点来管理您的应用程序特定对象/资源的状态,以及一个单独的 REST 端点来创建 Checkout Session。
-
非常感谢您的解释!我确实尝试创建一个单独的 REST 端点,但它一直说“获取”不允许。我现在再试一次。快速提问,REST 端点可以在我创建 GraphQL 端点的同一个 Django 项目中吗?
-
可以。您需要设置路由,以便用于两个端点的 URL 不同。
标签: django graphql stripe-payments graphene-python graphene-django