现在这个短信通知泛滥的年代,手机随时都能收到回复T退订的骚扰短信,项目如果没有个短信注册,或者通知之类的,你都不敢说你是搞开发的 😥
这个验证码搞起来也不是很难,但是如果刚接触也是有点迷茫,之前有一篇TP3的短信,基本上没什么大的改变
要使用阿里云短信,你得有4个参数,这就是申请以后阿里会给你的东西:accessKeyId、accessKeySecret、短信模板ID、和审核 通过的签名
注册,登录,认证,获得参数,这里就不说了,感觉都是废话
下载官方SDK
第一步肯定是下载官方的SDK了,但是官方下载的SDK内容有一些多,我们不必全部都要,只将下载好的SDK文件中的api_sdk
文件,改名aliyunsms
,然后放入ThinkPHP5
框架的扩展目录Vendor
下即可,下载地址传送门
这个api_sdk
就是短信服务API接口依赖的SDK
功能实现
短信功能可以在用户登录,注册的时候都会使用,所以我们最好还是直接封装一个公共函数,我这里直接放在Api下面了/app/api/common.php
,这里的app你们那里应该是application,因为我这里改了一下配置,不影响
/**
* 发送验证码
* @param tel 手机号
* @param code 验证码
*/
function send_sms_code($tel,$code)
{
require_once VENDOR_PATH . 'aliyunsms/vendor/autoload.php';
require_once VENDOR_PATH . 'aliyunsms/lib/Api/Sms/Request/V20170525/SendSmsRequest.php';
Config::load();
$config = \config('aliyun_sms'); //获取配置信息
$accessKeyId = $config['KeyID'];//阿里云短信keyId
$accessKeySecret = $config['KeySecret'];//阿里云短信keysecret
//短信API产品名
$product = "Dysmsapi";
//短信API产品域名
$domain = "dysmsapi.aliyuncs.com";
//暂时不支持多Region
$region = "cn-hangzhou";
//初始化访问的acsCleint
$profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
$acsClient= new DefaultAcsClient($profile);
$request = new SendSmsRequest();
$request->setPhoneNumbers($tel);//必填-短信接收号码
$request->setSignName($config['SignName']);//必填-短信签名: 如何添加签名可以参考阿里云短信或TPshop官方文档
//必填-短信模板Code
$request->setTemplateCode($config['TemplateCode']);//必填-短信签名: 如何添加签名可以参考阿里云短信或TPshop官方文档
//选填-假如模板中存在变量需要替换则为必填(JSON格式)
$request->setTemplateParam("{\"code\":$code}");//短信签名内容:
//发起访问请求
$resp = $acsClient->getAcsResponse($request);
//短信发送成功返回True,失败返回false
if ($resp && $resp->Code == 'OK') {
return array('status' => 1, 'msg' => $resp->Code);
} else {
return array('status' => -1, 'msg' => $resp->Message . ' subcode:' . $resp->Code);
}
}
里面的参数不用做任何修改,可以修改一下你存放的路径,在头部use类库就可以
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
\config('aliyun_sms')
是获取配置信息,在/app/config/config.php
中添加如下配置
//阿里云SMS配置
'aliyun_sms' => [
'KeyID' => '', //阿里云生成的 accessKeyId
'KeySecret' => '', //阿里云生成的 accessKeySecret
'SignName' => '沈唁志', //短信签名
'TemplateCode' => 'SMS_130XXXXXX' //短信模板 ID
],
调用函数
调用函数:send_sms_code('手机号','验证码')
/**
* 发送验证码
* @param tel 手机号
* @param code 验证码
*/
public function sendSms($tel)
{
$code = rand(1000,9999);
$res = send_sms_code($tel,$code);
if($res['msg'] == 'OK'){
return $this->response(200,'发送成功!');
}else{
return $this->response(400,'发送失败!');
}
}
就这样,ThinkPHP5框架短信集成成功! 😎
ThinkPHP5 框架功能还是比较齐全的!
@很文博客 嗯 用tp5的话直接composer就行
哈哈,看不懂
只能说膜拜大神。支持一下 😆
大佬666啊 各种sdk接入啊~ 😛
一天一篇技术文,膜拜 😯
最讨厌在框架上require_once了
@西枫里博客 use类库!!!命名空间 我懒得改了 😕