Node.js中如何将购物车商品填入paypal-rest-sdk的商品配置项
首先明确:不能直接在item_list对象内部写循环处理,JavaScript对象字面量语法不支持直接嵌入循环语句,你需要先把购物车的商品数据转换为符合PayPal要求的格式,再传入配置中,具体实现如下:
步骤1:转换购物车商品为PayPal要求的格式
你的cart.items是键值对结构,先把它的值提取出来遍历,转换为符合要求的数组:
const paypalItems = Object.values(cart.items).map(cartItem => { return { // 商品名称、SKU按需替换为你实际商品对象里的对应字段 name: cartItem.item.name, sku: cartItem.item.id || cartItem.item.sku, // 价格必须转成保留两位小数的字符串,和下方币种保持一致 price: cartItem.price.toFixed(2), currency: "USD", quantity: cartItem.qty } })
如果你的cart.generateArray()方法已经是返回购物车商品数组的工具方法,也可以直接调用它替代Object.values(cart.items),减少重复逻辑。
步骤2:将处理好的数组填入PayPal配置
同时直接复用购物车已经计算好的总金额,避免手动计算出现误差导致PayPal校验失败:
const create_payment_json = { "intent": "sale", "payer": { "payment_method": "paypal" }, "redirect_urls": { "return_url": "http://localhost:3000/success", "cancel_url": "http://localhost:3000/failed" }, "transactions": [{ "item_list": { "items": paypalItems // 直接传入提前处理好的商品数组 }, "amount": { "currency": "USD", "total": cart.totalPrice.toFixed(2) // 复用购物车总金额,转两位小数字符串 }, "description": "自定义支付描述" }] };
注意事项
- PayPal会严格校验所有商品金额的总和与
amount.total的数值是否完全一致,直接复用购物车已经计算完成的totalPrice可以避免金额不匹配的报错。 - 币种参数必须全局统一,商品的
currency和amount.currency要完全相同。
内容的提问来源于stack exchange,提问作者Hadi Zouhbi
相关产品推荐
相关产品推荐

