首页 > 解决方案 > 从 recaptcha 响应中调试格式错误的 json 数据?

问题描述

我正在使用带有 ajax 的 recaptcha 并且发布的所有数据都工作正常。

将响应解码为 json 时出现问题。

当回显来自 Google 的 recaptcha 响应时,我得到错误代码 4,json_last_error()这意味着 json 的语法不正确并且无法解码。

如何/在哪里获得 json 响应以便调试它?var_dump($responseKeys)给我null,$response给我1。

请注意,recaptcha 工作正常,只是在解码响应以用于验证时出现问题。

错误

无法解码 JSON!格式错误的 JSON`

验证码

$ch = curl_init();

$ip = $_SERVER['REMOTE_ADDR'];

//read post content
$json = file_get_contents('php://input');

//turns json string into php var $obj
$obj = json_decode($json,true);

//retrieve captcha response
$captcha = $obj["captchaResponse"];

//create captchaResponse instance
$captcha;

//KEYS
//prod 
//$secretKey = 'xxx';

//localhost
$secretKey = "xxx";

curl_setopt_array($ch, [
    //curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
    //$timeout = 5;
    CURLOPT_URL => "https://www.google.com/recaptcha/api/siteverify",
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => [
        "secret" => $secretKey,
        "response" => $captcha,
        "remoteip" => $ip
    ],
    CURLOPT_RETURNTRANSFER => true
]);

//get response from recaptcha
$response = curl_exec($ch);
curl_close($ch);


$responseKeys = json_decode($response,true);

if(intval($responseKeys['success']) !== 1) {

        //debuggingRECAPTCHA RESPONSE
        echo  'var_dump' , var_dump($responseKeys);

        echo  '$jsonError ' , $jsonError;

    }`

当我回显时,$responseKeys我什么也得不到,'print_r($responseKeys)' 给了我1.

我想知道如何获得 (edit: json) 的输出$response以获取一些错误的指示。

还有其他调试方法吗?

如果需要,准备添加更多信息。

谢谢。

编辑:添加了更多信息以根据评论进行澄清。

标签: phpjsonrecaptcha

解决方案


几个小时后,我把头撞在墙上@MarioWerners 的评论证明代码运行良好,所以我开始查看我的环境。因为我在本地开发谷歌拒绝了这个请求,所以我不得不添加。

//仅开发

CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOSTM => false

现在请求被接受了。

事后看来,我应该将环境添加到问题中。我很抱歉。


推荐阅读