zoukankan      html  css  js  c++  java
  • laravel+阿里大于实现发送验证码短信

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

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

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

    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. 代码:
      1.   1 <?php
          2 
          3 
          4 
          5   //use 命名空间+类名
          6 
          7     use AliyunCoreConfig;  //命名空间 AliyunCore  类名是 Config  (命名空间不必一定存在)
          8     use AliyunCoreProfileDefaultProfile;
          9     use AliyunCoreDefaultAcsClient;
         10     use AliyunApiSmsRequestV20170525SendSmsRequest;
         11     use AliyunApiSmsRequestV20170525QuerySendDetailsRequest;
         12 
         13 
         14     use AppHttpControllersController;
         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

  • 相关阅读:
    「NOI2018」 你的名字
    「刷题笔记」杂题
    关于~
    「刷题笔记」网络流
    「考试」联赛模拟40-45,晚间小测4-9
    「考试」联赛模拟36-39,noip晚间小测2-3
    「刷题笔记」莫队
    「考试」CSP-S 2020
    「考试」noip模拟9,11,13
    「刷题笔记」概率与期望
  • 原文地址:https://www.cnblogs.com/zhuchenglin/p/7629974.html
Copyright © 2011-2022 走看看