BrainTree 是什么

braintree 一开始是一个独立支付网关(gateway),后来在2013年左右(没记错的话)被 Paypal收购。收购之后基本可以看作与paypal是一家。
paypal 收购 braintree 之后 sdk 也转向重点接入 braintree,自家原本的 sdk 处于“不建议” 状态。

注意事项

最好有海外的公司主体。如果只有国内的主体,截至到2021年末,braintree 依然是“不支持”状态,只能考虑接入 Paypal 本体。

官方提供的工具

nodejs 直接 npm install braintree 即可。

前置知识

支付网关跟银行系统的关系:百度一下

扣款发生时机:并未发生在输入密码或者其他验证完成时,此时只发生了“授权”行为,即表明用户(主)同意某某商户(宾)扣掉多少多少钱。真正的扣款发生在商户拿着用户的“授权”,向支付网关或者银行系统进行“捕获(capture)”,相关系统验证通过后,支付网关或者银行系统才会把用户的钱划到商户账户上。

大体流程

通讯流程

具体编码(NodeJS)

1、前端接入sdk,参考官方 github,略。

2、后端初始化gateway:

//沙盒gateway
const sandbox_gateway = new braintree.BraintreeGateway({
    environment: braintree.Environment.Sandbox,
    merchantId: MERCHANTID,
    publicKey: PUBLICKKEY,
    privateKey: PRIVATEKEY
})

//生产gateway
const gateway = new braintree.BraintreeGateway({
    environment: braintree.Environment.Production,
    merchantId: MERCHANTID,
    publicKey: PUBLICKKEY,
    privateKey: PRIVATEKEY
})

3、前端发起付款token请求;

4、后端利用sdk生成token请求:

let res = await gateway.clientToken.generate({
    // customerId: customer_id
})

//返回给前端的token
//res.clientToken

5、前端用收到的 clientToken 初始化好付款intent,并让用户走普通的付款流程;

6、验证完成(比如用户输入密码、通过3D脸部识别、指纹识别等等)后,前端会得到一个 nonce(number once,一次性数字,可以理解成可以使用一次的token)。将这个nonce发给后端;

7、后端使用这个 nonce,向braintree发起 capture 请求(也就是将用户的钱真正的划过来自己这边):

const result = await gateway.transaction.sale({
	amount: `${order.pay_amount}`,
    paymentMethodNonce: info.nonce,
    options: {
        submitForSettlement: true
    }
})

if (!result.success)
{
    throw CodeError(errors.pay_fail, `Paypal支付错误:${result.message}`)
}                

成功后给与对应的物品、奖励。至此完成。

还要做什么

以上流程是简化的,如果还要优化付款体验,则还需要注意 customer 的内容,主要用在记住客户的信息,比如姓名、邮箱、付款方式等等,否则每次用户打开可能都是全新的流程。

此外,由于流程中并未出现 IPN、PDT、WebHook 等,还要注意可能的漏单情况,这个就需要额外的业务编码来保证了。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐