Stripe资金流转集成问题:Top Up API使用求助
解决Stripe Top Up API日元充值及「No Source Image」错误问题
核心问题分析
「No Source Image」错误本质是你的Top Up请求中指定的支付源(source/payment_method)不符合日元账户的充值要求——要么是源本身无效,要么是未正确关联到你的Stripe主账户。后台操作能成功是因为后台自动完成了支付源的验证和关联流程,而API调用需要你手动完成这些步骤。
一、创建并关联日元支付源
日元场景不能直接复用美元测试token,必须使用适配JPY的测试支付方式:
测试环境操作
- 生成日元支付方式(Payment Method)
用Stripe提供的日元测试卡创建支付方式,示例curl调用:
curl https://api.stripe.com/v1/payment_methods \ -u sk_test_你的密钥: \ -d type=card \ -d "card[number]"=4242424242424242 \ -d "card[exp_month]"=12 \ -d "card[exp_year]"=2028 \ -d "card[cvc]"=123 \ -d currency=jpy
(也可以用日本本地测试卡如3566 0020 2036 0505,参数设置一致)
- 将支付源附加到主账户
生成的pm_xxxID需要绑定到你的Stripe主账户,才能用于Top Up:
curl https://api.stripe.com/v1/accounts/你的主账户ID/external_accounts \ -u sk_test_你的密钥: \ -d external_account=pm_刚才生成的ID
生产环境操作
需要收集用户的日本银行卡信息,用Stripe Elements创建支付方式,再附加到主账户,流程和测试环境一致,只是使用真实卡号。
二、正确调用Top Up API
调用时必须指定已关联到主账户的支付源,不能用后台临时生成的一次性source:
示例调用(用Payment Method)
curl https://api.stripe.com/v1/topups \ -u sk_test_你的密钥: \ -d amount=1000 \ -d currency=jpy \ -d payment_method=pm_你的支付源ID \ -d description="日元账户充值"
示例调用(用已绑定的银行卡ID)
如果之前绑定的是银行账户(ba_xxx ID),可以直接用source参数:
curl https://api.stripe.com/v1/topups \ -u sk_test_你的密钥: \ -d amount=1000 \ -d currency=jpy \ -d source=ba_你的银行卡ID \ -d description="日元账户充值"
三、设置默认支付源(简化后续调用)
如果不想每次Top Up都指定支付源,可以把常用的支付源设为主账户的默认充值源:
curl https://api.stripe.com/v1/accounts/你的主账户ID \ -u sk_test_你的密钥: \ -d settings[topup][default_payment_method]=pm_你的支付源ID
之后调用Top Up API时,只需要传递amount和currency参数即可,Stripe会自动使用默认源。
四、错误排查要点
- 确认支付源的币种是JPY,且与Top Up请求的
currency参数完全一致 - 支付源必须关联到主账户,而非你的关联子账户
- 测试环境禁止使用真实银行卡,必须用Stripe官方提供的测试卡
- 后台生成的source大多是一次性的,无法用于重复Top Up,必须用持久化的Payment Method或绑定的external_account
内容的提问来源于stack exchange,提问作者Hieu Le
相关产品推荐
相关产品推荐

