forked from sunmking/yii2-dysms
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSms.php
174 lines (146 loc) · 5.53 KB
/
Sms.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<?php
namespace saviorlv\aliyun;
ini_set("display_errors", "on");
use saviorlv\aliyun\Core\Config;
use saviorlv\aliyun\Core\Profile\DefaultProfile;
use saviorlv\aliyun\Core\DefaultAcsClient;
use saviorlv\aliyun\Api\Sms\Request\SendSmsRequest;
use saviorlv\aliyun\Api\Sms\Request\QuerySendDetailsRequest;
use yii\base\Component;
use yii\base\InvalidConfigException;
// 加载区域结点配置
Config::load();
/**
* 阿里大鱼SDK
* User: saviorlv
* Date: 17/10/23
* Time: 上午11:54
* @property \saviorlv\aliyun\Core\DefaultAcsClient acsClient
*/
class Sms extends Component
{
// 短信API产品名
private $product = "Dysmsapi";
// 短信API产品域名
private $domain = "dysmsapi.aliyuncs.com";
// 暂时不支持多Region
private $region = "cn-hangzhou";
// 服务结点
private $endPointName = "cn-hangzhou";
// accessKeyId
public $accessKeyId;
// accessKeySecret
public $accessKeySecret;
// aceClient
private $acsClient;
/**
* [init description]
* @return [type] [description]
*/
public function init(){
parent::init(); // TODO: Change the autogenerated stub
if(!$this->accessKeyId){
throw new InvalidConfigException('accessKeyId can not be blank.');
}
if(!$this->accessKeySecret){
throw new InvalidConfigException('accessKeySecret can not be blank.');
}
// 初始化用户Profile实例
$profile = DefaultProfile::getProfile($this->region, $this->accessKeyId, $this->accessKeySecret);
// 增加服务结点
DefaultProfile::addEndpoint($this->endPointName, $this->region, $this->product, $this->domain);
// 初始化AcsClient用于发起请求
$this->acsClient = new DefaultAcsClient($profile);
}
/**
* 发送短信范例
*
* @param string $signName <p>
* 必填, 短信签名,应严格"签名名称"填写,参考:<a href="https://dysms.console.aliyun.com/dysms.htm#/sign">短信签名页</a>
* </p>
* @param string $templateCode <p>
* 必填, 短信模板Code,应严格按"模板CODE"填写, 参考:<a href="https://dysms.console.aliyun.com/dysms.htm#/template">短信模板页</a>
* (e.g. SMS_0001)
* </p>
* @param string $phoneNumbers 必填, 短信接收号码 (e.g. 12345678901)
* @param array|null $templateParam <p>
* 选填, 假如模板中存在变量需要替换则为必填项 (e.g. Array("code"=>"12345", "product"=>"阿里通信"))
* </p>
* @param string|null $outId [optional] 选填, 发送短信流水号 (e.g. 1234)
* @return stdClass
*/
public function sendSms($signName, $templateCode, $phoneNumbers, $templateParam = null, $outId = null) {
// 初始化SendSmsRequest实例用于设置发送短信的参数
$request = new SendSmsRequest();
// 必填,设置雉短信接收号码
$request->setPhoneNumbers($phoneNumbers);
// 必填,设置签名名称
$request->setSignName($signName);
// 必填,设置模板CODE
$request->setTemplateCode($templateCode);
// 可选,设置模板参数
if($templateParam) {
$request->setTemplateParam(json_encode($templateParam));
}
// 可选,设置流水号
if($outId) {
$request->setOutId($outId);
}
// 发起访问请求
$acsResponse = $this->acsClient->getAcsResponse($request);
// 打印请求结果
$acsResponse = self::object_array($acsResponse);
if(array_key_exists('Message', $acsResponse) && $acsResponse['Code']=='OK'){
return json_encode([
'code' => 200,
'message' => '验证码发送成功'
]);
}
return Utils::result($acsResponse);
//return $acsResponse;
}
/**
* 查询短信发送情况范例
*
* @param string $phoneNumbers 必填, 短信接收号码 (e.g. 12345678901)
* @param string $sendDate 必填,短信发送日期,格式Ymd,支持近30天记录查询 (e.g. 20170710)
* @param int $pageSize 必填,分页大小
* @param int $currentPage 必填,当前页码
* @param string $bizId 选填,短信发送流水号 (e.g. abc123)
* @return stdClass
*/
public function queryDetails($phoneNumbers, $sendDate, $pageSize = 10, $currentPage = 1, $bizId=null) {
// 初始化QuerySendDetailsRequest实例用于设置短信查询的参数
$request = new QuerySendDetailsRequest();
// 必填,短信接收号码
$request->setPhoneNumber($phoneNumbers);
// 选填,短信发送流水号
$request->setBizId($bizId);
// 必填,短信发送日期,支持近30天记录查询,格式Ymd
$request->setSendDate($sendDate);
// 必填,分页大小
$request->setPageSize($pageSize);
// 必填,当前页码
$request->setCurrentPage($currentPage);
// 发起访问请求
$acsResponse = $this->acsClient->getAcsResponse($request);
// 打印请求结果
// var_dump($acsResponse);
return $acsResponse;
}
/**
* 对象转数组
* @param $array
* @return array
*/
public static function object_array($array) {
if(is_object($array)) {
$array = (array)$array;
} if(is_array($array)) {
foreach($array as $key=>$value) {
$array[$key] = self::object_array($value);
}
}
return $array;
}
}