【问题标题】:API callback responseAPI 回调响应
【发布时间】:2017-10-23 05:03:31
【问题描述】:

我正在使用 API 在我的 codeigniter 项目中发送短信。发送后会返回一个json形式的response数组到我项目中的回调url。我需要在我的数据库中更新这个响应。这是我的代码:

响应数组将如下所示:

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

我的回调 url 重定向到我的控制器中的以下函数

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 什么也不显示

【问题讨论】:

  • print_r($obj);的值是多少?
  • 任何错误或消息?
  • @madalinivascu 它什么也没显示
  • @AZinkey 没有错误
  • 先试试urldecode($json);

标签: php json codeigniter


【解决方案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); 
...

【讨论】:

  • 得到响应需要时间,它会自动更新。所以我无法预测它何时会在我的数据库中更新。所以我的问题是,如果$json{"req_id":"809ff62f-74a9-45a5-9cb5-5e60763289af","status":"0" ,"comment":"OK"} ,我的代码会起作用吗
  • @geeth 我看不出它与时间有关的任何原因,也许我误解了你的问题?如果内容已经解码,就不要再做 urldecode 了。如果没有,请执行并继续。
  • 非常感谢。我解决了我的问题。我使用了 urldecode($json) 并且还有一个错误,即我曾经在 json_deocde() 中设置 TRUE 并在对象方法中获取值。所以我把 $obj->req_id 和 $obj->status 分别改成了 $obj['req_id'] 和 $obj['status']
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 2014-04-30
  • 1970-01-01
  • 2016-06-06
  • 2022-12-17
  • 1970-01-01
  • 2020-03-07
相关资源
最近更新 更多