You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:36:03