使用rawurlencode通过PHP(CodeIgniter)API发送多行OTP短信失败,寻求解决方案
解决CodeIgniter中多行OTP短信发送失败的问题
我来帮你排查这个问题,你遇到的多行OTP短信发送失败,大概率是重复URL编码导致的,咱们一步步解决:
问题根源
你当前代码里,对$message用了rawurlencode处理,然后把$data数组传给CURLOPT_POSTFIELDS——而当curl处理数组类型的POST数据时,会自动对每个参数做URL编码,这就导致你的消息内容被编码了两次:换行符\n先被转成%0A,之后又被转义一次,最终短信里要么显示乱码,要么完全不换行,甚至触发服务商的参数格式校验失败。
修复步骤
1. 移除手动编码,保留原生换行符
直接用\n分隔短信内容,不需要手动调用rawurlencode,curl会自动帮你完成正确的URL编码,服务商那边能正确识别换行:
$message = "Dear User,\nYour OTP for registering with XYZ is " . $otp . ".\nOTPs are secret and should not be shared with anyone.\nRegards,\nTeam XYZ.";
2. 可选:适配服务商的换行要求
部分短信服务商可能要求用\r\n作为换行符,如果上面的方法还是不生效,可以试试替换换行符:
$message = "Dear User,\r\nYour OTP for registering with XYZ is " . $otp . ".\r\nOTPs are secret and should not be shared with anyone.\r\nRegards,\r\nTeam XYZ.";
3. 额外排查点
- 临时打开
echo($response);die;,查看服务商返回的具体错误信息(比如参数格式错误、API密钥无效、余额不足等) - 确认
$apiKey和sender没有多余空格或错误字符,符合服务商的格式要求 - 如果服务器环境SSL证书配置不全,可临时添加
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);(生产环境建议配置正确的SSL证书)
修复后的完整代码片段
function smsotp($mobile,$otp) { $mobile_no=array($mobile); // Account details $apiKey = urlencode('XXXXXXXXXXXXXXXXXXXXXXXXXX'); // Message details $numbers = $mobile_no; $sender = urlencode('XXXXXX'); // 直接使用换行符,不手动编码 $message = "Dear User,\nYour OTP for registering with XYZ is " . $otp . ".\nOTPs are secret and should not be shared with anyone.\nRegards,\nTeam XYZ."; $numbers = implode(',', $numbers); // Prepare data for POST request $data = array('apikey' => $apiKey, 'numbers' => $numbers, "sender" => $sender, "message" => $message); // Send the POST request with cURL $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); // 调试时可临时启用,排查SSL问题 // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($ch); // 检查curl执行是否出错 if(curl_errno($ch)){ echo 'Curl error: ' . curl_error($ch); } curl_close($ch); // Process your response here echo($response);die; }
内容的提问来源于stack exchange,提问作者Carwahan Your car partner
相关产品推荐
相关产品推荐

