tp 实现短信发送
注册短信秘钥这一部分就省略了
在阿里云短信下载demo 下载链接,找到相对应的demo
我们下下来之后发现他的目录结构是这样的
如果我们只需要用到发送短信的业务的话,我们只需要用到里面的 api_sdk 这个文件,
官方也给我们准备了demo可以查看.
好我们来打开看看demo吧~
进来之后我们看到了getAcsClient()方法,这个里面有几个参数是需要替换成你自己的,
我们发现了阿里云的demo引入了命名空间,所以使我们更加容易操作.
接下来就是最重要的部分了 发送短信
我们也看到了里面填写参数,好了demo就看到这里吧~ 开始写代码
我们在框架的扩展目录下边新建一个文件 alisms
我们只需要发送短信的业务, 把api_sdk copy 过来即可
我们开始配置秘钥,我的是放在配置文件里面 如果你的秘钥发生变化就放在数据库 .
因为本人的是以前做的项目 所以目录结构有点不相同,但是这都不影响操作
拷贝过来之后我们在当前文件夹下边仿照阿里云的demo 重写一个方法
<?php
/**
* Created by Wang.
* User: Wang.
* Date: 2019/1/8
* Time: 15:27
*/
namespace alisms;
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
//引入autoload.php,EXTEND_PATH就是指tp5根目录下的extend目录,系统自带常量。
//alisms为我们复制api_sdk过来后更改的目录名称
require_once EXTEND_PATH.'alisms/vendor/autoload.php';
//加载区域结点配置
Config::load();
class SendSms
{
/*关键的配置,我们用成员属性*/
//阿里云短信获取的accessKeyId
private $accessKeyId;
//阿里云短信获取的accessKeySecret
private $accessKeySecret;
//短信签名,要审核通过
private $signName;
//短信模板ID,记得要审核通过的
private $templateCode;
public function __construct()
{
//使用静态方法读取秘钥 构造函数赋值
$this->accessKeyId = \config('AliSms.accessKeyId');
$this->accessKeySecret = \config('AliSms.accessKeySecret');
$this->signName = \config('AliSms.signName');
$this->templateCode = \config('AliSms.templateCode');
}
public function send($mobile,$templateParam)
{
//短信API产品名(短信产品名固定,无需修改)
$product = "Dysmsapi";
//短信API产品域名(接口地址固定,无需修改)
$domain = "dysmsapi.aliyuncs.com";
//暂时不支持多Region(目前仅支持cn-hangzhou请勿修改)
$region = "cn-hangzhou";
// 初始化用户Profile实例
$profile = DefaultProfile::getProfile($region, $this->accessKeyId, $this->accessKeySecret);
// 增加服务结点
DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
// 初始化AcsClient用于发起请求
$acsClient= new DefaultAcsClient($profile);
// 初始化SendSmsRequest实例用于设置发送短信的参数
$request = new SendSmsRequest();
// 必填,设置雉短信接收号码
$request->setPhoneNumbers($mobile);
// 必填,设置签名名称
$request->setSignName($this->signName);
// 必填,设置模板CODE
$request->setTemplateCode($this->templateCode);
// 可选,设置模板参数
if($templateParam) {
$request->setTemplateParam(json_encode($templateParam),JSON_UNESCAPED_UNICODE);
}
//发起访问请求
$acsResponse = $acsClient->getAcsResponse($request);
//返回请求结果,这里为为数组格式
$result = json_decode(json_encode($acsResponse),true);
return $acsResponse;
}
}
注意引入命名空间
namespace alisms;
这样子就基本上完成了是不是很简单呢~ 我们开始调用它发送短信啦~~
我们在用到他的时候命名空间就起作用咯
//类前面记得引入SendSms类
use alisms\SendSms;
//简单的调用
public function test(Request $request)
{
//判断是否ajax提交
if($request->isAjax())
{
//获取mobile参数
$mobile = $request->param('mobile');
//新建code
$templateParam = array('code' => rand(1000,9999));
//保存在session进行验证
session('sms_code',['mobile'=>$mobile,'code'=>$templateParam['code']]);
//实例化类
$send = new SendSms();
//调用类里面send方法 send()方法需要俩个参数;
//发送短信~
$result = $send->send($mobile,$templateParam);
//是否成功
if($result)
{
//返回
return http200('发送成功!');
}
}
}