thinkphp5 阿里云短信 发送多参数的短信

Posted 大白驴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp5 阿里云短信 发送多参数的短信相关的知识,希望对你有一定的参考价值。

有的朋友用阿里oss的时候可能会发送多参数的短信,

例如短信模版是  您好${code1},收到您的联系方式${code2},您的地址为${code3},我们会尽快派送。

类似于这样的多参数模版,首先第一关,可能是参数过长,怎么办,直接去阿里申请售后就可以了,和他们反馈一下,然后他们会给你把字数限制解除,然后你就可以传递超过20个字的内容了。

这一步完事,下一步就是接入阿里oss了,首先下载阿里oss的 类包了,去阿里官网下载就可以了,我这里整合的是thinkphp5.下载完成后具体步骤如下

 

1.把下载的包里的api_sdk复制出来,粘贴到框架的extend的目录下,如下图

 

2.然后是控制器这块,我的调用在index模块下的index中,现在我新建一个commoncontroller,里面写阿里的官方方法,代码如下:

<?php
/*
* @Author: Asan阿弎
* @Date:   2016-12-15 17:20:54
* @Last Modified by:   Asan阿弎
* @Last Modified time: 2016-12-24 22:13:09
* +----------------------------------------------------------------------
* | LarryBlogCMS [ AsanCMS网站内容管理系统 ]
* | Copyright (c) 2016-2017 http://www.ggasan.com All rights reserved.
* | Licensed ( http://www.ggasan.com/ )
* | Author: Asan阿弎 <1500226117@qq.com>
* +----------------------------------------------------------------------
*/
namespace app\\index\\controller;

use think\\Controller;
use think\\Session;
use app\\admin\\model\\Userinfo;
use think\\Db;


use Aliyun\\Core\\Config as Alconfig;
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;

class Common extends Controller
{

    /**
     * 默认前端继承
     */
    public function _initialize()
    {
    
     //此处忽略 这里和短信无关
    }

    public static function user()
    {
       //此处无关,请忽略
    }
  
  
  
   //阿里短信函数,$mobile为手机号码,$code为自定义随机数   这个是传递一个参数的
    public function sendMsg($mobile,$code){

        //这里的路径EXTEND_PATH就是指tp5根目录下的extend目录,系统自带常量。alisms为我们复制api_sdk过来后更改的目录名称
        require_once EXTEND_PATH.\'alisms/vendor/autoload.php\';

        Alconfig::load();             //加载区域结点配置

        $accessKeyId = \'去你的阿里云控制面板找下哈\';  //阿里云短信获取的accessKeyId

        $accessKeySecret = \'再去你的控制面板找下吧\';    //阿里云短信获取的accessKeySecret

        //这个个是审核过的模板内容中的变量赋值,记住数组中字符串code要和模板内容中的保持一致
        //比如我们模板中的内容为:你的验证码为:${code},该验证码5分钟内有效,请勿泄漏!
        $templateParam = array("code"=>$code);           //模板变量替换

        $signName = \'这个也是面板里找哦\'; //这个是短信签名,要审核通过

        $templateCode = \'这个同样面板里面找哦\';   //短信模板ID,记得要审核通过的


        //短信API产品名(短信产品名固定,无需修改)
        $product = "Dysmsapi";
        //短信API产品域名(接口地址固定,无需修改)
        $domain = "dysmsapi.aliyuncs.com";
        //暂时不支持多Region(目前仅支持cn-hangzhou请勿修改)
        $region = "cn-hangzhou";

        // 初始化用户Profile实例
        $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
        // 增加服务结点
        DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
        // 初始化AcsClient用于发起请求
        $acsClient= new DefaultAcsClient($profile);

        // 初始化SendSmsRequest实例用于设置发送短信的参数
        $request = new SendSmsRequest();
        // 必填,设置雉短信接收号码
        $request->setPhoneNumbers($mobile);

        // 必填,设置签名名称
        $request->setSignName($signName);

        // 必填,设置模板CODE
        $request->setTemplateCode($templateCode);

        // 可选,设置模板参数
        if($templateParam) {
            $request->setTemplateParam(json_encode($templateParam));
        }

        //发起访问请求
        $acsResponse = $acsClient->getAcsResponse($request);

        //返回请求结果
        $result = json_decode(json_encode($acsResponse),true);
        return $result;
    }
  
   //阿里短信函数,$mobile为手机号码,$code为自定义随机数     这个是传递多个参数的
    public function sendMsg2($mobile,$code){
      
        //这里的路径EXTEND_PATH就是指tp5根目录下的extend目录,系统自带常量。alisms为我们复制api_sdk过来后更改的目录名称
        require_once EXTEND_PATH.\'alisms/vendor/autoload.php\';

        Alconfig::load();             //加载区域结点配置

        $accessKeyId = \'你懂的 ,你的面板里找\';  //阿里云短信获取的accessKeyId

        $accessKeySecret = \'你还是懂的,面板里找\';    //阿里云短信获取的accessKeySecret

        //这个个是审核过的模板内容中的变量赋值,记住数组中字符串code要和模板内容中的保持一致
        //比如我们模板中的内容为:你的验证码为:${code},该验证码5分钟内有效,请勿泄漏!
        $templateParam = array("code"=>$code);           //模板变量替换

        $signName = \'我相信你懂,面板里找\'; //这个是短信签名,要审核通过

       
      
      $templateCode = \'涛声依旧,面板里找\';   //短信模板ID,记得要审核通过的


        //短信API产品名(短信产品名固定,无需修改)
        $product = "Dysmsapi";
        //短信API产品域名(接口地址固定,无需修改)
        $domain = "dysmsapi.aliyuncs.com";
        //暂时不支持多Region(目前仅支持cn-hangzhou请勿修改)
        $region = "cn-hangzhou";

        // 初始化用户Profile实例
        $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
        // 增加服务结点
        DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
        // 初始化AcsClient用于发起请求
        $acsClient= new DefaultAcsClient($profile);

        // 初始化SendSmsRequest实例用于设置发送短信的参数
        $request = new SendSmsRequest();
        // 必填,设置雉短信接收号码
        $request->setPhoneNumbers($mobile);

        // 必填,设置签名名称
        $request->setSignName($signName);

        // 必填,设置模板CODE
        $request->setTemplateCode($templateCode);

        // 可选,设置模板参数
        //if($templateParam) {
        //    $request->setTemplateParam(json_encode($templateParam));
       // }
      
      //这里就是传递多个参数的地方喽 按照我的写法写哦,别写错哦
        $request->setTemplateParam(json_encode(array(  // 短信模板中字段的值
            "consignee"=>$templateParam[\'code\'][\'consignee\'],
            "number"=>$templateParam[\'code\'][\'number\'],
          "code1"=>$templateParam[\'code\'][\'code1\'],
          "code2"=>$templateParam[\'code\'][\'code2\'],
          "code3"=>$templateParam[\'code\'][\'code3\'],
          "code4"=>$templateParam[\'code\'][\'code4\'],
        ), JSON_UNESCAPED_UNICODE));
      
      

        //发起访问请求
        $acsResponse = $acsClient->getAcsResponse($request);

        //返回请求结果
        $result = json_decode(json_encode($acsResponse),true);
        return $result;
    }
  
  
  
  
  
}

3.这里完事,我们看下indexcontroller里是如何调用这个方法的吧

$rp=array("consignee"=>$_POST[\'dsname\'],"number"=>$_POST[\'dsmobile\'],"code1"=>$_POST[\'options1\'],"code2"=>$_POST[\'options2\'],"code3"=>$_POST[\'options3\'],"code4"=>$_POST[\'dsaddress\']);
$result=$this->sendMsg2(\'133123123123\',$rp);

 

4.懂了吧,其他的就不用我说了吧,就这些了 ,有问题群里找我吧。至于view页面的话,就是把你需要的数据信息传递到后台就可以了,要电话传电话,要地址传地址。

以上是关于thinkphp5 阿里云短信 发送多参数的短信的主要内容,如果未能解决你的问题,请参考以下文章

使用阿里云的短信服务发送短信

go 发送短信研究

阿里云发送短信

JAVA实现《阿里云发送短信验证码以及短信通知》

腾讯云的短信接口买过了哪里有接口口文档

阿里云短信验证_基于阿里云OpenAPI实现