阿里云短信接口开发
阿里云短信接口开发
1 开发准备... 2
1.1 签名名称... 2
1.2 模版CODE. 2
1.3 获取阿里云访问密钥... 2
1.4 下载PHP开发demo. 3
2 部署文件(最难最关键的一步) 4
2.1 复制文件到项目中... 4
2.2 具体调用代码... 5
2.3 注意事项... 19
2.3.1 短信模板变量的查看,和在调用短信发送的接口要一致,否则报错缺少模板变量... 19
2.3.2 更改模板,需更改对应的模板变量... 20
2.3.3 短信签名的查看... 20
1 开发准备
1.1 签名名称
1.2 模版CODE
1.3 获取阿里云访问密钥
1.4 下载PHP开发demo
2 部署文件(最难最关键的一步)
2.1 复制文件到项目中
把这个文件复制到你的项目中,具体放在那里,根据你调用的文件来放在。
2.2 具体调用代码
1 <?php
2 // 阿里云短信发送接口
3 use Aliyun\Core\Config;
4 use Aliyun\Core\Profile\DefaultProfile;
5 use Aliyun\Core\DefaultAcsClient;
6 use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
7 use Aliyun\Api\Sms\Request\V20170525\QuerySendDetailsRequest;
8
9 if($act == 'getVrifyCode'){
10 //接收参数
11 $phone = isset($_REQUEST['phone']) ? $_REQUEST['phone'] : '';
12
13 if($phone){
14 //检测电话号码
15 if (!is_numeric($phone) || ! $function->validate_phone($phone))
16 {
17 $result = array(
18 'code' => 200,
19 'msg' => '请输入正确的手机号',
20 'success' => 0,
21 'data' => array(),
22 );
23 //返回数据
24 echo json_encode($result);
25 exit;
26 }
27
28 //开始发送短信
29
30 ini_set("display_errors", "on");
31
32 require_once dirname(__DIR__) . '/api_sdk/vendor/autoload.php';
33
34
35 // 加载区域结点配置
36 Config::load();
37
38 /**
39 * Class SmsDemo
40 *
41 * @property \Aliyun\Core\DefaultAcsClient acsClient
42 */
43 class SmsDemo
44 {
45
46 /**
47 * 构造器
48 *
49 * @param string $accessKeyId 必填,AccessKeyId
50 * @param string $accessKeySecret 必填,AccessKeySecret
51 */
52 public function __construct($accessKeyId, $accessKeySecret)
53 {
54
55 // 短信API产品名
56 $product = "Dysmsapi";
57
58 // 短信API产品域名
59 $domain = "dysmsapi.aliyuncs.com";
60
61 // 暂时不支持多Region
62 $region = "cn-hangzhou";
63
64 // 服务结点
65 $endPointName = "cn-hangzhou";
66
67 // 初始化用户Profile实例
68 $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
69
70 // 增加服务结点
71 DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
72
73 // 初始化AcsClient用于发起请求
74 $this->acsClient = new DefaultAcsClient($profile);
75 }
76
77 /**
78 * 发送短信范例
79 *
80 * @param string $signName <p>
81 * 必填, 短信签名,应严格"签名名称"填写,参考:<a href="https://dysms.console.aliyun.com/dysms.htm#/sign">短信签名页</a>
82 * </p>
83 * @param string $templateCode <p>
84 * 必填, 短信模板Code,应严格按"模板CODE"填写, 参考:<a href="https://dysms.console.aliyun.com/dysms.htm#/template">短信模板页</a>
85 * (e.g. SMS_0001)
86 * </p>
87 * @param string $phoneNumbers 必填, 短信接收号码 (e.g. 12345678901)
88 * @param array|null $templateParam <p>
89 * 选填, 假如模板中存在变量需要替换则为必填项 (e.g. Array("code"=>"12345", "product"=>"阿里通信"))
90 * </p>
91 * @param string|null $outId [optional] 选填, 发送短信流水号 (e.g. 1234)
92 * @return stdClass
93 */
94 public function sendSms($signName, $templateCode, $phoneNumbers, $templateParam = null, $outId = null) {
95
96 // 初始化SendSmsRequest实例用于设置发送短信的参数
97 $request = new SendSmsRequest();
98
99 // 必填,设置雉短信接收号码
100 $request->setPhoneNumbers($phoneNumbers);
101
102 // 必填,设置签名名称
103 $request->setSignName($signName);
104
105 // 必填,设置模板CODE
106 $request->setTemplateCode($templateCode);
107
108 // 可选,设置模板参数
109 if($templateParam) {
110 $request->setTemplateParam(json_encode($templateParam));
111 }
112
113 // 可选,设置流水号
114 if($outId) {
115 $request->setOutId($outId);
116 }
117
118 // 发起访问请求
119 $acsResponse = $this->acsClient->getAcsResponse($request);
120
121 // 打印请求结果
122 // var_dump($acsResponse);
123
124 return $acsResponse;
125
126 }
127
128 /**
129 * 查询短信发送情况范例
130 *
131 * @param string $phoneNumbers 必填, 短信接收号码 (e.g. 12345678901)
132 * @param string $sendDate 必填,短信发送日期,格式Ymd,支持近30天记录查询 (e.g. 20170710)
133 * @param int $pageSize 必填,分页大小
134 * @param int $currentPage 必填,当前页码
135 * @param string $bizId 选填,短信发送流水号 (e.g. abc123)
136 * @return stdClass
137 */
138 public function queryDetails($phoneNumbers, $sendDate, $pageSize = 10, $currentPage = 1, $bizId=null) {
139
140 // 初始化QuerySendDetailsRequest实例用于设置短信查询的参数
141 $request = new QuerySendDetailsRequest();
142
143 // 必填,短信接收号码
144 $request->setPhoneNumber($phoneNumbers);
145
146 // 选填,短信发送流水号
147 $request->setBizId($bizId);
148
149 // 必填,短信发送日期,支持近30天记录查询,格式Ymd
150 $request->setSendDate($sendDate);
151
152 // 必填,分页大小
153 $request->setPageSize($pageSize);
154
155 // 必填,当前页码
156 $request->setCurrentPage($currentPage);
157
158 // 发起访问请求
159 $acsResponse = $this->acsClient->getAcsResponse($request);
160
161 // 打印请求结果
162 // var_dump($acsResponse);
163
164 return $acsResponse;
165 }
166
167 }
168
169 // 调用示例:
170
171 header('Content-Type: text/plain; charset=utf-8');
172
173
174 //此处需要替换成自己的AK信息
175 $accessKeyId = "LTAxfdsdfdsWb";//参考本文档步骤2
176 $accessKeySecret = "TJOENXdsafasdfasdfasdfaA3LZ";//参考本文档步骤2
177
178
179 $demo = new SmsDemo(
180 "LTAsadfsadfasZSokWb",
181 "TJOENsadfsadfsadfgrtbFjgA3LZ"
182 );
183
184 // echo "SmsDemo::sendSms\n";
185
186 $generate_code=rand(1000, 9999);
187
188 $customer ='--短信测试专用--';
189 注意:模板变量,具体是根据,短信类型里面确定的,比如 'code'=>$generate_code, 是来发送短信验证码的,每一个都不一样。
190 $response = $demo->sendSms(
191 "阿里云短信测试专用", // 短信签名
192 "SMS_100960133", // 短信模板编号
193 "$phone", // 短信接收者
194 Array( // 短信模板中字段的值
195 'customer'=>$customer,
196 // 'code'=>$generate_code,
197
198 )
199 );
200
201 $return_code = $response->Code;
202 $return_Message = $response->Message;
203
204 if($return_code == 'OK' && $return_Message == 'OK'){
205
206 $result = array(
207 'code' => 200,
208 'msg' => '发送短信验证码成功',
209 'success' => 1,
210 'data' => array('code'=>$generate_code),
211 );
212 //返回数据
213 echo json_encode($result);
214 exit;
215 }else{
216
217 $result = array(
218 'code' => 200,
219 'msg' => '发送短信验证码失败',
220 'success' => 0,
221 'data' => array(),
222 );
223 //返回数据
224 echo json_encode($result);
225 exit;
226 }
227
228
229 //
230 // echo "SmsDemo::queryDetails\n";
231 // $response = $demo->queryDetails(
232 // "12345678901", // phoneNumbers 电话号码
233 // "20170718", // sendDate 发送时间
234 // 10, // pageSize 分页大小
235 // 1 // currentPage 当前页码
236 // // "abcd" // bizId 短信发送流水号,选填
237 // );
238 //
239
240
241
242 }else{
243 //电话号码必须
244
245 $result = array(
246 'code' => 200,
247 'msg' => '请输入电话号码',
248 'success' => 0,
249 'data' => array(),
250 );
251 //返回数据
252 echo json_encode($result);
253 exit;
254
255 }
256
257 }
2.3.1 短信模板变量的查看,和在调用短信发送的接口要一致,否则报错缺少模板变量2.3 注意事项
此处就是code 调用是就填写code
代码如下:
$response = $demo->sendSms(
"阿里云短信测试专用", // 短信签名
"SMS_100960133", // 短信模板编号
"$phone", // 短信接收者
Array( // 短信模板中字段的值
'code'=>$generate_code,
)
);
2.3.2 更改模板,需更改对应的模板变量
$response = $demo->sendSms(
"阿里云短信测试专用", // 短信签名
"SMS_100960133", // 短信模板编号
"$phone", // 短信接收者
Array( // 短信模板中字段的值
'customer'=>$customer,
)
);
2.3.3 短信签名的查看
此处的短信签名就是数组中的短信签名: "阿里云短信测试专用", // 短信签名
上面代码来自于互联网,自己修改后的。感谢无私奉献的IT开发者。西二旗老码农!