You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PayPal PHP SDK ^1.13版本实现报错求助(HTTP 400错误)

PayPal PHP SDK v1.13 400错误排查与修复

首先,HTTP 400错误本质是请求格式或参数不符合PayPal API要求,我看了你的代码,发现几个明显的问题,先解决最关键的:

1. 致命错误:setDetails传入了错误的参数

看你代码里的这段:

$amount->setCurrency('USD')
 ->setTotal($total)
 ->setDetails($product);

Amount::setDetails()方法要求传入的是PayPal\Api\Details类型的对象,但你传了$product(一个字符串),这直接导致PayPal服务器无法解析你的请求,返回400错误。你需要改成传入之前创建的$details对象:

$amount->setCurrency('USD')
 ->setTotal($total)
 ->setDetails($details);

2. 数值不匹配:Total金额必须等于Subtotal+Shipping+Tax的总和

你当前的代码里:

$tax = 2.00;
$total = $price + $tax;

$details->setShipping($tax) // 这里shipping设成了和tax一样的2.00
 ->setSubtotal($price)
 ->setTax(2.00);

按照PayPal的规则,$amount->setTotal()的数值必须严格等于subtotal + shipping + tax的总和。你现在的$total是$price+2,但details里的总和是$price+2+2,数值不匹配,这也会触发400错误。

你需要根据实际业务调整:

  • 如果没有运费,就把setShipping(0.00),然后$total = $price + $tax
  • 如果确实有运费,就把$total改成$price + $shipping + $tax

示例修正:

$tax = 2.00;
$shipping = 0.00; // 假设没有运费
$total = $price + $tax + $shipping;

$details->setShipping($shipping)
 ->setSubtotal($price)
 ->setTax($tax);

3. 优化错误排查:获取PayPal返回的详细错误信息

你的catch块只打印了异常对象,其实PayPalConnectionException包含了API返回的具体错误描述,修改catch代码可以帮你快速定位其他潜在问题:

catch(PayPal\Exception\PayPalConnectionException $ex){
    // 打印API返回的JSON格式错误详情
    echo $ex->getData();
    die();
}

关于SDK版本的问题

你不需要降级SDK,v1.13版本是PayPal REST API v1 SDK的较新版本(虽然v1 SDK已经停止更新,但目前仍能正常调用API)。你的问题完全是代码参数错误导致的,和版本无关,修复上述问题后应该就能正常运行。

内容的提问来源于stack exchange,提问作者Rongiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:57:16