app接入 Paypal BrainTree

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 等,还要注意可能的漏单情况,这个就需要额外的业务编码来保证了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值