laravel+阿里大于实现发送验证码短信
Posted lin_zone
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel+阿里大于实现发送验证码短信相关的知识,希望对你有一定的参考价值。
一、短信服务使用阿里大于提供的短信接口
阿里大于官方网站上的接入流程:
在阿里大于申请接口后,需要做以下操作:
- 申请签名
- 申请短信模板
- 创建Accesskey,可以通过权限最大的Accesskey创建子Accesskey,便于权限控制
- 充值,如果账户中余额不足的话,是发布出去短信的
二、在laravel中使用阿里大于接口
之前在laravel中使用composer安装阿里大于的扩展包,但是尝试之后,一直返回code=11的错误码,是扩展包的权限不足,具体原因还未找到
然后就在laravel引入官方提供的skd包,下面介绍具体在laravel中使用官方sdk包的过程:
- 从官网上下载php版短信服务的skd包,解压后有四个文件夹,分别是:api_demo,api_sdk,msg_demo,msg_sdk
- 在laravel中根目录下的 app文件夹下新建一个文件夹 libs,把api_sdk和msg_sdk复制到libs文件夹下.
- 利用composer自动加载文件 关于laravel利用composer自动加载介绍,请参考:http://laravelacademy.org/post/7074.html
- 找到项目根目录下的composer.json文件,利用composer的classmap选项加载
然后执行 composer dumpautoload
- 代码:
-
1 <?php 2 3 4 5 //use 命名空间+类名 6 7 use Aliyun\\Core\\Config; //命名空间 Aliyun\\Core 类名是 Config (命名空间不必一定存在) 8 use Aliyun\\Core\\Profile\\DefaultProfile; 9 use Aliyun\\Core\\DefaultAcsClient; 10 use Aliyun\\Api\\Sms\\Request\\V20170525\\SendSmsRequest; 11 use Aliyun\\Api\\Sms\\Request\\V20170525\\QuerySendDetailsRequest; 12 13 14 use App\\Http\\Controllers\\Controller; 15 16 17 18 19 // 加载区域结点配置 20 Config::load(); 21 22 23 class SmsController extends Controller 24 { 25 26 27 /** 28 * 构造器 29 * @param string $accessKeyId 必填,AccessKeyId 30 * @param string $accessKeySecret 必填,AccessKeySecret 31 */ 32 public function __construct($accessKeyId="######",$accessKeySecret="#######") 33 { 34 35 36 // 短信API产品名 37 $product = "Dysmsapi"; 38 39 40 // 短信API产品域名 41 $domain = "dysmsapi.aliyuncs.com"; 42 43 44 // 暂时不支持多Region 45 $region = "cn-hangzhou"; 46 47 48 // 服务结点 49 $endPointName = "cn-hangzhou"; 50 51 52 // 初始化用户Profile实例 53 $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret); 54 55 56 // 增加服务结点 57 DefaultProfile::addEndpoint($endPointName, $region, $product, $domain); 58 59 60 // 初始化AcsClient用于发起请求 61 $this->acsClient = new DefaultAcsClient($profile); 62 63 64 } 65 66 67 68 69 /** 70 * 发送短信范例 71 * @param [type] $phoneNumbers 必填, 短信接收号码 72 * @param string $signName 必填, 短信签名,应严格"签名名称"填写, 73 * @param string $templateCode 必填, 短信模板Code,应严格按"模板CODE"填写, 74 * @param [type] $outId 选填, 假如模板中存在变量需要替换则为必填项 75 * @return [type] [description] 76 */ 77 public function sendSms($phoneNumbers,$signName="XX软件",$templateCode="SMS_XXXXXX",$outId=null) 78 { 79 80 81 // 初始化SendSmsRequest实例用于设置发送短信的参数 82 $request = new SendSmsRequest; 83 84 85 // 必填,设置雉短信接收号码 86 $request->setPhoneNumbers($phoneNumbers); 87 88 89 // 必填,设置签名名称 90 $request->setSignName($signName); 91 92 93 // 必填,设置模板CODE 94 $request->setTemplateCode($templateCode); 95 96 97 $num = rand(100000,999999); 98 99 100 // 可选,设置模板参数 101 $request->setTemplateParam(json_encode( 102 Array( 103 "code" => "$num" 104 ) 105 )); 106 107 108 // 可选,设置流水号 109 if($outId) { 110 $request->setOutId($outId); 111 } 112 113 114 // 发起访问请求 115 $acsResponse = $this->acsClient->getAcsResponse($request); 116 117 118 119 120 } 121 122 123 /** 124 * 查询短信发送情况范例 125 * @param [type] $phoneNumbers 必填, 短信接收号码 126 * @param [type] $sendDate 必填,短信发送日期,格式Ymd,支持近30天记录查询 127 * @param integer $pageSize 必填,分页大小 128 * @param integer $currentPage 必填,当前页码 129 * @param [type] $bizId 选填,短信发送流水号 130 * @return [type] [description] 131 */ 132 public function queryDetails($phoneNumbers,$sendDate,$pageSize=10,$currentPage=1,$bizId=null) 133 { 134 135 136 // 初始化QuerySendDetailsRequest实例用于设置短信查询的参数 137 $request = new QuerySendDetailsRequest(); 138 139 140 $request->setPhoneNumber($phoneNumbers); 141 142 143 $request->setSendDate($sendDate); 144 145 146 $request->setPageSize($pageSize); 147 148 149 $request->setCurrentPage($currentPage); 150 151 152 if($bizId) { 153 $request->setBizId($bizId); 154 } 155 156 157 $acsResponse = $this->acsClient->getAcsResponse($request); 158 159 160 } 161 162 163 }
之后用就实例化调用方法就可以了。
-
本文参考:http://blog.csdn.net/lishanleilixin/article/details/78126955
以上是关于laravel+阿里大于实现发送验证码短信的主要内容,如果未能解决你的问题,请参考以下文章