作者:廖飞-CRMEB小程序商城研发项目负责人前言Cremb小程序商城v4.0版本支持短信平台为云信,但部分用户需要连接阿里云短信。本文将详细讲解如何对接阿里云短信平台及对接流程。开通阿里云短信1.首先登录阿里云后台找到短信服务,点击控制台-进入短信服务2.点击国内新闻右侧的添加签名按钮,填写申请签名必填项3.申请模板3.1点击添加模板,进入添加模板页面3.2选择模板类型,填写模板名称,模板类型可以选择常用模板库中的内容。3.3等待签名和模板审核通过。添加阿里云短信驱动驱动详细架构过程可以参考:http://help.crmeb.net/crmeb-v...1.修改CRMEB小程序mall/config/sms.php文件第44行添加阿里云对应驱动方法和模板idreturn[...'stores'=>[//云信'yunxin'=>[...],//阿里云添加阿里云驱动'aliyun'=>[//这里填写阿里的cloudtemplateid可以对应运行模板的名字,方便开发'template_id'=>[]]]];通过作曲家安装SDK2。在项目根目录下打开命令行输入:composerrequirealibabacloud/client回车安装SDK注意:如果提示composer不是命令,请先安装composer并添加阿里云短信发送类1.创建一个新建文件crmeb\services\sms\storage\Aliyun.php*@day:2020/8/19*/namespacecrmeb\services\sms\storage;使用crmeb\basic\BaseSms;使用AlibabaCloud\Client\AlibabaCloud;使用AlibabaCloud\Client\Exception\ClientException;使用AlibabaCloud\Client\Exception\ServerException;使用think\exception\ValidateException;/***阿里云短信发送*Aliyun类*@packagecrmeb\services\sms\storage*/classAliyunextendsBaseSms{/***AccessKeyId*@varstring*/protected$accessKeyId;/***AccessKeySecret*@varstring*/protected$accessKeySecret;/***signature*@varstring*/protected$signName;/***区域默认杭州*@varstring*/protected$regionId='cn-hangzhou';/***初始化*@paramarray$config*@returnmixed|void*/protectedfunctioninitialize(array$config){parent::initialize($config);//TODO:更改自动生成的存根$this->accessKeyId=$config['accessKeyId']??无效的;$this->accessKeySecret=$config['accessKeySecret']??无效的;$this->signName=$config['signName']??无效的;如果(isset($config['regionId'])){$this->regionId=$config['regionId'];}}/***初始化阿里云短信*/protectedfunctionapp(){}/***发送短信*@paramstring$phone*@paramstring$templateId*@paramarray$data*@returnmixed|void*/publicfunctionsend(string$phone,string$templateId,array$data=[]){//TODO:实现send()方法。}}2。完成该类的app()方法,app()方法主要处理初始化阿里云短信的逻辑/***初始化阿里云短信*/protectedfunctionapp(){//判断accessKeyId和accessKeySecret是否存在if(!$this->accessKeyId||!$this->accessKeySecret){thrownewValidateException('请传入阿里云短信配置');}//调用阿里云SDK初始化AlibabaCloud::accessKeyClient($this->accessKeyId,$this->accessKeySecret)->regionId($this->regionId)->asDefaultClient();}send()方法主要负责执行发送逻辑的处理/***SendSMS*@paramstring$phone*@paramstring$templateId*@paramarray$data*@returnmixed|void*/publicfunctionsend(string$phone,string$templateId,array$data=[]){//参数判断if(!$phone){thrownewValidateException('请传入电话号码');}如果(!$templateId){thrownewValidateException('请传入发送模板id');}//初始化阿里云SDK$this->app();try{//执行发送$result=AlibabaCloud::rpc()->product('Dysmsapi')->version('2017-05-25')->action('SendSms')->method('POST')->host('dysmsapi.aliyuncs.com')->options(['query'=>['RegionId'=>$this->regionId,'PhoneNumbers'=>$phone,'SignName'=>$this->signName,'TemplateCode'=>$templateId,'TemplateParam'=>json_encode($data),],])->request()->toArray();返回$结果;}catch(ClientException$e){thrownewValidateException($e->getMessage());}钙tch(ServerException$e){thrownewValidateException($e->getMessage());}}}callinstance://instantiatedSMSclass/**@varSms$services*/$services=app()->make(Sms::class,['aliyun',['accessKeyId'=>'阿里云短信accessKeyId','accessKeySecret'=>'阿里云短信accessKeyId','signName'=>'阿里云短信签名',]]);try{//执行发送$res=$services->send('15594500000','VERIFICATION_CODE',['code'=>1234]);dump($res);}catch(\Throwable$e){dump($e->getMessage());}阿里云短信发送的集成比较简单,主要是二次开启过程中类的结构和理解php类的设计。
