码迷,mamicode.com
首页 > 其他好文 > 详细

laravel+阿里大于实现发送验证码短信

时间:2017-10-05 21:26:14      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:加载   blog   span   错误码   add   官方网站   request   配置   申请   

一、短信服务使用阿里大于提供的短信接口

阿里大于官方网站上的接入流程:

技术分享

在阿里大于申请接口后,需要做以下操作:

  1. 申请签名
  2. 申请短信模板
  3. 创建Accesskey,可以通过权限最大的Accesskey创建子Accesskey,便于权限控制
  4. 充值,如果账户中余额不足的话,是发布出去短信的

二、在laravel中使用阿里大于接口

之前在laravel中使用composer安装阿里大于的扩展包,但是尝试之后,一直返回code=11的错误码,是扩展包的权限不足,具体原因还未找到

然后就在laravel引入官方提供的skd包,下面介绍具体在laravel中使用官方sdk包的过程:

  1. 从官网上下载php版短信服务的skd包,解压后有四个文件夹,分别是:api_demo,api_sdk,msg_demo,msg_sdk
  2. 在laravel中根目录下的 app文件夹下新建一个文件夹 libs,把api_sdk和msg_sdk复制到libs文件夹下.
  3. 利用composer自动加载文件     关于laravel利用composer自动加载介绍,请参考:http://laravelacademy.org/post/7074.html
  4. 找到项目根目录下的composer.json文件,利用composer的classmap选项加载
    技术分享

    然后执行 composer dumpautoload
  5. 代码:
  6.   1 <?php
      2 
      3 
      4     // namespace App\Http\Controllers\sms;
      5 
      6 
      7     use 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+阿里大于实现发送验证码短信

标签:加载   blog   span   错误码   add   官方网站   request   配置   申请   

原文地址:http://www.cnblogs.com/zhuchenglin/p/7629974.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!