如何在Django中保存收货地址实现Stripe Checkout自动填充?
问题:Stripe Checkout如何自动填充收货地址?
我在Django视图中设置了shipping_address_collection,代码如下:
# "views.py" import stripe from django.shortcuts import redirect def test(request): customer = stripe.Customer.search(query="email:'test@gmail.com'", limit=1) checkout_session = stripe.checkout.Session.create( customer=customer["data"][0]["id"] if customer['data'] else None, line_items=[ { "price_data": { "currency": "USD", "unit_amount_decimal": 1000, "product_data": { "name": "T-shirt", }, }, "quantity": 2, } ], payment_method_options={ "card": { "setup_future_usage": "on_session", }, }, shipping_address_collection={ "allowed_countries": ['US'] }, mode='payment', success_url='http://localhost:8000', cancel_url='http://localhost:8000' ) return redirect(checkout_session.url, code=303)
目前支付详情可通过setup_future_usage自动保存,但每次进入Stripe Checkout时,收货地址仍需手动填写。请问如何保存收货地址以实现自动填充?是否存在类似setup_future_usage的机制?
解决方案
Stripe Checkout没有专门对应收货地址的setup_future_usage参数,但满足以下条件即可实现自动填充:
- 关联的Customer对象已保存收货地址:创建Checkout Session时指定
customer参数,且该Customer对象存在shipping字段(包含完整地址信息),Stripe Checkout会自动填充该地址。 - 支付成功后同步收货地址到Customer:若用户首次填写地址,需在支付完成后通过Stripe Webhook提取地址,更新到对应Customer对象中,下次创建Session时即可自动填充。
具体实现步骤
检查Customer的收货地址状态
可以通过API查询目标Customer是否已保存地址:customer = stripe.Customer.retrieve(customer_id) print(customer.shipping) # 返回None则说明未保存地址也可直接在Stripe Dashboard查看Customer详情确认。
通过Webhook同步收货地址
配置Webhook监听checkout.session.completed事件,在回调中提取地址并更新Customer:# 示例Webhook处理视图 def stripe_webhook(request): payload = request.body sig_header = request.META['HTTP_STRIPE_SIGNATURE'] event = None try: event = stripe.Webhook.construct_event( payload, sig_header, settings.STRIPE_WEBHOOK_SECRET ) except (ValueError, stripe.error.SignatureVerificationError): return HttpResponse(status=400) if event['type'] == 'checkout.session.completed': session = event['data']['object'] # 仅当session有收货地址且关联Customer时执行更新 if session.get('shipping') and session.get('customer'): stripe.Customer.modify( session['customer'], shipping=session['shipping'] ) return HttpResponse(status=200)验证自动填充效果
当Customer保存收货地址后,再次创建Checkout Session并指定该Customer,Stripe Checkout页面会自动填充已保存的地址,用户无需重复填写。
内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito
相关产品推荐
相关产品推荐

