tp5+阿里云发送短信

it2022-12-27  75

一、下载包

链接:https://pan.baidu.com/s/1qzESG1-J6OzlIXfbByVbyQ 提取码:k477 复制这段内容后打开百度网盘手机App,操作更方便哦

二、引入

1.使用前要确保

有阿里云账号在阿里云上开通短信服务,给账号充值就行。按短信量自动扣费创建子账户AccessKeyId和AccessKeySecret(只在创建时显示),同时,要赋予权限。在不使用时,直接删除子账号。

2.把解压后的alisms放于extend中,同时,可以在extend中创建SmsCode类封装发送短信的方法

use Aliyun\Core\Config; use Aliyun\Core\Profile\DefaultProfile; use Aliyun\Core\DefaultAcsClient; use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest; class SmsCode { function send_sms($to, $model, $code) { require_once '../extend/alisms/vendor/autoload.php'; Config::load(); //加载区域结点配置 $config = '根据你的实际情况读取配置文件或读取数据库,本项目是将配置写入数据库实现'; $accessKeyId = '你自己的'; $accessKeySecret = '你自己的'; $templateParam = $code; //验证码,注意传过来的需要是数组如 { ‘code’=> '123456' } //短信签名 $signName = '你的签名名称'; //短信模板ID switch ($model) { case 1: $templateCode = '你的模板'; // 注册登录短信验证码模板 break; case 2: //你可能有多个模板,所以 $templateCode = $config['model_code_reset']; // 重置密码短信验证码模板 break; } //短信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($to); // 必填,设置签名名称 $request->setSignName($signName); // 必填,设置模板CODE $request->setTemplateCode($templateCode); // 可选,设置模板参数 if ($templateParam) { dump(json_encode($templateParam)); $request->setTemplateParam(json_encode($templateParam)); } //发起访问请求 $acsResponse = $acsClient->getAcsResponse($request); //返回请求结果 $result = json_decode(json_encode($acsResponse), true); // 具体返回值参考文档:https://help.aliyun.com/document_detail/55451.html?spm=a2c4g.11186623.6.563.YSe8FK return $result; } }

3.使用实例

namespace app\index\controller; use think\Controller; class Sendcode extends Controller { public function send() { //一定得是数组形式,json编码时针对值;数组形式才能让其带有标识 $code =array('code'=>rand(100000, 999999)); $phone = '电话'; $dx = new \SmsCode(); //第一个参数电话,第二个参数判断使用那种短信模板,第三个参数数组形式验证码,因为阿里云模板中设定了验证码参数 $result = $dx->send_sms($phone, 1, $code); dump($result); } }

4.结果

三、注意

1.代码注意 这里老是错误呢!!

2.普及

extend是放置自定义或者其他类文件的(由此就可能没有命名空间)。vendor目录是放置composer类库文件的。实现不用命名空间来加载第三方的类! 我们将类文件放到extend目录下,在控制器中要用到类的话可以通过import(),函数手动引入类文件,引入方法官方手册中有说明。 // 引入 extend/qrcode.php Loader::import('qrcode', EXTEND_PATH); // 助手函数 import('qrcode', EXTEND_PATH); // 引入 extend/wechat-sdk/wechat.class.php Loader::import('wechat-sdk.wechat', EXTEND_PATH,'.class.php'); // 助手函数 import('wechat-sdk.wechat', EXTEND_PATH,'.class.php'); 手动引入了类文件后,进行实例化需要特别注意了! 我们需要在 new 类文件()时,在类文件前面加一个 “ \ ” ,即如下: $obj = new \Test(); 加 ‘\’ 的原因是: tp5的命名空间自动加载规则:自动加载的实现由 think\Loader类库完成,自动加载规范符合PHP的。根据对规则的了解,放在extend目录下 没有定义命名空间的类文件,就是全局化的类 。实例化全局化的类的话,即用""放在类名前表示此类是全局类,就new一个全局化的类!vender()默认的文件夹是vender
最新回复(0)