Facebook数据删除回调提示“无法确认请求已接收”的解决咨询
解决Facebook数据删除回调“Unable to confirm request was received”问题
核心问题分析
你遇到的问题是Facebook无法确认请求已接收,且状态页deletion.php未被调用。结合代码来看,主要可能是状态页响应不符合规范、api.php返回的状态URL存在访问障碍,或者签名验证环节有未处理的错误导致响应中断。
具体修复步骤
1. 完善api.php的签名验证错误处理
当前parse_signed_request函数在签名验证失败时返回null,但后续代码直接调用$data["user_id"]会触发致命错误,导致脚本中断,无法返回正确响应给Facebook。需要增加错误拦截:
$data = parse_signed_request( $_POST[ "signed_request" ], $secret ); if (empty($data)) { header("HTTP/1.1 400 Bad Request"); echo json_encode(["error" => "Invalid signed request"]); exit; } $openID = $data[ "user_id" ];
2. 修正deletion.php的响应格式
Facebook要求状态页必须返回标准的200 HTTP状态码+结构化响应内容,当前deletion.php直接输出200文本不符合规范,且PHP闭合标签后的多余字符可能导致响应格式错误。修改后的代码:
<?php require( "PHPMailer/PHPMailerAutoload.php" ); $mail = new PHPMailer; $mail->setLanguage( "zh", 'PHPMailer/language/phpmailer.lang-zh.php'); $mail->CharSet = "UTF-8"; $mail->isSMTP(); $mail->Host = "smtp-mail.outlook.com"; $mail->SMTPAuth = true; $mail->Username = "xxx@xxx.xx"; $mail->Password = "xxxxxxxxxx"; $mail->SMTPSecure = "tls"; $mail->Port = 587; $mail->setFrom( "xxx@xxx.xxx", "xxx" ); $mail->addAddress( "xxx@xxx.xxx" ); $mail->Subject = "Facebook deletion"; $mail->Body = $_SERVER[ "REQUEST_METHOD" ] . json_encode( $_REQUEST ); $mail->send(); // 返回符合要求的状态响应 header("HTTP/1.1 200 OK"); header("Content-Type: application/json"); echo json_encode([ "status" => "completed", "message" => "Data deletion request has been processed" ]); exit; ?>
注意:删除PHP闭合标签后的
200文本,避免输出多余内容破坏响应结构。
3. 确保状态URL的可访问性
- 直接通过浏览器访问
https://xxx.xxx/deletion.php,确认返回200状态码和合法的JSON内容 - 检查服务器防火墙、CDN是否拦截了Facebook的请求(需将Facebook官方IP段加入白名单)
- 确保域名使用受信任的SSL证书(自签名证书会被Facebook拒绝)
4. 修正api.php的响应头设置
当前代码中Content-Encoding: utf-8是错误配置(utf-8是字符编码,不是内容编码),需移除该头:
// 移除此行:header( "Content-Encoding: utf-8" ); header( "Content-Type: application/json" );
5. 增加日志排查细节
在两个文件中添加日志,记录请求全量信息,方便定位问题:
// 在api.php开头添加 error_log("Facebook deletion callback received: " . json_encode($_POST)); // 在deletion.php开头添加 error_log("Facebook status page accessed: " . json_encode($_REQUEST));
验证流程
- 用Postman测试
api.php,确认返回的JSON包含正确的url和confirmation_code字段 - 直接访问
deletion.php,验证返回200状态码和合法的JSON响应 - 在Facebook开发者后台重新触发数据删除请求,查看日志和邮件记录
内容的提问来源于stack exchange,提问作者黃梓榆
相关产品推荐
相关产品推荐

