使用Braintree Drop-In集成PayPal时,为何需传递amount参数至配置?
我来给你拆解一下这个看似矛盾的问题——明明后续扣款金额可以和请求nonce时的金额不同,却必须在初始化Drop-In时传入金额,核心原因主要有这几点:
PayPal底层API的硬性要求
Braintree本质是PayPal的网关封装层,而PayPal的授权流程(也就是你获取nonce的环节)本身就要求必须传递金额参数来创建临时支付上下文。如果不传入这个金额,PayPal的前端授权页面会直接报错,根本无法完成用户授权,自然拿不到nonce。用户体验的一致性预期
当用户跳转到PayPal的授权页面时,这个金额会展示给用户,让他们清楚自己正在授权一笔大致金额的支付权限。虽然后续可以修改扣款金额,但这个初始金额是给用户的明确预期,避免用户看到完全陌生的授权请求而产生疑虑。Braintree Drop-In的封装逻辑
Drop-In是Braintree预封装好的UI组件,它的设计逻辑里,针对PayPal支付方式必须初始化一个包含金额的支付会话。这个金额是触发PayPal授权流程的“敲门砖”,哪怕最终扣款金额不同,这个初始参数也是建立会话的必要条件。合规与欺诈防范要求
部分地区的支付监管规则要求,用户进行支付授权时必须明确展示授权的金额范围。传入这个初始金额,是为了满足这类合规要求,同时也能减少恶意授权的风险。
举个实际场景的例子:你在braintree.dropin.create的paypal配置里传入的金额,只会出现在PayPal的授权页面上,告诉用户“你正在授权一笔最高XX金额的支付”;但真正扣款时,你用获取到的nonce调用Braintree扣款接口传入的金额,才是实际从用户账户扣除的金额——只要这个最终金额在合理范围内(一般不能超出初始金额太多,具体限制看Braintree和PayPal的规则),都是被允许的。
内容的提问来源于stack exchange,提问作者Mohammed Noureldin

