Node.js中使用Stripe创建银行账户令牌报错:stripe.createToken() is not a function
解决Stripe Node.js创建银行账户令牌的问题
我之前也碰到过类似的问题,主要是Stripe Node.js SDK版本更新带来的API变化,以及参数结构的细节没注意到,给你一步步梳理解决方案:
1. 为什么stripe.createToken() is not a function?
Stripe Node.js SDK在v8版本之后对API结构做了大幅调整,旧版的stripe.createToken()方法被移除,取而代之的是资源对象下的create方法,也就是你尝试的stripe.tokens.create()。如果你的代码还在调用stripe.createToken(),要么是用了较老的SDK版本,要么没按照新版API规范编写。
先确认你的SDK版本:
npm list stripe
如果版本低于v8,建议升级到最新版:
npm install stripe@latest
2. 正确创建银行账户令牌的写法
用新版SDK创建银行账户令牌时,需要把银行账户信息嵌套在bank_account字段下,且确保所有必填参数正确传入。下面是完整可运行的示例:
const stripe = require('stripe')('你的测试API密钥'); // 替换成你的密钥 async function createBankAccountToken() { try { const token = await stripe.tokens.create({ bank_account: { country: 'US', currency: 'usd', routing_number: '110000000', // Stripe官方测试用路由号 account_number: '000123456789', // Stripe官方测试用账户号 account_holder_name: 'Jenny Rosen', account_holder_type: 'individual' } }); console.log('生成的令牌ID:', token.id); console.log('银行账户详情:', token.bank_account); // 这里就是你需要的账户相关数据 } catch (error) { console.error('创建令牌失败:', error.message); } } createBankAccountToken();
3. 为什么之前没拿到包含"account"的令牌?
你提到用stripe.tokens.create({ bank_account: {} })没拿到预期的"account"字段,其实是对返回结构的误解:
- 银行账户令牌的返回结果中,
token.bank_account字段就是包含账户详情的对象,包括账户号后4位、路由号、账户持有人信息等。 - 如果你的需求是创建Stripe连接账户(而非仅生成令牌),那需要用
stripe.accounts.create()方法,但根据你的描述,你要的是银行账户令牌,所以上面代码返回的token.bank_account就是你需要的内容。
4. 常见排查点
- 确保使用测试API密钥(以
sk_test_开头),生产密钥无法用于测试环境。 - 检查必填参数是否完整:
country、currency、routing_number、account_number都是必填项,缺少任何一个都会导致创建失败。 - 测试用的路由号和账户号必须用Stripe官方提供的测试值,不能使用真实银行信息。
内容的提问来源于stack exchange,提问作者Code The World
相关产品推荐
相关产品推荐

