You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建Stripe PaymentIntent报Invalid integer错误如何排查

Stripe PaymentIntent 报invalid Integer错误排查

错误根因

Payments类构造函数的属性赋值末尾存在多余逗号,Python语法中赋值语句末尾的逗号会将值自动封装为单元素元组,最终传给Stripe接口的amount、currency都不是预期的整数、字符串类型,而是元组类型,触发参数校验错误。
报错信息里的Invalid integer: {:"0"=>"2400"}就是单元素元组(2400,)被参数序列化逻辑转换后的异常结构。
问题出在以下两行代码的尾逗号:

self.amount = amount, # 尾逗号导致self.amount变为(2400,)格式的元组
self.currency = "sgd", # 尾逗号导致self.currency变为("sgd",)格式的元组

修复方案

删除两处多余的尾逗号即可,修正后的完整代码参考:

class Payments:
    def __init__(self, amount):
        self.amount = amount
        self.currency = "sgd"
        self.automatic_payment_methods = {"enabled": True}
        # 建议不要硬编码密钥,改用环境变量读取,避免密钥泄露
        stripe.api_key = "替换为你的Stripe密钥"

    def create_payment_intent(self):
        payment = stripe.PaymentIntent.create(
            payment_method_types=["paynow"],
            payment_method_data={"type": "paynow"},
            amount=self.amount,
            currency=self.currency,
        )
        # 原方法没有返回值,外部调用拿不到结果,补充return
        return payment

实例化代码不需要改动,你之前传入的int(bill["payable_amount"]) * 100的计算逻辑是符合Stripe金额传参要求的(Stripe金额按最小货币单位分传整数)。

额外提醒

你贴出的代码中硬编码了Stripe测试密钥,请尽快到Stripe后台轮换该密钥,后续所有密钥都通过环境变量读取,不要硬编码在业务代码中,避免泄露造成资金损失。

内容的提问来源于stack exchange,提问作者Jeet Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:12:13