API callbak响应

时间:2017-10-23 05:03:31

标签: php json codeigniter

我使用API​​在我的codeigniter项目中发送短信。发送后,它会以json的形式将响应数组返回到我的项目中的回调URL。我需要在我的数据库中更新此响应。这是我的代码:

响应数组将类似如下:

{"req_id":"809ff62f-74a9-45a5-9cb5-5e60763289af","status":"0" ,"comment":"OK"}

我的回调网址重定向到我的控制器中的以下功能

public function templateCallback() {

    $json = file_get_contents('php://input'); 
    $json = urldecode($json);
    $obj = json_decode($json, TRUE);  
    $reqID = $obj->req_id;
    $status = $obj->status;
    print_r($obj);
    $this->db->where('TemplateRequestID', $reqID);
    $this->db->set('TemplateApproved', $status);
    $this->db->update('templatemaster_tbl');

}   

但它永远不会更新。我的代码有什么问题?我在json中表现不佳。所以我不确定这是在php中获取和解码json数组的正确方法。有人请帮助我。

为了测试这个,我在我的项目中创建了一个视图,并通过ajax函数发送这个相同的数组,如:

var base_url = '<?php echo base_url()?>';
    $('#test').click(function() { 
        var val = $('#testvalue').text();
        $.ajax({
            type: 'post',
            url: base_url + 'API/templateCallback',

            data: {
                val
            },
            success: function (response) { console.log(response);


            }
        });
    });

并尝试在控制器功能中打印$json$obj

$json会显示一个字符串,如:val=%7B%22req_id%22%3A%228b3eef97-330a-4271-8450-0676fbac8885%22%2C%22status%22%3A%220%22%2C%22comment%22%3A%22OK%22%7D

$obj不显示任何内容

1 个答案:

答案 0 :(得分:1)

如果您的$json包含编码值(%7B%22req_id%22%3A%228b3eef97-330a-4271-8450-0676fbac8885%22%2C%22status%22%3A%220%22%2C%22comment%22%3A%22OK%22%7D),则应先使用urldecode对其进行解码。

正确的代码是:

...
$jsonEncoded = file_get_contents('php://input'); 
$json = urldecode($jsonEncoded);
$obj = json_decode($json, TRUE); 
...