Codeigniter调用FastHub短信接口返回Empty JsonNode错误如何解决
问题原因
返回「Empty JsonNode」错误通常是两类原因:一是POST请求未正确设置Content-Type: application/json请求头,二是提交的JSON结构不符合要求、或发送的是表单格式而非raw JSON字符串。
正确构造$postData的方法
// 1. 构造channel参数块 $channel = [ 'channel' => '服务商分配的channel编号', 'password' => base64_encode('你的接口原始密码') // 直接对原始密码做base64编码,不要添加多余字符 ]; // 2. 构造messages数组,单条短信也要放在数组结构中 $messages = [ [ 'text' => '短信内容,需符合服务商签名、字数规范', 'msisdn' => '13xxxxxxxxx', // 手机号格式和服务商要求一致,不需要额外加前缀就不要加+86等字符 'source' => '服务商分配的来源标识' ] // 批量发送可追加多个数组元素 // ,[ // 'text' => '第二条短信内容', // 'msisdn' => '13xxxxxxxxx', // 'source' => '来源标识' // ] ]; // 3. 合并为最终请求数组 $postData = [ 'channel' => $channel, 'messages' => $messages ]; // 4. 转成JSON字符串,加参数避免中文乱码 $jsonPost = json_encode($postData, JSON_UNESCAPED_UNICODE);
Codeigniter 发送请求注意事项
- 必须显式设置
Content-Type: application/json请求头,不能用CI默认的表单格式提交 - 调用POST方法时直接传入上面生成的
$jsonPost字符串,不要把未转JSON的$postData数组直接当参数提交 - 若
json_encode返回false,说明数组中存在非法UTF-8字符,可追加JSON_INVALID_UTF8_IGNORE参数做兼容
Codeigniter 发送请求示例
// 加载CI自带的curl库,用原生cURL写法逻辑一致 $this->load->library('curl'); $apiUrl = 'FastHub提供的接口地址'; // 设置请求头 $this->curl->set_header('Content-Type: application/json'); // 服务商要求其他鉴权头可在此处追加 // 发送POST请求,直接传入JSON字符串 $response = $this->curl->simple_post($apiUrl, $jsonPost); // 排查时可打印JSON和返回结果对比 // var_dump($jsonPost, $response);
正确的请求JSON结构参考,可和你生成的结果逐字段对比:
{ "channel": { "channel": "123456", "password": "amFzdGh1YjEyMw==" }, "messages": [ { "text": "您的验证码是654321", "msisdn": "13800138000", "source": "COMPANY_SMS" } ] }
内容的提问来源于stack exchange,提问作者Vasu_Sharma
相关产品推荐
相关产品推荐

