调用Textlocal.com发送SMS返回Invalid login details错误如何解决
返回错误码3 Invalid login details 代表API身份校验未通过,和号码格式、短信内容规则无关,核心是API密钥传递或接口匹配出了问题,按以下步骤排查修复即可。
移除API Key的手动urlencode处理
你当前代码中对API Key做了urlencode()转义是最常见的触发原因。PHP cURL在传入数组格式的POST参数时,会自动按照表单编码规则处理所有参数值,提前转义会让服务端接收到的API Key和真实值不匹配,直接校验失败。直接传入后台获取的原始API Key即可,不需要任何编码处理:// 错误写法:$apiKey = urlencode('Your apiKey'); // 正确写法 $apiKey = '替换为你Textlocal后台生成的真实API Key';注意不要用示例占位Key,也不要误填账户登录密码作为API Key,Key需要从账户后台的API配置页面获取。
确认接口域名和账户所属区域匹配
你当前调用的是印度区接口域名api.textlocal.in,如果你注册的是非印度区的Textlocal账户,跨区调用接口会因为账户不在对应区域的服务池内,直接返回登录无效错误,需要替换为你账户所属服务区对应的接口域名。移除其他参数的不必要手动编码
代码中对发件人ID做的urlencode()、对短信内容做的rawurlencode()都属于多余操作,会导致参数被二次转义,虽然不是触发本次登录错误的直接原因,但后续会引发发件人显示异常、短信内容乱码问题,直接传原始字符串即可:// 错误写法:$sender = urlencode('TXTLCL'); // 正确写法:发件人ID需要提前在后台提交审核通过后才能使用 $sender = 'TXTLCL'; // 错误写法:$message = rawurlencode('This is your message'); // 正确写法 $message = 'This is your message';校验API Key的访问权限
如果代码写法修正后仍报错,登录后台检查API Key状态:确认Key没有被禁用、没有过期,如果你开启了IP白名单限制,需要把当前发请求的服务器出口IP加入白名单,否则也会被判定为无效登录。
$apiKey = '替换为你后台获取的真实API Key'; $numbers = array('123456789'); $sender = 'TXTLCL'; $message = 'This is your message'; $numbers = implode(',', $numbers); $data = array( 'apikey' => $apiKey, 'numbers' => $numbers, 'sender' => $sender, 'message' => $message ); $ch = curl_init('https://api.textlocal.in/send/'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $response = curl_exec($ch); $curlError = curl_error($ch); curl_close($ch); if ($curlError) { echo '请求失败:' . $curlError; } else { echo $response; }
内容的提问来源于stack exchange,提问作者Chris C0der

