开发
SDK 获取
短信 PHP SDK 在 Github 中的下载地址:短信 PHP SDK。
开发准备
1. 申请 SDK AppID 以及 App Key:
在开始本教程之前,您需要先获取 SDK AppID 和 App Key,如您尚未申请,请到 短信控制台 中添加应用。应用添加成功后您将获得 SDK AppID 以及 App Key。
SDK AppID 是以 14xxxxx 开头。
2. 申请签名:
下发短信必须携带签名,您可以在短信 控制台 中申请短信签名,详细申请操作参考 创建签名。
3. 申请模板:
下发短信内容必须经过审核,您可以在短信 控制台 中申请短信模板,详细申请操作参考 创建正文模板。
完成以上三项便可开始代码开发。
SDK 配置
- Composer 配置:
qcloudsms_php 采用 composer 进行安装,要使用 qcloudsms 功能,只需要在 composer.json 中添加如下依赖:{ <span class="hljs-attr">"require"</span>: { <span class="hljs-attr">"qcloudsms/qcloudsms_php"</span>: <span class="hljs-string">"0.1.*"</span> } }
Composer 的使用可以参考 demo 目录下面的示例。
- 手动配置:
1.手动下载或 clone 最新版本 qcloudsms_php 代码。
2.把 qcloudsms_php src 目录下的代码放入 Autoloading 目录。
3.require qcloudsms_php src 目录下面的 index.php,即可使用,如把 qcloudsms 放在当前目录下,只需要:<span class="hljs-keyword">require</span> <span class="hljs-keyword">__DIR__</span> . <span class="hljs-string">"/qcloudsms_php/src/index.php"</span>;
示例
若您对接口存在疑问,可以查阅 API 文档、SDK文档 和 错误码。
- 准备必要参数
/ 短信应用SDK AppID
$appid = <span class="hljs-number">1400009099</span>; <span class="hljs-comment">// 1400开头</span>
<span class="hljs-comment">// 短信应用SDK AppKey</span>
$appkey = <span class="hljs-string">"9ff91d87c2cd7cd0ea762f141975d1df37481d48700d70ac37470aefc60f9bad"</span>;
<span class="hljs-comment">// 需要发送短信的手机号码</span>
$phoneNumbers = [<span class="hljs-string">"21212313123"</span>, <span class="hljs-string">"12345678902"</span>, <span class="hljs-string">"12345678903"</span>];
<span class="hljs-comment">//templateId7839对应的内容是"您的验证码是: {1}"</span>
<span class="hljs-comment">// 短信模板ID,需要在短信应用中申请</span>
$templateId = <span class="hljs-number">7839</span>; <span class="hljs-comment">// <span class="hljs-doctag">NOTE:</span> 这里的模板ID`7839`只是一个示例,真实的模板ID需要在短信控制台中申请</span>
$smsSign = <span class="hljs-string">"腾讯云"</span>; <span class="hljs-comment">// <span class="hljs-doctag">NOTE:</span> 这里的签名只是示例,请使用真实的已申请的签名,签名参数使用的是`签名内容`,而不是`签名ID`</span>
- 指定模板 ID 单发短信
<span class="hljs-keyword">use</span> <span class="hljs-title">Qcloud</span>\<span class="hljs-title">Sms</span>\<span class="hljs-title">SmsSingleSender</span>;
<span class="hljs-keyword">try</span> {
$ssender = <span class="hljs-keyword">new</span> SmsSingleSender($appid, $appkey);
$params = [<span class="hljs-string">"5678"</span>];<span class="hljs-comment">//数组具体的元素个数和模板中变量个数必须一致,例如事例中 templateId:5678对应一个变量,参数数组中元素个数也必须是一个</span>
$result = $ssender->sendWithParam(<span class="hljs-string">"86"</span>, $phoneNumbers[<span class="hljs-number">0</span>], $templateId,
$params, $smsSign, <span class="hljs-string">""</span>, <span class="hljs-string">""</span>); <span class="hljs-comment">// 签名参数未提供或者为空时,会使用默认签名发送短信</span>
$rsp = json_decode($result);
<span class="hljs-keyword">echo</span> $result;
} <span class="hljs-keyword">catch</span>(\<span class="hljs-keyword">Exception</span> $e) {
<span class="hljs-keyword">echo</span> var_dump($e);
}
无论单发/群发短信还是指定模板ID单发/群发短信都需要从控制台中申请模板并且模板已经审核通过,才可能下发成功,否则返回失败。
- 指定模板 ID 群发短信
<span class="hljs-keyword">use</span> <span class="hljs-title">Qcloud</span>\<span class="hljs-title">Sms</span>\<span class="hljs-title">SmsMultiSender</span>;
<span class="hljs-keyword">try</span> {
$msender = <span class="hljs-keyword">new</span> SmsMultiSender($appid, $appkey);
$params = [<span class="hljs-string">"5678"</span>];<span class="hljs-comment">//数组具体的元素个数和模板中变量个数必须一致,例如事例中 templateId:5678对应一个变量,参数数组中元素个数也必须是一个</span>
$result = $msender->sendWithParam(<span class="hljs-string">"86"</span>, $phoneNumbers,
$templateId, $params, $smsSign, <span class="hljs-string">""</span>, <span class="hljs-string">""</span>); <span class="hljs-comment">// 签名参数未提供或者为空时,会使用默认签名发送短信</span>
$rsp = json_decode($result);
<span class="hljs-keyword">echo</span> $result;
} <span class="hljs-keyword">catch</span>(\<span class="hljs-keyword">Exception</span> $e) {
<span class="hljs-keyword">echo</span> var_dump($e);
}
群发一次请求最多支持 200 个号码,如有对号码数量有特殊需求请联系腾讯云短信技术支持(QQ:3012203387)。
无论单发/群发短信还是指定模板ID单发/群发短信都需要从控制台中申请模板并且模板已经审核通过,才可能下发成功,否则返回失败。
- 发送语音验证码
<span class="hljs-keyword">use</span> <span class="hljs-title">Qcloud</span>\<span class="hljs-title">Sms</span>\<span class="hljs-title">SmsVoiceVerifyCodeSender</span>;
<span class="hljs-keyword">try</span> {
$vvcsender = <span class="hljs-keyword">new</span> SmsVoiceVerifyCodeSender($appid, $appkey);
$result = $vvcsender->send(<span class="hljs-string">"86"</span>, $phoneNumbers[<span class="hljs-number">0</span>], <span class="hljs-string">"5678"</span>, <span class="hljs-number">2</span>, <span class="hljs-string">""</span>);
$rsp = json_decode($result);
<span class="hljs-keyword">echo</span> $result;
} <span class="hljs-keyword">catch</span> (\<span class="hljs-keyword">Exception</span> $e) {
<span class="hljs-keyword">echo</span> var_dump($e);
}
语音验证码发送只需提供验证码数字,例如在 msg=“5678”,您收到的语音通知为“您的语音验证码是5 6 7 8”,如需自定义内容,可以使用语音通知。
- 发送语音通知
<span class="hljs-keyword">use</span> <span class="hljs-title">Qcloud</span>\<span class="hljs-title">Sms</span>\<span class="hljs-title">SmsVoicePromptSender</span>;
<span class="hljs-keyword">try</span> {
$vpsender = <span class="hljs-keyword">new</span> SmsVoicePromptSender($appid, $appkey);
$result = $vpsender->send(<span class="hljs-string">"86"</span>, $phoneNumbers[<span class="hljs-number">0</span>], <span class="hljs-number">2</span>, <span class="hljs-string">"5678"</span>, <span class="hljs-string">""</span>);
$rsp = json_decode($result);
<span class="hljs-keyword">echo</span> $result;
} <span class="hljs-keyword">catch</span> (\<span class="hljs-keyword">Exception</span> $e) {
<span class="hljs-keyword">echo</span> var_dump($e);
}
- 拉取短信回执以及回复
<span class="hljs-keyword">use</span> <span class="hljs-title">Qcloud</span>\<span class="hljs-title">Sms</span>\<span class="hljs-title">SmsStatusPuller</span>;
<span class="hljs-keyword">try</span> {
$sspuller = <span class="hljs-keyword">new</span> SmsStatusPuller($appid, $appkey);
<span class="hljs-comment">// 拉取短信回执</span>
$callbackResult = $spuller->pullCallback(<span class="hljs-number">10</span>);
$callbackRsp = json_decode($callbackResult);
<span class="hljs-keyword">echo</span> $callbackResult;
<span class="hljs-comment">// 拉取回复</span>
$replyResult = $spuller->pullReply(<span class="hljs-number">10</span>);
$replyRsp = json_decode($replyResult);
<span class="hljs-keyword">echo</span> $replyResult;
} <span class="hljs-keyword">catch</span> (\<span class="hljs-keyword">Exception</span> $e) {
<span class="hljs-keyword">echo</span> var_dump($e);
}
短信拉取功能需要联系腾讯云短信技术支持(QQ:3012203387),量大客户可以使用此功能批量拉取,其他客户不建议使用。
- 拉取单个手机短信状态
<span class="hljs-keyword">use</span> <span class="hljs-title">Qcloud</span>\<span class="hljs-title">Sms</span>\<span class="hljs-title">SmsMobileStatusPuller</span>;
<span class="hljs-keyword">try</span> {
$beginTime = <span class="hljs-number">1511125600</span>; <span class="hljs-comment">// 开始时间(UNIX timestamp)</span>
$endTime = <span class="hljs-number">1511841600</span>; <span class="hljs-comment">// 结束时间(UNIX timestamp)</span>
$maxNum = <span class="hljs-number">10</span>; <span class="hljs-comment">// 单次拉取最大量</span>
$mspuller = <span class="hljs-keyword">new</span> SmsMobileStatusPuller($appid, $appkey);
<span class="hljs-comment">// 拉取短信回执</span>
$callbackResult = $mspuller->pullCallback(<span class="hljs-string">"86"</span>, $phoneNumbers[<span class="hljs-number">0</span>],
$beginTime, $endTime, $maxNum);
$callbackRsp = json_decode($callbackResult);
<span class="hljs-keyword">echo</span> $callbackResult;
<span class="hljs-comment">// 拉取回复</span>
$replyResult = $mspuller->pullReply(<span class="hljs-string">"86"</span>, $phoneNumbers[<span class="hljs-number">0</span>],
$beginTime, $endTime, $maxNum);
$replyRsp = json_decode($replyResult);
<span class="hljs-keyword">echo</span> $replyResult;
} <span class="hljs-keyword">catch</span> (\<span class="hljs-keyword">Exception</span> $e) {
<span class="hljs-keyword">echo</span> var_dump($e);
}
短信拉取功能需要联系腾讯云短信技术支持(QQ:3012203387),量大客户可以使用此功能批量拉取,其他客户不建议使用。
- 发送国际短信
国际短信与国内短信发送类似,发送国际短信只需替换相应国家码。
- 上传语音文件
<span class="hljs-keyword">use</span> <span class="hljs-title">Qcloud</span>\<span class="hljs-title">Sms</span>\<span class="hljs-title">VoiceFileUploader</span>;
<span class="hljs-keyword">try</span> {
<span class="hljs-comment">// <span class="hljs-doctag">Note:</span> 语音文件大小上传限制400K字节</span>
$filepath = <span class="hljs-string">"path/to/example.mp3"</span>;
$fileContent = file_get_contents($filepath);
<span class="hljs-keyword">if</span> ($fileContent == <span class="hljs-keyword">false</span>) {
<span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> \<span class="hljs-keyword">Exception</span>(<span class="hljs-string">"can not read file "</span> . $filepath);
}
$contentType = VoiceFileUploader::MP3;
$uploader = <span class="hljs-keyword">new</span> VoiceFileUploader($appid, $appkey);
$result = $uploader->upload($fileContent, $contentType);
<span class="hljs-comment">// 上传成功后,$rsp里会带有语音文件的fid</span>
$rsp = json_decode($result);
<span class="hljs-keyword">echo</span> $result;
} <span class="hljs-keyword">catch</span> (\<span class="hljs-keyword">Exception</span> $e) {
<span class="hljs-keyword">echo</span> var_dump($e);
}
语音文件上传功能需要联系腾讯云短信技术支持(QQ:3012203387)才能开通。
- 按语音文件 fid 发送语音通知
<span class="hljs-keyword">use</span> <span class="hljs-title">Qcloud</span>\<span class="hljs-title">Sms</span>\<span class="hljs-title">FileVoiceSender</span>;
<span class="hljs-keyword">try</span> {
<span class="hljs-comment">// Note:这里$fid来自`上传语音文件`接口返回的响应,要按语音</span>
<span class="hljs-comment">// 文件fid发送语音通知,需要先上传语音文件获取$fid</span>
$fid = <span class="hljs-string">"73844bb649ca38f37e596ec2781ce6a56a2a3a1b.mp3"</span>;
$fvsender = <span class="hljs-keyword">new</span> FileVoiceSender($appid, $appkey);
$result = $fvsender->send(<span class="hljs-string">"86"</span>, $phoneNumbers[<span class="hljs-number">0</span>], $fid);
$rsp = json_decode($result);
<span class="hljs-keyword">echo</span> $result;
} <span class="hljs-keyword">catch</span> (\<span class="hljs-keyword">Exception</span> $e) {
<span class="hljs-keyword">echo</span> var_dump($e);
}
按语音文件 fid 发送语音通知功能需要联系腾讯云短信技术支持(QQ:3012203387)才能开通。
- 指定模板发送语音通知
<span class="hljs-keyword">use</span> <span class="hljs-title">Qcloud</span>\<span class="hljs-title">Sms</span>\<span class="hljs-title">TtsVoiceSender</span>;
<span class="hljs-keyword">try</span> {
$templateId = <span class="hljs-number">1013</span>;
$params = [<span class="hljs-string">"54321"</span>];<span class="hljs-comment">//数组具体的元素个数和模板中变量个数必须一致,例如事例中templateId:54321对应一个变量,参数数组中元素个数也必须是一个</span>
$tvsender = <span class="hljs-keyword">new</span> TtsVoiceSender($appid, $appkey);
$result = $tvsender->send(<span class="hljs-string">"86"</span>, $phoneNumbers[<span class="hljs-number">0</span>], $templateId, $params);
$rsp = json_decode($result);
<span class="hljs-keyword">echo</span> $result;
} <span class="hljs-keyword">catch</span> (\<span class="hljs-keyword">Exception</span> $e) {
<span class="hljs-keyword">echo</span> var_dump($e);
}