PHP实现Sony Aibo ERS-1000 Endpoint校验接口方案咨询
索尼ERS-1000机器狗Webhook端点校验失败修复方案
你现有代码有三个致命问题,是导致校验不通过的核心原因:
- 你直接
echo($post)的写法完全无法返回正确内容:$post是json_decode解析得到的PHP关联数组,PHP中直接echo数组只会输出固定字符串Array,根本不可能返回你说的{"challenge":"1324111"}结构,你本地Postman测试结果和实际运行逻辑不一致,大概率是测试时缓存了旧版本代码、或者请求模拟逻辑有误。 - 索尼ERS-1000的端点校验规则不需要返回JSON格式的challenge结构,只需要在响应体中返回纯文本的challenge字段原值,不能包裹任何JSON结构、HTML标签、多余空格或调试内容。
- 你没有设置正确的响应头,也没有排除重定向、证书、多余输出的干扰,索尼的校验请求不会跟随301/302跳转,对响应格式、证书合法性要求非常严格。
正确实现代码
把你的index.php文件替换为以下内容,注意文件末尾不要加PHP闭合标签?>,避免文件末尾的多余空行被输出:
<?php // 强制设置200状态码,设置纯文本响应头,禁止错误信息输出干扰响应 http_response_code(200); header('Content-Type: text/plain; charset=utf-8'); ini_set('display_errors', 0); // 读取原始请求体 $rawInput = file_get_contents('php://input'); $payload = json_decode($rawInput, true); // 校验challenge参数存在后直接输出原值,不做任何修改、不添加任何其他内容 if (isset($payload['challenge'])) { exit(trim($payload['challenge'])); } // 非校验请求的其他业务逻辑可以写在后面 exit;
额外排查项
如果改完代码还是校验失败,逐一排查以下问题:
- 确认你填写的端点
https://xxxserver.com/aibo/可以直接返回200响应,不存在301/302跳转(包括http转https、非www转www、末尾斜杠补全类的跳转),索尼校验客户端不会处理重定向响应。 - 确认你的HTTPS证书是公开受信任的CA签发,不支持自签名证书,TLS协议版本至少为1.2,禁用过时的SSLv3、TLS1.0/1.1协议。
- 临时关闭站点的WAF、频率拦截、人机校验规则,避免索尼的校验请求被拦截。
- 确认响应体总长度和challenge字符串长度完全一致,没有任何PHP报错、BOM头、前后置空格/换行等多余内容。
内容的提问来源于stack exchange,提问作者Eric Liango
相关产品推荐
相关产品推荐

