错误码位置因服务商而异:阿里云在code字段(如"isv.business_limit_control"),腾讯云errorcode为字符串(如"invalidparametervalue"),容联云用respcode(如"000000"),自研接口需var_dump确认结构。

PHP调用短信接口时返回的错误码,不是通用标准,每个服务商(如阿里云、腾讯云、容联云、亿美软通)定义完全不同,直接查“错误码大全”容易对错行。
错误码在哪个位置返回?
绝大多数短信 SDK 的 PHP 返回结构是数组或对象,错误码通常在 code、errCode、status 或 return_code 字段里,而不是 message 或 errmsg —— 后者只是描述,不可用于逻辑判断。
- 阿里云(Alibaba Cloud SMS):返回数组中
Code字段(注意大小写),如"OK"或"isv.BUSINESS_LIMIT_CONTROL" - 腾讯云(Tencent Cloud SMS):响应中
ErrorCode是字符串,如"InvalidParameterValue";Code字段反而是数字(如0表示成功) - 容联云(Yunxin / Ronglian):常用
respCode(字符串),如"000000"表示成功,"100001"表示签名未审核 - 自研 HTTP 接口:务必先
var_dump($response)看原始返回,别凭经验猜字段名
为什么 code === 0 还发失败?
因为很多厂商把「HTTP 状态码」和「业务错误码」混在一起返回,或者 SDK 自动做了转换。比如:
- cURL 请求超时,PHP 层可能只拿到空响应或
NULL,根本没进业务错误码解析流程 - 腾讯云返回
"Code": 0但"Message": "Signature illegal"—— 这说明签名参数错了,Code是平台级成功,业务层已拒绝 - 阿里云返回
"Code": "isv.SMS_TEMPLATE_ILLEGAL",但你的代码只判断了if ($res['Code'] !== 'OK'),漏掉了所有非 OK 字符串 - 某些小厂接口返回 JSON,但 Content-Type 是
text/plain,导致json_decode()返回null,后续取code字段直接报Notice: Trying to access array offset on null
怎么快速定位真实错误原因?
别只看文档里的错误码表,先做三件事:
立即学习“PHP免费学习笔记(深入)”;
- 打开 SDK 的日志开关(如阿里云 SDK 设置
'debug' => true,腾讯云设置'http_debug' => true),抓到原始请求和响应体 - 用
file_get_contents('php://input')或$GLOBALS['HTTP_RAW_POST_DATA'](旧版)确认你发出去的参数是否含非法字符(比如模板里的{phone}被 PHP 变量解析成了空值) - 检查
curl_getinfo($ch, CURLINFO_HTTP_CODE)—— 如果是400或401,说明请求连网关都没过,错误根本不在业务码层面 - 对返回值做防御性判断:
if (!is_array($res) || !isset($res['Code'])) { /* 记录原始响应字符串 */ }
真正卡住的往往不是错误码含义,而是返回结构不一致、网络层提前中断、或参数被中间件(如 Nginx、WAF)悄悄截断 —— 每次出问题,先打全量日志,再查码表。











