mirror of https://github.com/IoTcat/qcloudsms.git
parent
a9a62e2f7f
commit
660b598a58
11 changed files with 702 additions and 58 deletions
@ -0,0 +1,22 @@ |
||||
腾讯云短信 PHP SDK Demo |
||||
=== |
||||
|
||||
## 使用 |
||||
|
||||
1. 安装依赖 |
||||
|
||||
```sh |
||||
php /path/to/composer install |
||||
``` |
||||
|
||||
2. 配置必要参数,如SDK appid/appkey |
||||
|
||||
```sh |
||||
emacs app.php |
||||
``` |
||||
|
||||
3. 运行 |
||||
|
||||
```sh |
||||
php ./app.php |
||||
``` |
@ -0,0 +1,133 @@ |
||||
<?php |
||||
|
||||
require __DIR__ . "/vendor/autoload.php"; |
||||
|
||||
use Qcloud\Sms\SmsSingleSender; |
||||
use Qcloud\Sms\SmsMultiSender; |
||||
use Qcloud\Sms\SmsVoiceVerifyCodeSender; |
||||
use Qcloud\Sms\SmsVoicePromptSender; |
||||
use Qcloud\Sms\SmsStatusPuller; |
||||
use Qcloud\Sms\SmsMobileStatusPuller; |
||||
|
||||
|
||||
// 短信应用SDK AppID |
||||
$appid = 1400009099; // 1400开头 |
||||
|
||||
// 短信应用SDK AppKey |
||||
$appkey = "9ff91d87c2cd7cd0ea762f141975d1df37481d48700d70ac37470aefc60f9bad"; |
||||
|
||||
// 需要发送短信的手机号码 |
||||
$phoneNumbers = ["21212313123", "12345678902", "12345678903"]; |
||||
|
||||
// 短信模板ID,需要在短信应用中申请 |
||||
$templateId = 7839; // NOTE: 这里的模板ID`7839`只是一个示例,真实的模板ID需要在短信控制台中申请 |
||||
|
||||
// 签名 |
||||
$smsSign = "腾讯云"; // NOTE: 这里的签名只是示例,请使用真实的已申请的签名,签名参数使用的是`签名内容`,而不是`签名ID` |
||||
|
||||
// 单发短信 |
||||
try { |
||||
$ssender = new SmsSingleSender($appid, $appkey); |
||||
$result = $ssender->send(0, "86", $phoneNumber[0], |
||||
"【腾讯云】您的验证码是: 5678", "", ""); |
||||
$rsp = json_decode($result); |
||||
echo $result; |
||||
} catch(\Exception $e) { |
||||
echo var_dump($e); |
||||
} |
||||
|
||||
// 指定模板ID单发短信 |
||||
try { |
||||
$ssender = new SmsSingleSender($appid, $appkey); |
||||
$params = ["5678"]; |
||||
$result = $ssender->sendWithParam("86", $phoneNumbers[0], $templateId, |
||||
$params, $smsSign, "", ""); // 签名参数未提供或者为空时,会使用默认签名发送短信 |
||||
$rsp = json_decode($result); |
||||
echo $result; |
||||
} catch(\Exception $e) { |
||||
echo var_dump($e); |
||||
} |
||||
|
||||
// 群发 |
||||
try { |
||||
$msender = new SmsMultiSender($appid, $appkey); |
||||
$result = $msender->send(0, "86", $phoneNumbers, |
||||
"【腾讯云】您的验证码是: 5678", "", ""); |
||||
$rsp = json_decode($result); |
||||
echo $result; |
||||
} catch(\Exception $e) { |
||||
echo var_dump($e); |
||||
} |
||||
|
||||
// 指定模板ID群发 |
||||
try { |
||||
$msender = new SmsMultiSender($appid, $appkey); |
||||
$params = ["5678"]; |
||||
$result = $msender->sendWithParam("86", $phoneNumbers, |
||||
$templateId, $params, $smsSign, "", ""); // 签名参数未提供或者为空时,会使用默认签名发送短信 |
||||
$rsp = json_decode($result); |
||||
echo $result; |
||||
} catch(\Exception $e) { |
||||
echo var_dump($e); |
||||
} |
||||
|
||||
// 发送语音验证码 |
||||
try { |
||||
$vvcsender = new SmsVoiceVerifyCodeSender($appid, $appkey); |
||||
$result = $vvcsender->send("86", $phoneNumber[0], "5678", 2, ""); |
||||
$rsp = json_decode($result); |
||||
echo $result; |
||||
} catch (\Exception $e) { |
||||
echo var_dump($e); |
||||
} |
||||
|
||||
// 发送语音通知 |
||||
try { |
||||
$vpsender = new SmsVoicePromptSender($appid, $appkey); |
||||
$result = $vpsender->send("86", $phoneNumber[0], 2, "5678", ""); |
||||
$rsp = json_decode($result); |
||||
echo $result; |
||||
} catch (\Exception $e) { |
||||
echo var_dump($e); |
||||
} |
||||
|
||||
// 拉取短信回执以及回复 |
||||
try { |
||||
$sspuller = new SmsStatusPuller($appid, $appkey); |
||||
|
||||
// 拉取短信回执 |
||||
$callbackResult = $spuller->pullCallback(10); |
||||
$callbackRsp = json_decode($callbackResult); |
||||
echo $callbackResult; |
||||
|
||||
// 拉取回复 |
||||
$replyResult = $spuller->pullReply(10); |
||||
$replyRsp = json_decode($replyResult); |
||||
echo $replyResult; |
||||
} catch (\Exception $e) { |
||||
echo var_dump($e); |
||||
} |
||||
|
||||
|
||||
// 拉取单个手机短信状态 |
||||
try { |
||||
$beginTime = 1516670595; // 开始时间(unix timestamp) |
||||
$endTime = 1516680595; // 结束时间(unix timestamp) |
||||
$maxNum = 10; // 单次拉取最大量 |
||||
$mspuller = new SmsMobileStatusPuller($appid, $appkey); |
||||
|
||||
// 拉取短信回执 |
||||
$callbackResult = $mspuller->pullCallback("86", $phoneNumbers[0], |
||||
$beginTime, $endTime, $maxNum); |
||||
$callbackRsp = json_decode($callbackResult); |
||||
echo $callbackResult; |
||||
echo "\n"; |
||||
|
||||
// 拉取回复 |
||||
$replyResult = $mspuller->pullReply("86", $phoneNumbers[0], |
||||
$beginTime, $endTime, $maxNum); |
||||
$replyRsp = json_decode($replyResult); |
||||
echo $replyResult; |
||||
} catch (\Exception $e) { |
||||
echo var_dump($e); |
||||
} |
@ -0,0 +1,16 @@ |
||||
{ |
||||
"name": "qcloudsms_demo", |
||||
"description": "qcloudms demo", |
||||
"type": "project", |
||||
"license": "mit", |
||||
"authors": [ |
||||
{ |
||||
"name": "qcloudsms", |
||||
"email": "qcloudsms@yeah.net" |
||||
} |
||||
], |
||||
"minimum-stability": "dev", |
||||
"require": { |
||||
"qcloudsms/qcloudsms_php": "*" |
||||
} |
||||
} |
@ -0,0 +1,301 @@ |
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8" /> |
||||
<meta name="robots" content="index, follow, all" /> |
||||
<title>Qcloud\Sms\SmsMobileStatusPuller | API</title> |
||||
|
||||
<link rel="stylesheet" type="text/css" href="../../css/bootstrap.min.css"> |
||||
<link rel="stylesheet" type="text/css" href="../../css/bootstrap-theme.min.css"> |
||||
<link rel="stylesheet" type="text/css" href="../../css/sami.css"> |
||||
<script src="../../js/jquery-1.11.1.min.js"></script> |
||||
<script src="../../js/bootstrap.min.js"></script> |
||||
<script src="../../js/typeahead.min.js"></script> |
||||
<script src="../../sami.js"></script> |
||||
<meta name="MobileOptimized" content="width"> |
||||
<meta name="HandheldFriendly" content="true"> |
||||
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"> |
||||
|
||||
|
||||
</head> |
||||
|
||||
<body id="class" data-name="class:Qcloud_Sms_SmsMobileStatusPuller" data-root-path="../../"> |
||||
<div id="content"> |
||||
<div id="left-column"> |
||||
<div id="control-panel"> |
||||
<script> |
||||
$('option[data-version="'+window.projectVersion+'"]').prop('selected', true); |
||||
</script> |
||||
<form id="search-form" action="../../search.html" method="GET"> |
||||
<span class="glyphicon glyphicon-search"></span> |
||||
<input name="search" |
||||
class="typeahead form-control" |
||||
type="search" |
||||
placeholder="Search"> |
||||
</form> |
||||
</div> |
||||
|
||||
<div id="api-tree"></div> |
||||
|
||||
</div> |
||||
<div id="right-column"> |
||||
<nav id="site-nav" class="navbar navbar-default" role="navigation"> |
||||
<div class="container-fluid"> |
||||
<div class="navbar-header"> |
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-elements"> |
||||
<span class="sr-only">Toggle navigation</span> |
||||
<span class="icon-bar"></span> |
||||
<span class="icon-bar"></span> |
||||
<span class="icon-bar"></span> |
||||
</button> |
||||
<a class="navbar-brand" href="../../index.html">API</a> |
||||
</div> |
||||
<div class="collapse navbar-collapse" id="navbar-elements"> |
||||
<ul class="nav navbar-nav"> |
||||
<li><a href="../../classes.html">Classes</a></li> |
||||
<li><a href="../../namespaces.html">Namespaces</a></li> |
||||
<li><a href="../../interfaces.html">Interfaces</a></li> |
||||
<li><a href="../../traits.html">Traits</a></li> |
||||
<li><a href="../../doc-index.html">Index</a></li> |
||||
<li><a href="../../search.html">Search</a></li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
</nav> |
||||
|
||||
<div class="namespace-breadcrumbs"> |
||||
<ol class="breadcrumb"> |
||||
<li><span class="label label-default">class</span></li> |
||||
<li><a href="../../Qcloud.html">Qcloud</a></li><li class="backslash">\</li><li><a href="../../Qcloud/Sms.html">Sms</a></li><li class="backslash">\</li><li>SmsMobileStatusPuller</li> |
||||
</ol> |
||||
</div> |
||||
<div id="page-content"> |
||||
|
||||
<div class="page-header"> |
||||
<h1> |
||||
SmsMobileStatusPuller |
||||
|
||||
</h1> |
||||
</div> |
||||
|
||||
<p> class |
||||
<strong>SmsMobileStatusPuller</strong> |
||||
</p> |
||||
|
||||
|
||||
|
||||
|
||||
<div class="description"> |
||||
<p>拉取单个手机短信状态类</p> </div> |
||||
|
||||
|
||||
|
||||
|
||||
<h2>Methods</h2> |
||||
|
||||
<div class="container-fluid underlined"> |
||||
<div class="row"> |
||||
<div class="col-md-2 type"> |
||||
|
||||
</div> |
||||
<div class="col-md-8 type"> |
||||
<a href="#method___construct">__construct</a>(string $appid, string $appkey) |
||||
|
||||
<p>构造函数</p> </div> |
||||
<div class="col-md-2"></div> |
||||
</div> |
||||
<div class="row"> |
||||
<div class="col-md-2 type"> |
||||
string |
||||
</div> |
||||
<div class="col-md-8 type"> |
||||
<a href="#method_pullCallback">pullCallback</a>(string $nationCode, string $mobile, int $beginTime, int $endTime, int $max) |
||||
|
||||
<p>拉取回执结果</p> </div> |
||||
<div class="col-md-2"></div> |
||||
</div> |
||||
<div class="row"> |
||||
<div class="col-md-2 type"> |
||||
string |
||||
</div> |
||||
<div class="col-md-8 type"> |
||||
<a href="#method_pullReply">pullReply</a>(string $nationCode, string $mobile, int $beginTime, int $endTime, int $max) |
||||
|
||||
<p>拉取回复信息</p> </div> |
||||
<div class="col-md-2"></div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<h2>Details</h2> |
||||
|
||||
<div id="method-details"> |
||||
<div class="method-item"> |
||||
<h3 id="method___construct"> |
||||
<div class="location">at line 24</div> |
||||
<code> |
||||
<strong>__construct</strong>(string $appid, string $appkey) |
||||
</code> |
||||
</h3> |
||||
<div class="details"> |
||||
|
||||
|
||||
|
||||
<div class="method-description"> |
||||
<p>构造函数</p> </div> |
||||
<div class="tags"> |
||||
<h4>Parameters</h4> |
||||
|
||||
<table class="table table-condensed"> |
||||
<tr> |
||||
<td>string</td> |
||||
<td>$appid</td> |
||||
<td>sdkappid</td> |
||||
</tr> |
||||
<tr> |
||||
<td>string</td> |
||||
<td>$appkey</td> |
||||
<td>sdkappid对应的appkey</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
<div class="method-item"> |
||||
<h3 id="method_pullCallback"> |
||||
<div class="location">at line 72</div> |
||||
<code> string |
||||
<strong>pullCallback</strong>(string $nationCode, string $mobile, int $beginTime, int $endTime, int $max) |
||||
</code> |
||||
</h3> |
||||
<div class="details"> |
||||
|
||||
|
||||
|
||||
<div class="method-description"> |
||||
<p>拉取回执结果</p> </div> |
||||
<div class="tags"> |
||||
<h4>Parameters</h4> |
||||
|
||||
<table class="table table-condensed"> |
||||
<tr> |
||||
<td>string</td> |
||||
<td>$nationCode</td> |
||||
<td>国家码,如 86 为中国</td> |
||||
</tr> |
||||
<tr> |
||||
<td>string</td> |
||||
<td>$mobile</td> |
||||
<td>不带国家码的手机号</td> |
||||
</tr> |
||||
<tr> |
||||
<td>int</td> |
||||
<td>$beginTime</td> |
||||
<td>开始时间(unix timestamp)</td> |
||||
</tr> |
||||
<tr> |
||||
<td>int</td> |
||||
<td>$endTime</td> |
||||
<td>结束时间(unix timestamp)</td> |
||||
</tr> |
||||
<tr> |
||||
<td>int</td> |
||||
<td>$max</td> |
||||
<td>拉取最大条数,最多100</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
|
||||
<h4>Return Value</h4> |
||||
|
||||
<table class="table table-condensed"> |
||||
<tr> |
||||
<td>string</td> |
||||
<td>应答json字符串,详细内容参见腾讯云协议文档</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
<div class="method-item"> |
||||
<h3 id="method_pullReply"> |
||||
<div class="location">at line 87</div> |
||||
<code> string |
||||
<strong>pullReply</strong>(string $nationCode, string $mobile, int $beginTime, int $endTime, int $max) |
||||
</code> |
||||
</h3> |
||||
<div class="details"> |
||||
|
||||
|
||||
|
||||
<div class="method-description"> |
||||
<p>拉取回复信息</p> </div> |
||||
<div class="tags"> |
||||
<h4>Parameters</h4> |
||||
|
||||
<table class="table table-condensed"> |
||||
<tr> |
||||
<td>string</td> |
||||
<td>$nationCode</td> |
||||
<td>国家码,如 86 为中国</td> |
||||
</tr> |
||||
<tr> |
||||
<td>string</td> |
||||
<td>$mobile</td> |
||||
<td>不带国家码的手机号</td> |
||||
</tr> |
||||
<tr> |
||||
<td>int</td> |
||||
<td>$beginTime</td> |
||||
<td>开始时间(unix timestamp)</td> |
||||
</tr> |
||||
<tr> |
||||
<td>int</td> |
||||
<td>$endTime</td> |
||||
<td>结束时间(unix timestamp)</td> |
||||
</tr> |
||||
<tr> |
||||
<td>int</td> |
||||
<td>$max</td> |
||||
<td>拉取最大条数,最多100</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
|
||||
<h4>Return Value</h4> |
||||
|
||||
<table class="table table-condensed"> |
||||
<tr> |
||||
<td>string</td> |
||||
<td>应答json字符串,详细内容参见腾讯云协议文档</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
<div id="footer"> |
||||
Generated by <a href="http://sami.sensiolabs.org/">Sami, the API Documentation Generator</a>. |
||||
</div> |
||||
|
||||
</div> |
||||
</div> |
||||
</body> |
||||
|
||||
</html> |
@ -1 +1 @@ |
||||
C:19:"Sami\Renderer\Index":595:{a:3:{i:0;a:6:{s:25:"Qcloud\Sms\SmsMultiSender";s:40:"3014b96dcaabdb511b2bccccc1569c9e83dc2c40";s:24:"Qcloud\Sms\SmsSenderUtil";s:40:"f153a171b8782f92fa0482a936b1db2d0c4f90ca";s:26:"Qcloud\Sms\SmsSingleSender";s:40:"71f2da69394630dece2071d0fa1c09f06ba7861d";s:26:"Qcloud\Sms\SmsStatusPuller";s:40:"249992b174967d6c82c8754a16bd34d991901392";s:31:"Qcloud\Sms\SmsVoicePromptSender";s:40:"42930df749a0ca2b0af30b5e086595685b097bef";s:35:"Qcloud\Sms\SmsVoiceVerifyCodeSender";s:40:"ec1d96de6e559177f5ae1a1f6aa3649ea5fe34a0";}i:1;a:1:{i:0;s:6:"master";}i:2;a:2:{i:0;s:6:"Qcloud";i:1;s:10:"Qcloud\Sms";}}} |
||||
C:19:"Sami\Renderer\Index":683:{a:3:{i:0;a:7:{s:32:"Qcloud\Sms\SmsMobileStatusPuller";s:40:"728a70f32eddaa9ce779996e17f2f972119b180d";s:25:"Qcloud\Sms\SmsMultiSender";s:40:"5d26b947eeb83e52b11dda40d71d2d61200ce024";s:24:"Qcloud\Sms\SmsSenderUtil";s:40:"fc30d7a06e540391d317ecaba0d23aedc888a80a";s:26:"Qcloud\Sms\SmsSingleSender";s:40:"f814e68da128f2363023997f93bc081ec2fd166a";s:26:"Qcloud\Sms\SmsStatusPuller";s:40:"956c7c7432dbe6038e1713bfbc003c361c7a6bf0";s:31:"Qcloud\Sms\SmsVoicePromptSender";s:40:"9f3c118ec943dfcf418c8adc77cbb503f3d0d5b9";s:35:"Qcloud\Sms\SmsVoiceVerifyCodeSender";s:40:"842a013386d41859b7b0e26fb6532541d9c18c51";}i:1;a:1:{i:0;s:6:"master";}i:2;a:2:{i:0;s:6:"Qcloud";i:1;s:10:"Qcloud\Sms";}}} |
@ -0,0 +1,91 @@ |
||||
<?php |
||||
|
||||
namespace Qcloud\Sms; |
||||
|
||||
use Qcloud\Sms\SmsSenderUtil; |
||||
|
||||
/** |
||||
* 拉取单个手机短信状态类 |
||||
* |
||||
*/ |
||||
class SmsMobileStatusPuller |
||||
{ |
||||
private $url; |
||||
private $appid; |
||||
private $appkey; |
||||
private $util; |
||||
|
||||
/** |
||||
* 构造函数 |
||||
* |
||||
* @param string $appid sdkappid |
||||
* @param string $appkey sdkappid对应的appkey |
||||
*/ |
||||
public function __construct($appid, $appkey) |
||||
{ |
||||
$this->url = "https://yun.tim.qq.com/v5/tlssmssvr/pullstatus4mobile"; |
||||
$this->appid = $appid; |
||||
$this->appkey = $appkey; |
||||
$this->util = new SmsSenderUtil(); |
||||
} |
||||
|
||||
/** |
||||
* 拉取回执结果 |
||||
* |
||||
* @param int $type 拉取类型,0表示回执结果,1表示回复信息 |
||||
* @param string $nationCode 国家码,如 86 为中国 |
||||
* @param string $mobile 不带国家码的手机号 |
||||
* @param int $beginTime 开始时间(unix timestamp) |
||||
* @param int $endTime 结束时间(unix timestamp) |
||||
* @param int $max 拉取最大条数,最多100 |
||||
* @return string 应答json字符串,详细内容参见腾讯云协议文档 |
||||
*/ |
||||
private function pull($type, $nationCode, $mobile, $beginTime, $endTime, $max) |
||||
{ |
||||
$random = $this->util->getRandom(); |
||||
$curTime = time(); |
||||
$wholeUrl = $this->url . "?sdkappid=" . $this->appid . "&random=" . $random; |
||||
|
||||
$data = new \stdClass(); |
||||
$data->sig = $this->util->calculateSigForPuller($this->appkey, $random, $curTime); |
||||
$data->time = $curTime; |
||||
$data->type = $type; |
||||
$data->max = $max; |
||||
$data->begin_time = $beginTime; |
||||
$data->end_time = $endTime; |
||||
$data->nationcode = $nationCode; |
||||
$data->mobile = $mobile; |
||||
|
||||
return $this->util->sendCurlPost($wholeUrl, $data); |
||||
} |
||||
|
||||
/** |
||||
* 拉取回执结果 |
||||
* |
||||
* @param string $nationCode 国家码,如 86 为中国 |
||||
* @param string $mobile 不带国家码的手机号 |
||||
* @param int $beginTime 开始时间(unix timestamp) |
||||
* @param int $endTime 结束时间(unix timestamp) |
||||
* @param int $max 拉取最大条数,最多100 |
||||
* @return string 应答json字符串,详细内容参见腾讯云协议文档 |
||||
*/ |
||||
public function pullCallback($nationCode, $mobile, $beginTime, $endTime, $max) |
||||
{ |
||||
return $this->pull(0, $nationCode, $mobile, $beginTime, $endTime, $max); |
||||
} |
||||
|
||||
/** |
||||
* 拉取回复信息 |
||||
* |
||||
* @param string $nationCode 国家码,如 86 为中国 |
||||
* @param string $mobile 不带国家码的手机号 |
||||
* @param int $beginTime 开始时间(unix timestamp) |
||||
* @param int $endTime 结束时间(unix timestamp) |
||||
* @param int $max 拉取最大条数,最多100 |
||||
* @return string 应答json字符串,详细内容参见腾讯云协议文档 |
||||
*/ |
||||
public function pullReply($nationCode, $mobile, $beginTime, $endTime, $max) |
||||
{ |
||||
return $this->pull(1, $nationCode, $mobile, $beginTime, $endTime, $max); |
||||
} |
||||
} |
Loading…
Reference in new issue