Django集成Stripe Checkout报错No such price: '2.00'问题求助
报错解决方法
核心原因
你遇到的No such price: '2.00'报错是因为Stripe Checkout接口参数规则使用错误:line_items下的price字段要求传入Stripe平台预先创建的Price对象ID(格式通常为price_xxx),而不是直接传入你数据库存储的商品价格数值。
解决方案
你可以从以下两种实现方式里选符合你业务需求的:
方案1:使用动态价格(无需提前在Stripe后台维护商品价格)
直接修改views.py中stripe.checkout.Session.create里的line_items配置,把price字段替换为price_data配置项,同时把价格转换为Stripe要求的最小货币单位(比如美元、人民币都用分作为单位),示例修改后的代码如下:
line_items=[ { 'price_data': { 'currency': 'usd', # 可替换为你实际使用的货币代码,比如人民币填cny 'product_data': { 'name': item.title, # 商品名称 # 可选传入商品描述、图片等 'description': item.description, }, 'unit_amount': int(item.price * 100), # 价格转成分单位,转整数 }, 'quantity': 1, }, ],
方案2:使用Stripe后台预创建的价格(适合固定价格商品)
如果你的商品价格是固定的,更推荐用这种方式,方便后续在Stripe后台统一管理价格:
- 首先修改你的
models.py的Item模型,新增存储Stripe价格ID的字段,执行数据库迁移:
class Item(Visits, models.Model): # 原有字段保留 stripe_price_id = models.CharField(max_length=100, blank=True, null=True) # 新增字段
- 登录Stripe后台,创建对应商品和定价,复制生成的Price ID(格式为
price_xxxxxx),填入对应Item的stripe_price_id字段。 - 修改
views.py中的对应配置:
line_items=[ { 'price': item.stripe_price_id, # 直接传入Stripe的价格ID即可 'quantity': 1, }, ],
注意事项
- Stripe所有价格相关参数均以最小货币单位计数,不要直接传入元/美元为单位的数值,否则会出现价格异常。
- 测试阶段请使用Stripe官方提供的测试卡完成支付流程,不要使用真实银行卡。
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

