PayPal Orders API中如何正确设置商品购买数量
时间:2026-08-18 | 作者:火苗实验室 | 阅读:0本文详解在 Lara vel 中使用 PayPal Orders API 创建订单时,如何通过 items 数组正确配置商品数量(quantity),避免因结构错误导致的“Expected an order id to be passed”等前端报错。
本文详解在 Lara vel 中使用 PayPal Orders API 创建订单时,如何通过 items 数组正确配置商品数量(quantity),避免因结构错误导致的“Expected an order id to be passed”等前端报错。
问题核心
在 PayPal Orders API 里,quantity 不是直接写在 purchase_units 顶层的,这一点很容易踩坑。
它必须放进规范的 items 数组结构中。 同时,items 这个字段本身必须是一个包含一个或多个商品对象的数组(即二维数组),不能直接传单个商品对象那种一维结构。
你碰到的 Uncaught Error: Expected an order id to be passed,表面上看像是前端 SDK 没拿到 order ID,实际上问题出在后端创建订单这一步。
请求体格式不合法,会导致 createOrder() 调用失败,返回空响应或无效响应,结果前端自然也就拿不到有效的 order ID。
修正后的完整示例
以下是修正后的完整示例,适配 Lara vel + srmklive/lara vel-paypal 包:
public function create(Request $request)
{
$provider = PayPal::setProvider();
$provider->setApiCredentials(config('paypal'));
$token = $provider->getAccessToken();
$provider->setAccessToken($token);
$unitPrice = '1.50';
$quantity = 5;
$totalAmount = bcmul($unitPrice, (string)$quantity, 2); // 精确计算:1.50 × 5 = 7.50
$order = $provider->createOrder([
'intent' => 'CAPTURE',
'purchase_units' => [
[
'amount' => [
'currency_code' => 'EUR',
'value' => $totalAmount,
'breakdown' => [
'item_total' => [
'currency_code' => 'EUR',
'value' => $totalAmount
]
]
],
'items' => [
[
'name' => 'Photo Print',
'quantity' => (string)$quantity,
'unit_amount' => [
'currency_code' => 'EUR',
'value' => $unitPrice
],
'category' => 'DIGITAL_GOODS' // 可选,但推荐明确分类
]
]
]
]
]);
return response()->json($order);
}
关键修正点说明
items必须是数组套数组:'items' => [[ ...item object... ]],而非'items' => [ ...item object... ];amount.value应等于item_total.value:即unit_amount × quantity的总和,二者必须严格一致,否则 PayPal 会校验失败;- 建议显式添加
breakdown.item_total,增强结构清晰性与兼容性; - 使用
bcmul()进行高精度价格计算,避免浮点数误差; quantity推荐转为字符串(PayPal API 要求),但整数亦可接受。
注意事项
- PayPal 不允许在
purchase_units中省略items却设置item_total;若需展示数量,items为必填项; - 每个
purchase_unit可包含多个items(如多商品),但单商品场景下仍需包裹为数组; - 前端 JS SDK 初始化时,务必确保后端返回的
order.id非空且有效。仅当上述结构正确时,createOrder()才会成功返回含id的订单对象。
最终效果
正确配置后,PayPal 收款页面将清晰显示商品名称、单价、数量及小计,提升用户信任度与转化率。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 迅捷路由器怎么调信号最强,设置时要注意什么?
- 时间:2026-08-27
-
- vivo浏览器怎么卸不掉?原因和解决方法在这里
- 时间:2026-08-27
-
- OPPO R11s黑屏了,怎么强制恢复出厂设置?
- 时间:2026-08-27
-
- 飞利浦显示器包装盒有生产日期和保修期吗?怎么看?
- 时间:2026-08-27
-
- 联想新平板开机必须联网吗?怎么做?
- 时间:2026-08-27
-
- 平板横竖屏切换设置与问题解决
- 时间:2026-08-27
-
- 移动电源容量怎么测?要准备哪些工具?
- 时间:2026-08-27
-
- 荣耀90 Pro防水吗?防水级别多少?怎么用才安全
- 时间:2026-08-27
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15
