mirror of https://github.com/IoTcat/qcloudsms.git
parent
8ee474a683
commit
17a26ac8f0
25 changed files with 1670 additions and 82 deletions
@ -1,22 +1,12 @@ |
||||
腾讯云短信 PHP SDK Demo |
||||
=== |
||||
腾讯云短信 PHP SDK DEMO |
||||
===== |
||||
|
||||
## 使用 |
||||
|
||||
1. 安装依赖 |
||||
## 使用composer |
||||
|
||||
```sh |
||||
php /path/to/composer install |
||||
``` |
||||
使用composer的项目请参考 `composer` 目录 |
||||
|
||||
2. 配置必要参数,如SDK appid/appkey |
||||
|
||||
```sh |
||||
emacs app.php |
||||
``` |
||||
## 不使用composer |
||||
|
||||
3. 运行 |
||||
|
||||
```sh |
||||
php ./app.php |
||||
``` |
||||
没有使用composer的项目请参考 `simple` 目录 |
||||
|
@ -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,201 @@ |
||||
<?php |
||||
|
||||
require __DIR__ . "/../../src/index.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; |
||||
|
||||
use Qcloud\Sms\VoiceFileUploader; |
||||
use Qcloud\Sms\FileVoiceSender; |
||||
use Qcloud\Sms\TtsVoiceSender; |
||||
|
||||
|
||||
// 短信应用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", $phoneNumbers[0], |
||||
"【腾讯云】您的验证码是: 5678", "", ""); |
||||
$rsp = json_decode($result); |
||||
echo $result; |
||||
} catch(\Exception $e) { |
||||
echo var_dump($e); |
||||
} |
||||
echo "\n"; |
||||
|
||||
|
||||
// 指定模板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); |
||||
} |
||||
echo "\n"; |
||||
|
||||
|
||||
// 群发 |
||||
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); |
||||
} |
||||
echo "\n"; |
||||
|
||||
|
||||
// 指定模板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); |
||||
} |
||||
echo "\n"; |
||||
|
||||
|
||||
// 发送语音验证码 |
||||
try { |
||||
$vvcsender = new SmsVoiceVerifyCodeSender($appid, $appkey); |
||||
$result = $vvcsender->send("86", $phoneNumbers[0], "5678", 2, ""); |
||||
$rsp = json_decode($result); |
||||
echo $result; |
||||
} catch (\Exception $e) { |
||||
echo var_dump($e); |
||||
} |
||||
echo "\n"; |
||||
|
||||
|
||||
// 发送语音通知 |
||||
try { |
||||
$vpsender = new SmsVoicePromptSender($appid, $appkey); |
||||
$result = $vpsender->send("86", $phoneNumbers[0], 2, "5678", ""); |
||||
$rsp = json_decode($result); |
||||
echo $result; |
||||
} catch (\Exception $e) { |
||||
echo var_dump($e); |
||||
} |
||||
echo "\n"; |
||||
|
||||
|
||||
// 拉取短信回执以及回复 |
||||
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); |
||||
} |
||||
echo "\n"; |
||||
|
||||
|
||||
// 拉取单个手机短信状态 |
||||
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); |
||||
} |
||||
echo "\n"; |
||||
|
||||
|
||||
// 上传语音文件 |
||||
try { |
||||
$filepath = "path/to/example.mp3"; |
||||
$fileContent = file_get_contents($filepath); |
||||
if ($fileContent == false) { |
||||
throw new \Exception("can not read file " . $filepath); |
||||
} |
||||
|
||||
$contentType = VoiceFileUploader::MP3; |
||||
$uploader = new VoiceFileUploader($appid, $appkey); |
||||
$result = $uploader->upload($fileContent, $contentType); |
||||
$rsp = json_decode($result); |
||||
echo $result; |
||||
} catch (\Exception $e) { |
||||
echo var_dump($e); |
||||
} |
||||
echo "\n"; |
||||
|
||||
|
||||
// 按语音文件fid发送语音通知 |
||||
try { |
||||
$fid = "73844bb649ca38f37e596ec2781ce6a56a2a3a1b.mp3"; |
||||
|
||||
$fvsender = new FileVoiceSender($appid, $appkey); |
||||
$result = $fvsender->send("86", $phoneNumbers[0], $fid); |
||||
|
||||
$rsp = json_decode($result); |
||||
echo $result; |
||||
} catch (\Exception $e) { |
||||
echo var_dump($e); |
||||
} |
||||
echo "\n"; |
||||
|
||||
|
||||
// 指定模板发送语音通知类 |
||||
try { |
||||
$templateId = 1013; |
||||
$params = ["54321"]; |
||||
|
||||
$tvsender = new TtsVoiceSender($appid, $appkey); |
||||
$result = $tvsender->send("86", $phoneNumbers[0], $templateId, $params); |
||||
|
||||
$rsp = json_decode($result); |
||||
echo $result; |
||||
} catch (\Exception $e) { |
||||
echo var_dump($e); |
||||
} |
||||
echo "\n"; |
@ -0,0 +1,231 @@ |
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8" /> |
||||
<meta name="robots" content="index, follow, all" /> |
||||
<title>Qcloud\Sms\FileVoiceSender | 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_FileVoiceSender" 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>FileVoiceSender</li> |
||||
</ol> |
||||
</div> |
||||
<div id="page-content"> |
||||
|
||||
<div class="page-header"> |
||||
<h1> |
||||
FileVoiceSender |
||||
|
||||
</h1> |
||||
</div> |
||||
|
||||
<p> class |
||||
<strong>FileVoiceSender</strong> |
||||
</p> |
||||
|
||||
|
||||
|
||||
|
||||
<div class="description"> |
||||
<p>按语音文件fid发送语音通知类</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_send">send</a>(string $nationCode, string $phoneNumber, string $fid, string $playtimes = 2, string $ext = "") |
||||
|
||||
<p>按语音文件fid发送语音通知</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 25</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_send"> |
||||
<div class="location">at line 44</div> |
||||
<code> string |
||||
<strong>send</strong>(string $nationCode, string $phoneNumber, string $fid, string $playtimes = 2, string $ext = "") |
||||
</code> |
||||
</h3> |
||||
<div class="details"> |
||||
|
||||
|
||||
|
||||
<div class="method-description"> |
||||
<p>按语音文件fid发送语音通知</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>$phoneNumber</td> |
||||
<td>不带国家码的手机号</td> |
||||
</tr> |
||||
<tr> |
||||
<td>string</td> |
||||
<td>$fid</td> |
||||
<td>语音文件fid</td> |
||||
</tr> |
||||
<tr> |
||||
<td>string</td> |
||||
<td>$playtimes</td> |
||||
<td>播放次数,可选,最多3次,默认2次</td> |
||||
</tr> |
||||
<tr> |
||||
<td>string</td> |
||||
<td>$ext</td> |
||||
<td>用户的session内容,服务端原样返回,可选字段,不需要可填空串</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> |
@ -0,0 +1,236 @@ |
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8" /> |
||||
<meta name="robots" content="index, follow, all" /> |
||||
<title>Qcloud\Sms\TtsVoiceSender | 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_TtsVoiceSender" 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>TtsVoiceSender</li> |
||||
</ol> |
||||
</div> |
||||
<div id="page-content"> |
||||
|
||||
<div class="page-header"> |
||||
<h1> |
||||
TtsVoiceSender |
||||
|
||||
</h1> |
||||
</div> |
||||
|
||||
<p> class |
||||
<strong>TtsVoiceSender</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_send">send</a>(string $nationCode, string $phoneNumber, int $templId, array $params, string $playtimes = 2, string $ext = "") |
||||
|
||||
<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 25</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_send"> |
||||
<div class="location">at line 45</div> |
||||
<code> string |
||||
<strong>send</strong>(string $nationCode, string $phoneNumber, int $templId, array $params, string $playtimes = 2, string $ext = "") |
||||
</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>$phoneNumber</td> |
||||
<td>不带国家码的手机号</td> |
||||
</tr> |
||||
<tr> |
||||
<td>int</td> |
||||
<td>$templId</td> |
||||
<td>模板 id</td> |
||||
</tr> |
||||
<tr> |
||||
<td>array</td> |
||||
<td>$params</td> |
||||
<td>模板参数列表,如模板 {1}...{2}...{3},需要带三个参数</td> |
||||
</tr> |
||||
<tr> |
||||
<td>string</td> |
||||
<td>$playtimes</td> |
||||
<td>播放次数,可选,最多3次,默认2次</td> |
||||
</tr> |
||||
<tr> |
||||
<td>string</td> |
||||
<td>$ext</td> |
||||
<td>用户的session内容,服务端原样返回,可选字段,不需要可填空串</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> |
@ -0,0 +1,235 @@ |
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8" /> |
||||
<meta name="robots" content="index, follow, all" /> |
||||
<title>Qcloud\Sms\VoiceFileUploader | 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_VoiceFileUploader" 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>VoiceFileUploader</li> |
||||
</ol> |
||||
</div> |
||||
<div id="page-content"> |
||||
|
||||
<div class="page-header"> |
||||
<h1> |
||||
VoiceFileUploader |
||||
|
||||
</h1> |
||||
</div> |
||||
|
||||
<p> class |
||||
<strong>VoiceFileUploader</strong> |
||||
</p> |
||||
|
||||
|
||||
|
||||
|
||||
<div class="description"> |
||||
<p>上传语音文件类</p> </div> |
||||
|
||||
|
||||
<h2>Constants</h2> |
||||
|
||||
<table class="table table-condensed"> |
||||
<tr> |
||||
<td>WAV</td> |
||||
<td class="last"> |
||||
<p><em></em></p> |
||||
<p></p> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td>MP3</td> |
||||
<td class="last"> |
||||
<p><em></em></p> |
||||
<p></p> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
|
||||
|
||||
<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_upload">upload</a>(string $fileContent, string $contentType) |
||||
|
||||
<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 28</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_upload"> |
||||
<div class="location">at line 44</div> |
||||
<code> string |
||||
<strong>upload</strong>(string $fileContent, string $contentType) |
||||
</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>$fileContent</td> |
||||
<td>语音文件内容</td> |
||||
</tr> |
||||
<tr> |
||||
<td>string</td> |
||||
<td>$contentType</td> |
||||
<td>语音文件类型,目前支持 VoiceFileUploader::WAV 和 VoiceFileUploader::MP3</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 @@ |
||||
4.0.10 |
||||
4.0.14-DEV |
@ -1 +1 @@ |
||||
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";}}} |
||||
C:19:"Sami\Renderer\Index":931:{a:3:{i:0;a:10:{s:26:"Qcloud\Sms\FileVoiceSender";s:40:"6978e1650c392e9510bf514da5672b28050e95f7";s:32:"Qcloud\Sms\SmsMobileStatusPuller";s:40:"728a70f32eddaa9ce779996e17f2f972119b180d";s:25:"Qcloud\Sms\SmsMultiSender";s:40:"5d26b947eeb83e52b11dda40d71d2d61200ce024";s:24:"Qcloud\Sms\SmsSenderUtil";s:40:"caf29c3ee6375b8aaeb59f0a1bb1d8aca124ef47";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";s:25:"Qcloud\Sms\TtsVoiceSender";s:40:"2450011b4197396ad9310c9c313fde11de00aa8e";s:28:"Qcloud\Sms\VoiceFileUploader";s:40:"af402449d620dc0b886a327fd81e062095efd3f2";}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,4 @@ |
||||
#!/bin/bash |
||||
|
||||
composer install |
||||
php ./vendor/sami/sami/sami.php update ./sami_config.php -v |
@ -0,0 +1,69 @@ |
||||
<?php |
||||
|
||||
namespace Qcloud\Sms; |
||||
|
||||
use Qcloud\Sms\SmsSenderUtil; |
||||
|
||||
|
||||
/** |
||||
* 按语音文件fid发送语音通知类 |
||||
* |
||||
*/ |
||||
class FileVoiceSender |
||||
{ |
||||
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://cloud-test.tim.qq.com/v5/tlsvoicesvr/sendfvoice"; |
||||
$this->appid = $appid; |
||||
$this->appkey = $appkey; |
||||
$this->util = new SmsSenderUtil(); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* 按语音文件fid发送语音通知 |
||||
* |
||||
* @param string $nationCode 国家码,如 86 为中国 |
||||
* @param string $phoneNumber 不带国家码的手机号 |
||||
* @param string $fid 语音文件fid |
||||
* @param string $playtimes 播放次数,可选,最多3次,默认2次 |
||||
* @param string $ext 用户的session内容,服务端原样返回,可选字段,不需要可填空串 |
||||
* @return string 应答json字符串,详细内容参见腾讯云协议文档 |
||||
*/ |
||||
public function send($nationCode, $phoneNumber, $fid, $playtimes = 2, $ext = "") |
||||
{ |
||||
$random = $this->util->getRandom(); |
||||
$curTime = time(); |
||||
$wholeUrl = $this->url . "?sdkappid=" . $this->appid . "&random=" . $random; |
||||
|
||||
// 按照协议组织 post 包体 |
||||
$data = new \stdClass(); |
||||
$tel = new \stdClass(); |
||||
$tel->nationcode = "".$nationCode; |
||||
$tel->mobile = "".$phoneNumber; |
||||
$data->tel = $tel; |
||||
$data->fid = $fid; |
||||
$data->playtimes = $playtimes; |
||||
|
||||
// app凭证 |
||||
$data->sig = $this->util->calculateSig($this->appkey, $random, |
||||
$curTime, [$phoneNumber]); |
||||
|
||||
// unix时间戳,请求发起时间,如果和系统时间相差超过10分钟则会返回失败 |
||||
$data->time = $curTime; |
||||
$data->ext = $ext; |
||||
|
||||
return $this->util->sendCurlPost($wholeUrl, $data); |
||||
} |
||||
} |
@ -0,0 +1,71 @@ |
||||
<?php |
||||
|
||||
namespace Qcloud\Sms; |
||||
|
||||
use Qcloud\Sms\SmsSenderUtil; |
||||
|
||||
|
||||
/** |
||||
* 指定模板发送语音通知类 |
||||
* |
||||
*/ |
||||
class TtsVoiceSender |
||||
{ |
||||
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://cloud-test.tim.qq.com/v5/tlsvoicesvr/sendtvoice"; |
||||
$this->appid = $appid; |
||||
$this->appkey = $appkey; |
||||
$this->util = new SmsSenderUtil(); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* 指定模板发送语音短信 |
||||
* |
||||
* @param string $nationCode 国家码,如 86 为中国 |
||||
* @param string $phoneNumber 不带国家码的手机号 |
||||
* @param int $templId 模板 id |
||||
* @param array $params 模板参数列表,如模板 {1}...{2}...{3},需要带三个参数 |
||||
* @param string $playtimes 播放次数,可选,最多3次,默认2次 |
||||
* @param string $ext 用户的session内容,服务端原样返回,可选字段,不需要可填空串 |
||||
* @return string 应答json字符串,详细内容参见腾讯云协议文档 |
||||
*/ |
||||
public function send($nationCode, $phoneNumber, $templId, $params, $playtimes = 2, $ext = "") |
||||
{ |
||||
$random = $this->util->getRandom(); |
||||
$curTime = time(); |
||||
$wholeUrl = $this->url . "?sdkappid=" . $this->appid . "&random=" . $random; |
||||
|
||||
// 按照协议组织 post 包体 |
||||
$data = new \stdClass(); |
||||
$tel = new \stdClass(); |
||||
$tel->nationcode = "".$nationCode; |
||||
$tel->mobile = "".$phoneNumber; |
||||
$data->tel = $tel; |
||||
$data->tpl_id = $templId; |
||||
$data->params = $params; |
||||
$data->playtimes = $playtimes; |
||||
|
||||
// app凭证 |
||||
$data->sig = $this->util->calculateSig($this->appkey, $random, |
||||
$curTime, [$phoneNumber]); |
||||
|
||||
// unix时间戳,请求发起时间,如果和系统时间相差超过10分钟则会返回失败 |
||||
$data->time = $curTime; |
||||
$data->ext = $ext; |
||||
|
||||
return $this->util->sendCurlPost($wholeUrl, $data); |
||||
} |
||||
} |
@ -0,0 +1,66 @@ |
||||
<?php |
||||
|
||||
namespace Qcloud\Sms; |
||||
|
||||
use Qcloud\Sms\SmsSenderUtil; |
||||
|
||||
|
||||
/** |
||||
* 上传语音文件类 |
||||
* |
||||
*/ |
||||
class VoiceFileUploader |
||||
{ |
||||
private $url; |
||||
private $appid; |
||||
private $appkey; |
||||
private $util; |
||||
|
||||
public const WAV = "audio/wav"; |
||||
public const MP3 = "audio/mpeg"; |
||||
|
||||
/** |
||||
* 构造函数 |
||||
* |
||||
* @param string $appid sdkappid |
||||
* @param string $appkey sdkappid对应的appkey |
||||
*/ |
||||
public function __construct($appid, $appkey) |
||||
{ |
||||
$this->url = "https://cloud-test.tim.qq.com/v5/tlsvoicesvr/uploadvoicefile"; |
||||
$this->appid = $appid; |
||||
$this->appkey = $appkey; |
||||
$this->util = new SmsSenderUtil(); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* 上传语音文件 |
||||
* |
||||
* @param string $fileContent 语音文件内容 |
||||
* @param string $contentType 语音文件类型,目前支持 VoiceFileUploader::WAV 和 VoiceFileUploader::MP3 |
||||
* @return string 应答json字符串,详细内容参见腾讯云协议文档 |
||||
*/ |
||||
public function upload($fileContent, $contentType) |
||||
{ |
||||
assert($contentType == self::WAV || $contentType == self::MP3); |
||||
|
||||
$random = $this->util->getRandom(); |
||||
$curTime = time(); |
||||
$fileSha1Sum = $this->util->sha1sum($fileContent); |
||||
$auth = $this->util->calculateAuth($this->appkey, $random, |
||||
$curTime, $fileSha1Sum); |
||||
|
||||
$req = new \stdClass(); |
||||
$req->url = $this->url . "?sdkappid=" . $this->appid |
||||
. "&random=" . $random . "&time=" . $curTime; |
||||
$req->body = $fileContent; |
||||
$req->headers = [ |
||||
"Content-Type: " . $contentType, |
||||
"x-content-sha1: " . $fileSha1Sum, |
||||
"Authorization: " . $auth |
||||
]; |
||||
|
||||
return $this->util->fetch($req); |
||||
} |
||||
} |
@ -0,0 +1,13 @@ |
||||
<?php |
||||
|
||||
require_once __DIR__ . "/SmsSenderUtil.php"; |
||||
require_once __DIR__ . "/SmsSingleSender.php"; |
||||
require_once __DIR__ . "/SmsMultiSender.php"; |
||||
require_once __DIR__ . "/SmsStatusPuller.php"; |
||||
require_once __DIR__ . "/SmsMobileStatusPuller.php"; |
||||
require_once __DIR__ . "/SmsVoicePromptSender.php"; |
||||
require_once __DIR__ . "/SmsVoiceVerifyCodeSender.php"; |
||||
|
||||
require_once __DIR__ . "/VoiceFileUploader.php"; |
||||
require_once __DIR__ . "/FileVoiceSender.php"; |
||||
require_once __DIR__ . "/TtsVoiceSender.php"; |
Loading…
Reference in new issue