Node.js中Stripe ACH实现:verifySource调用报错及后续步骤咨询
解决Stripe
verifySource 未定义错误及后续银行账户验证流程 嘿,我来帮你搞定这个报错,顺便把后续的银行账户验证步骤理清楚~
错误原因一目了然
你碰到的TypeError: Cannot read property 'verifySource' of undefined,核心问题有两个:
- 代码里的Stripe方法路径写错了:你用了单数的
stripe.customer,但Stripe Node.js SDK里客户相关的方法都挂在**复数的stripe.customers**对象上,单数的stripe.customer根本不存在,所以调用它的verifySource自然会报错。 verifySource的参数顺序搞反了,正确顺序应该是「客户ID在前,源ID在后」。
修正后的可运行代码
我把代码调整成了更清晰的Promise链式写法,避免嵌套回调,同时修正了上面两个关键问题:
var stripe = require("stripe")("sk_test_73xfGiaFaZLWO8oVoNr8PqSe"); var tokenId = "btok_1BiIZkKB2GdGniJfVf8H0Yy0"; var verificationAmounts = [32, 45]; stripe.customers.create({ email: "paying1.user@example.com", source: tokenId, }) .then(function(customer) { // 先把客户ID、邮箱这些信息存到你的数据库里,方便后续调用 console.log("客户创建成功,ID:", customer.id); // 调用正确的verifySource方法,注意参数顺序 return stripe.customers.verifySource( customer.id, tokenId, { amounts: verificationAmounts } ); }) .then(function(bankAccount) { console.log("验证请求已发送,银行账户详情:", bankAccount); // 这一步之后就等用户输入验证金额啦 }) .catch(function(err) { console.error("操作出错啦:", err); });
调用verifySource后的完整后续流程
- 等待用户输入小额验证金额:调用
verifySource后,Stripe会往用户的银行账户里打两笔小额款(就是你代码里的32和45分),用户的银行账单里会显示对应的交易记录。你需要在应用里加一个输入页面,让用户把这两个金额输进来。 - 提交用户输入的金额完成验证:当用户输入后,再次调用
verifySource提交金额,确认验证结果:
// 假设从你的表单拿到用户输入的金额 var userInputAmounts = [32, 45]; stripe.customers.verifySource( customer.id, // 之前保存的客户ID tokenId, { amounts: userInputAmounts } ) .then(function(verifiedAccount) { console.log("银行账户验证成功!", verifiedAccount); // 记得在你的数据库里把这个客户的银行账户标记为「已验证」状态 }) .catch(function(err) { console.error("验证失败:", err); // 提示用户检查输入的金额是否正确,或者重新提交银行账户信息 });
- 处理验证结果:
- 验证成功:这个客户的银行账户就可以正常使用了,后续你可以用客户ID发起扣款、创建订阅等操作。
- 验证失败:返回友好的错误提示给用户,比如“输入的金额不正确,请核对银行账单后重试”。
用户银行账户验证的完整流程梳理
给你把整个流程串一遍,方便你对照:
- 你已经完成:通过Stripe工具收集银行账户信息,转换成token。
- 你已经完成:用token创建客户ID,关联到用户。
- 修正代码后完成:调用
stripe.customers.verifySource发起小额验证请求。
- 修正代码后完成:调用
- 前端开发:给用户做一个输入验证金额的页面。
- 后端处理:接收用户输入的金额,再次调用
verifySource完成验证。
- 后端处理:接收用户输入的金额,再次调用
- 后续使用:验证通过后,就可以用客户ID执行支付操作,比如扣款:
// 示例:扣10美元(单位是分) stripe.charges.create({ amount: 1000, currency: "usd", customer: customer.id, // 用已验证的客户ID }) .then(function(charge) { console.log("扣款成功!", charge); });
内容的提问来源于stack exchange,提问作者Lahari Areti
相关产品推荐
相关产品推荐

