PayPal标准支付按钮添加多商品列表功能及支付报错求助
PayPal多商品订单创建报错解决方案
问题修正点
你代码触发报错的核心原因是预先填入了固定的payer节点信息,和PayPal支付流程的用户信息收集逻辑冲突,另外需要确认以下配置全部正确:
- 移除
createOrder参数里的整个payer节点:PayPal会自动在支付流程中收集付款人姓名、地址、联系方式等信息,手动填入的固定测试信息和后续登录的沙盒账号信息不匹配时,会直接触发校验报错。 - 保证金额加总完全一致:你当前配置的商品总金额、运费、税费加总后和订单总金额匹配,后续修改商品价格时要注意
item_total + shipping + tax_total + 其他费用项 = amount.value,数值不能有任何偏差,否则也会触发金额校验错误。 - 替换正确的沙盒客户端ID:检查SDK引入链接里的
MY_SANDBOX_CLIENT_ID,确认已经替换为你PayPal开发者后台生成的对应沙盒环境客户端ID,没有遗漏或填错字符。
修正后完整代码示例
<div id="paypal-button-container"></div> <!-- 引入PayPal JavaScript SDK --> <script src="https://www.paypal.com/sdk/js?client-id=替换为你的沙盒CLIENT_ID&enable-funding=venmo¤cy=USD"></script> <script> // 渲染PayPal按钮到页面指定容器 paypal.Buttons({ style: { color: 'blue', shape: 'rect', label: 'pay', }, // 点击支付按钮时创建交易 createOrder: function(data, actions) { return actions.order.create({ "intent": "CAPTURE", "purchase_units": [ { "description": "My Purchases", "amount": { "currency_code": "USD", "value": "12.00", "breakdown": { "item_total": { "currency_code": "USD", "value": "12.00" }, "shipping": { "currency_code": "USD", "value": "0" }, "tax_total": { "currency_code": "USD", "value": "0" } } }, "items": [ { "name": "Item 1", "unit_amount": { "currency_code": "USD", "value": "6.00" }, "quantity": "1" }, { "name": "Item 2", "unit_amount": { "currency_code": "USD", "value": "6.00" }, "quantity": "1" } ] } ] }); }, // 付款人完成授权后捕获交易 onApprove: function(data, actions) { return actions.order.capture().then(function(orderData) { // 可在此处获取付款人信息、交易流水号等数据 window.location.href = "Thanks.html"; }); }, onCancel: function(data) { alert("支付已取消"); }, onError: function(err) { alert("错误信息: " + err); } }).render('#paypal-button-container'); </script> </div>
测试注意事项
- 测试时请使用PayPal开发者后台生成的沙盒个人买家账号登录支付,不要使用真实账号操作。
- 若需要获取付款人收货地址、联系方式等信息,可在
onApprove回调的orderData对象中读取,无需在创建订单阶段预先传入。
内容的提问来源于stack exchange,提问作者Gene
相关产品推荐
相关产品推荐

