PayPal Buttons传递items参数无效硬编码可正常运行问题求助
问题核心错误点
- 第一个错误:PayPal JS SDK的
purchase_units[].items参数要求传入原生JavaScript对象数组,你给它传了JSON.stringify(itemsArray)输出的字符串,类型不匹配自然无法正常解析。你手动把控制台输出的字符串写成对象字面量,相当于又把字符串转回了JS对象,所以才能正常运行。 - 第二个隐藏错误:儿童款总价计算逻辑错误,代码里写的是
ppvalue+= ppsml * 24.95,应该用ppcld而不是ppsml,这会导致订单总价和商品总金额不匹配,就算第一个问题修复后也会触发PayPal的金额校验错误。 - 第三个隐藏错误:
transaction.payer是对象不是数组,transaction.payer[0].email_address会抛出未定义错误,应该直接取值transaction.payer.email_address。
修正方案
- 首先修改儿童款总价计算逻辑:
// 把原儿童款判断里的ppvalue计算替换为这行 ppvalue+= ppcld * 24.95
- 修正PayPal配置的参数传递,直接传入
itemsArray本身,不需要序列化:
paypal.Buttons({ createOrder: function(data, actions) { return actions.order.create({ "purchase_units": [{ "amount": { "currency_code": "AUD", "value": ppvalue.toFixed(2), "breakdown": { "item_total": { "currency_code": "AUD", "value": ppvalue.toFixed(2) } } }, // 直接传原生数组,不要转JSON字符串 "items": itemsArray }] }); }, onApprove: function(data, actions) { return actions.order.capture().then(function(orderData) { console.log('Capture result', orderData, JSON.stringify(orderData, null, 2)); let transaction = orderData.purchase_units[0].payments.captures[0]; // 修正邮箱取值逻辑,payer是对象不是数组 let email = transaction.payer.email_address; console.log(email); alert('Transaction '+ transaction.status + ': ' + transaction.id + '\n\nSee console for all available details'); var element = document.getElementById('paypal-button-container'); element.innerHTML = ''; element.innerHTML = '<h3>Thank you for your payment!</h3>'; element.innerHTML+= '<p>Paypal should be sending you an receipt with details of your order to '+email+'.</p>'; }); } }).render('#paypal-button-container');
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

