先在阿里大于短信平台注册,将appid和appsec准备好.
1:下载 sdk包 (https://help.aliyun.com/document_detail/55359.html?spm=5176.8195934.507901.12.2NiZni) ps:我下载的是轻量级的包
放到 vendor目录下面去
2:新增一个AliSms控制器(我写的是 扩展类 直接放在extend)下面的
3:在控制器引入 包 由于tp5.1*以上 开启了自动加载,这儿你可以使用 require 或者定义命名空间的方式来引入
<?php
/**
- 阿里云短信发送 模型
*/
namespace lib;
use AliyunDySDKLiteSignatureHelper;
use appcommonmodelWebsiteConfig;
use appcommonmodelSms;
use thinkDb;
class AliSms
{
public static function sendSms($mobile,$code,$TemplateCode)
{
//引入 sdk 文件
require '../vendor/aliyun-sms/SignatureHelper.php';
//读取数据库 配置信息
$config = WebsiteConfig::get(1);
$accessKeyId = $config['sms_appid'];
$accessKeySecret = $config['sms_appsecret'];
//发送短信需要的数据
$params = [
'PhoneNumbers' => $mobile,//手机号
'SignName' => 'xxx',//签名
'TemplateCode' => $TemplateCode,//模板id
'TemplateParam' => [//短信模板需要的 变量内容
'code' => $code
]
];
try {
Sms::where('mobile',$mobile)->delete();//将数据库存的 短信信息删除
Sms::create([//插入本条短信内容
'code' => $code,
'mobile' => $mobile,
'end_time' => time()+900
]);
} catch (Exception $e) {
return false;
}
if(!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
$params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);
}
//实例化 速度快、
$helper = new SignatureHelper();
try {
$content = $helper->request(//发送短 这儿的内容不需要更改
$accessKeyId,
$accessKeySecret,
"dysmsapi.aliyuncs.com",
array_merge($params,[
"RegionId" => "cn-hangzhou",
"Action" => "SendSms",
"Version" => '2017-05-25',
])
);
return object_array($content);//将对象转为数组 返回
} catch (Exception $e) {
return false;
}
}
/**
- 验证验证码
- @return code 0 为验证码不正确 2为验证码已过期 1为验证码正确
*/
public static function check($mobile,$code)
{
$result = Sms::where(['mobile' => $mobile , 'code' => $code] )->find();
if (empty($result)) {
return ['code'=>0,'msg'=>'验证码不正确,请检查'];
}elseif( ($result['end_time'] Sms::where(['mobile' => $mobile , 'code' => $code] )->delete();
return ['code'=>0,'msg'=>'验证码已过期,请重新获取'];
}else{
Sms::where(['mobile' => $mobile , 'code' => $code] )->delete();
return ['code'=>1,'msg'=>'验证码正确'];
}
}
}