我使用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
不显示任何内容
答案 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);
...