我的控制器中有一个函数可以从回调网址中获取一些数据。数据将自动在数据库中更新。
我的回调网址是 http://example.com/API/sendSMSCallback
这是 API 控制器
中的 sendSMSCallback 功能public function sendSMSCallback() {
$json = file_get_contents('php://input');
$data = array('value' => $json, 'date' => date('Y-m-d h:i:s'));
$this->db->insert('test', $data); // for testing
$json = urldecode($json);
$obj = json_decode($json,TRUE);
$reqID = $obj['req_id'];
$status = $obj['status'];
$mobile = $obj['msisdn'];
$this->db->where('UniqueID', $reqID);
$this->db->where('MobileNo', $mobile);
$this->db->set('ResponseStatus', $status);
$this->db->update('smslog_tbl');
// for testing
$this->load->helper('file');
if ( ! write_file(base_url().'test.txt', $json)){
echo 'Unable to write the file';
}
else{
echo 'File written!';
}
}
json形式的预期数据如下
{"result":{"status":"success","req_id":"0d0dd0ce8-dadf-49fd-a49e-9845787e0507","msisdn":"91xxxxxxx, "}}
但 smslog_tbl 表中的任何内容都不会更新, test.txt 为空。新行插入测试表中,但值字段为空。请帮我找一个解决方案。提前致谢
更新: 表结构:测试
`id` int(11) NOT NULL,
`value` text COLLATE latin1_general_ci NOT NULL,
`date` datetime NOT NULL
答案 0 :(得分:0)
首先,HTTP POST数据通常填充在$ _POST中,php://输入通常包含 PUT 数据。
您还需要允许
allow_url_fopen
在你的php.ini配置文件中。有些主机因安全性而不允许使用它
如果您已经这样做,那么检查file_get_contents PHP手动返回值。如果值为FALSE则无法读取文件。如果该值为NULL,则禁用该函数本身。
要了解file_get_contents操作可能出现的问题,您必须启用错误报告并显示错误以实际读取它们。
# Enable Error Reporting and Display:
error_reporting(~0);
ini_set('display_errors', 1);