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

基于Stripe.js(iOS)为Stripe Connect自定义账户添加外部账户问询

分步解决Stripe Connect自定义账户关联银行账户的问题

我来帮你理清这个问题的核心逻辑,以及具体的实现步骤,先从你关心的Token作用说起:

一、银行账户Token的核心作用

你问到“token创建是否仅用于客户端验证账户信息?”——答案是否定的。Stripe的Token机制核心是安全传输敏感支付信息:

  • 银行账户号、路由号这类属于敏感数据,直接传到你的服务器会违反PCI合规要求,而且有数据泄露风险。
  • Token是Stripe为这些敏感数据生成的“安全替身”,客户端(比如你的iOS App)用Stripe SDK生成Token后,只需要把Token传给你的后端,后端用Token就能关联到对应的银行账户,全程你的服务器不会接触到真实的敏感信息。
  • 当然,生成Token的过程中Stripe也会做基础验证(比如路由号格式、账户号有效性),如果验证不通过会返回错误,方便你在客户端提前提示用户修正。

二、整合Token到账户创建流程的具体步骤

步骤1:在iOS端生成银行账户Token(重要!不要在后端生成)

你目前用NodeJS生成Token的方式只适合测试,生产环境必须在iOS客户端用Stripe iOS SDK生成Token,避免敏感数据流经你的服务器。示例代码(Swift):

import Stripe

let bankAccountParams = STPBankAccountParams()
bankAccountParams.country = "CH" // 注意和你账户的country匹配,你后端用的是CH(瑞士)
bankAccountParams.currency = "chf"
bankAccountParams.routingNumber = "瑞士银行的路由号"
bankAccountParams.accountNumber = "用户的银行账户号"
bankAccountParams.accountHolderName = "用户姓名"
bankAccountParams.accountHolderType = .individual

STPAPIClient.shared.createToken(with: bankAccountParams) { token, error in
    if let error = error {
        // 处理验证错误,比如提示用户路由号格式不对
        print(error.localizedDescription)
        return
    }
    guard let token = token else { return }
    // 把token.id传到你的后端/create_account接口
    let parameters = [
        "email": "user@example.com",
        "firstname": "张三",
        "lastname": "李四",
        "bank_token": token.id
    ]
    // 发起POST请求到你的后端
}

步骤2:修改后端接口接收Token并关联到账户

你的/create_account接口需要新增接收bank_token参数,然后在创建Custom Account时,把这个Token传给external_accounts字段。

三、修改后的后端代码示例

app.post('/create_account', (req, res) => {
    console.log('create account called');
    const { email, firstname, lastname, bank_token } = req.body;
    
    stripe.accounts.create({
        country: "CH",
        type: "custom",
        email: email,
        business_name: "examplename",
        legal_entity: {
            first_name: firstname, // 注意你之前写的是硬编码的"firstname",这里要改成变量
            last_name: lastname,
            dob: { day: 1, month: 1, year: 1900 }
        },
        // 关键:添加external_accounts参数,值为客户端传来的Token
        external_accounts: bank_token
    }).then((account) => {
        res.status(200).send(account)
    }).catch((err) => {
        console.log(err, req.body)
        res.status(500).end()
    });
});

四、额外注意事项

  • 国家与币种匹配:你后端创建账户用的是country: "CH"(瑞士),但你之前测试用的是美国的银行信息(country: 'US'),这会导致验证失败。生产环境必须保证银行账户的国家、币种和Stripe账户的国家一致(比如瑞士账户对应CHF币种)。
  • 后续添加银行账户:如果用户后续需要添加新的银行账户,可以调用stripe.accounts.createExternalAccount接口,同样传入新生成的银行账户Token即可。
  • 错误处理:生成Token和创建账户的过程中都可能出现错误(比如银行账户验证不通过、Stripe API调用失败),要在客户端和后端分别做好错误捕获和提示。

内容的提问来源于stack exchange,提问作者Besfort Abazi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:49:48