ThinkPHP5.0集成阿里大于发送短信验证码
1.登录阿里云管理控制台,找到短信服务,AccessKey ID、Access Key Secret两个参数,在下面这个地方可以找到:
2.添加一个短信签名,为短信内容开头的发送方标识,如:【李维山】您的验证码是6666......
3.添加一个短信模板,为短信的主题内容,其中的变量,如验证码,用 ${xxx} 替换:
4.下载PHP的demo,这里用的是旧版的,新版的才出来没几天好像
下载解压后把api_sdk文件夹拿出来,放到了tp5的extend目录下重命名为aliyun-sms:
再把api_demo文件夹下的SmsDemo.php拿出来,放到了tp5的application/common目录下,重命名为AliSms.php:
5.修改AliSms.php,包括命名空间、require路径、以及AccessKey ID、Access Key Secret两个参数改为自己的:
<?php
namespace app\common;
ini_set("display_errors", "on");
require_once APP_PATH . '/../extend/aliyun-sms/vendor/autoload.php';
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
use Aliyun\Api\Sms\Request\V20170525\SendBatchSmsRequest;
use Aliyun\Api\Sms\Request\V20170525\QuerySendDetailsRequest;
// 加载区域结点配置
Config::load();
/**
* Class SmsDemo
*
* 这是短信服务API产品的DEMO程序,直接执行此文件即可体验短信服务产品API功能
* (只需要将AK替换成开通了云通信-短信服务产品功能的AK即可)
* 备注:Demo工程编码采用UTF-8
*/
class AliSms
{
}
修改发送短信的方法stdClass:(包括手机号和验证码赋予变量、签名和模板换为自己的)
/**
* 发送短信
* @param $phone int 手机号
* @param $code int 验证码
* @return stdClass
*/
public static function sendSms($phone, $code) {
// 初始化SendSmsRequest实例用于设置发送短信的参数
$request = new SendSmsRequest();
//可选-启用https协议
//$request->setProtocol("https");
// 必填,设置短信接收号码
$request->setPhoneNumbers($phone);
// 必填,设置签名名称,应严格按"签名名称"填写,请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
$request->setSignName("李维山");
// 必填,设置模板CODE,应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
$request->setTemplateCode("SMS_153992488");
// 可选,设置模板参数, 假如模板中存在变量需要替换则为必填项
$request->setTemplateParam(json_encode(array( // 短信模板中字段的值
"code" => $code,
//"product" => "dsd"
), JSON_UNESCAPED_UNICODE));
// 选填,上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
$request->setSmsUpExtendCode("1234567");
// 发起访问请求
$acsResponse = static::getAcsClient()->getAcsResponse($request);
return $acsResponse;
}
6.发送短信时调用AliSms工具类:
<?php
namespace app\index\controller;
use think\Controller;
use app\common\AliSms;
class Test extends Controller
{
public function sendsms()
{
$arr = ['code'=>0,'msg'=>'发送失败!'];
$phone = input('post.phone');
$code = rand(1000, 9999);
$res = AliSms::sendSms($phone, $code);
if($res->Code === "OK") {
//省略业务逻辑......
$arr['code'] = 200;
$arr['msg'] = '发送成功!';
}
return json($arr);
}
}