Node.js集成Razorpay实现客户直付零售商银行账户方案咨询
你需要的客户付款直接转入零售商账户、资金不经过平台中间账户的需求,可以通过Razorpay Routes的第三方直接转账(TPT)模式实现。你未找到的添加银行账户接口实际为Razorpay的Fund Account创建接口,所有零售商的银行账户需要先创建为Razorpay系统内的Fund Account对象,后续即可直接路由资金。
前置准备
首先确保你已在Razorpay商户后台开通Routes功能并激活直接转账权限,之后安装官方Node.js SDK:npm install razorpay
步骤1:初始化Razorpay客户端
const Razorpay = require('razorpay'); // 生产环境请将密钥存入环境变量,禁止硬编码 const razorpayInstance = new Razorpay({ key_id: '你的Razorpay_KEY_ID', key_secret: '你的Razorpay_KEY_SECRET' });
步骤2:为零售商创建Fund Account(添加银行账户)
该接口就是你要的添加银行账户API,每个零售商只需调用一次创建Fund Account,后续用返回的fund_account_id即可直接发起转账,无需重复上传银行信息:
async function createRetailerFundAccount(retailerInfo) { try { const fundAccount = await razorpayInstance.fundAccounts.create({ account_type: 'bank_account', bank_account: { name: retailerInfo.bankHolderName, ifsc: retailerInfo.ifscCode, account_number: retailerInfo.bankAccountNo }, contact: { name: retailerInfo.retailerName, email: retailerInfo.retailerEmail, contact: retailerInfo.retailerPhone } }); // 请将返回的fundAccount.id存入你的数据库,和对应零售商信息绑定 return fundAccount.id; } catch (err) { console.error('创建Fund Account失败:', err); throw err; } }
你已留存的存量零售商银行账户可以批量调用该接口完成初始化,新入驻零售商在入驻流程中调用一次即可。
步骤3:创建直转支付订单
创建订单时直接配置转账规则,客户付款成功后Razorpay会自动将资金直接划转至对应零售商的银行账户,不会进入你的平台结算账户:
async function createDirectPayOrder(orderInfo, retailerFundAccountId) { try { const order = await razorpayInstance.orders.create({ amount: orderInfo.amount * 100, // Razorpay金额单位为印度派士,需转整数 currency: 'INR', receipt: `order_${orderInfo.platformOrderId}`, transfers: [ { account: retailerFundAccountId, amount: orderInfo.amount * 100, // 若需扣除平台佣金,此处填写扣佣后的金额即可 currency: 'INR', on_hold: 0 // 无需冻结,付款成功后立即转账 } ] }); // 将返回的order.id传给前端,即可发起Razorpay支付流程 return order; } catch (err) { console.error('创建直转订单失败:', err); throw err; } }
如果单个订单对应多个零售商,只需在transfers数组中添加多个配置项,分别指定不同零售商的fund_account_id和对应转账金额即可,Razorpay会自动拆分资金分别直转。
步骤4:状态校验
支付和转账完成后Razorpay会触发webhook回调,你只需在后台配置监听payment.captured、transfer.processed、transfer.failed三类事件,即可完成交易状态的校验和异常处理,无需额外手动触发转账操作。
- 测试阶段可使用Razorpay官方提供的测试IFSC、测试银行账号完成功能验证,不要直接使用生产数据调试
- 若你需要留存部分佣金,仅需调整
transfers配置项中的转账金额,佣金部分会自动进入你的平台账户,剩余待转金额仍走直转链路不经过你的中间账户 - 请妥善保管商户密钥,所有敏感接口调用务必在服务端完成,禁止在前端暴露key_secret
内容的提问来源于stack exchange,提问作者ankit singh

