有的朋友用阿里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 ?阿里云短信 发送多参数的短信
原文地址:https://www.cnblogs.com/HoverM/p/9282937.html