PayPal沙箱Webhook监听器遇HTTP 302导致重试失败求助
问题:PayPal沙箱Webhook通知因重定向被标记为失败
在沙箱环境中,通过PHP调用/v1/notifications/webhooks接口创建PAYMENT.CAPTURE.COMPLETED事件的Webhook,创建流程正常。监听器能正常接收通知,也能通过postback和X.509证书完成验证,且监听器首行已设置http_response_code(200)。但账户的Webhook通知日志中,多数通知被标记为FAIL_SOFT,二次尝试后变为FAIL_HARD,返回的payload信息如下:
"status": "FAILURE",
"transmissions": [
{"webhook_url": "",
"http_status": 302,
"reason_phrase": "Redirects are not allowed", } ]
尽管监听器返回了HTTP 200,但PayPal因检测到重定向(302)而重试并标记失败,需解决该问题。
解决建议
- 移除监听器URL结尾的斜杠:当前设置的
$listenerURL结尾带有斜杠(https://example.com/php/mylistener.php/),服务器可能会将带斜杠的URL重定向到不带斜杠的版本。修改URL去掉结尾斜杠后,重新创建Webhook。 - 排查服务器重定向规则:检查Apache的
.htaccess或nginx配置,确认是否存在自动添加/移除斜杠的重定向规则,或其他针对该监听器URL的重定向逻辑,暂时禁用这些规则进行测试。 - 直接测试监听器URL的响应:用curl工具直接POST请求监听器URL,查看返回的HTTP状态码是否为200,中间是否存在重定向。命令示例:
查看输出中是否有302跳转的记录。curl -v -X POST https://example.com/php/mylistener.php - 确认监听器脚本的执行路径:确保
mylistener.php文件的实际路径与URL完全匹配,避免因路径不匹配导致服务器返回重定向。
Webhook创建代码
$listenerURL = "https://example.com/php/mylistener.php/"; $url = "https://api-m.sandbox.paypal.com/v1/notifications/webhooks"; $content_type = "Content-Type: application/json"; $payload = json_encode([ "url" => $listenerURL, "event_types" => [ [ "name" => "PAYMENT.CAPTURE.COMPLETED" ] ] ]); $ch = curl_init(); curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [$authorization, $content_type]); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); $response = curl_exec($ch);
内容的提问来源于stack exchange,提问作者decomplexity
相关产品推荐
相关产品推荐

