PayPal Rest API点击“Continue to Review Order”陷入无限循环求助
PayPal REST API集成问题修复:无限循环跳转+无响应返回
核心问题分析
- 非法payer字段传入:创建订单时手动指定
payer.email_address会触发PayPal验证逻辑冲突,该字段应由用户在PayPal授权页面登录后自动填充,商家提前传入会导致订单创建失败或跳转异常,引发无限循环。 - curl请求无错误捕获:代码仅执行
curl_exec但未检查请求是否失败,导致$response为空时无法定位问题根源。 - user_action参数不匹配需求:设置
user_action => 'PAY_NOW'会跳过订单审核步骤直接进入付款流程,与你需要的"Continue to Review Order"操作逻辑冲突,引发跳转异常。
修复步骤与代码示例
1. 移除冗余的payer字段
删除purchase_units下的payer数组,该信息无需商家提前传入。
2. 修正user_action参数
将user_action改为'CONTINUE',对应"Continue to Review Order"的审核流程。
3. 添加curl错误处理
增加curl错误检查和HTTP状态码验证,方便排查请求失败原因。
修复后的完整代码:
$postFields = json_encode(array( 'intent' => 'CAPTURE', 'purchase_units' => array( array( 'amount' => array( 'currency_code' => $currency, 'value' => $amount ), 'payee' => array( 'email_address' => 'support@sxxx.com', ), 'application_context' => array( 'user_action' => 'CONTINUE', // 匹配订单审核流程 'return_url' => 'http://localhost/paypal_success.php?order_id=' . $orderId, 'cancel_url' => 'http://localhost/cancel.php' ) ) ) )); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $paypalApiUrl); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 生产环境必须开启SSL验证,测试环境可临时关闭但不推荐 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); $response = curl_exec($ch); // 检查curl请求是否失败 if(curl_errno($ch)){ $error_msg = curl_error($ch); echo '<script>console.log("CURL错误: ' . json_encode($error_msg) . '");</script>'; } else { // 检查HTTP响应状态码 $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); echo '<script>console.log("HTTP状态码: ' . $http_code . '");</script>'; echo '<script>console.log("响应数据: ' . json_encode($response) . '");</script>'; } curl_close($ch);
额外排查点
- 确认
$paypalApiUrl正确性:测试环境用https://api-m.sandbox.paypal.com/v2/checkout/orders,生产环境用https://api-m.paypal.com/v2/checkout/orders。 - 确认
$headers包含正确的Bearer授权令牌和Content-Type: application/json头信息。 - 检查
$orderId是否有效,避免return_url携带非法参数导致跳转异常。
内容的提问来源于stack exchange,提问作者KapilS
相关产品推荐
相关产品推荐

