tp6.0使用阿里大于发送短信
tp6.0安装阿里大于
composer require alibabacloud/client
站内调试短信接口
https://api.aliyun.com/api/Dysmsapi/2017-05-25/SendSms
点击发起调用即可发送短信
signName
https://dysms.console.aliyun.com/domestic/text/sign
TemplateCode
接收到验证码
集成到tp6.0
1、config新建api配置文件
return [
// token失效时间,0代表永不失效
'token_expire'=>0,
// 阿里大于
'aliSMS'=>[
//开启阿里大于
'isopen'=> false,
'accessKeyId'=>'',
'accessSecret'=>'',
'regionId'=>'cn-hangzhou',
'product'=>'Dysmsapi',
'version'=>'2017-05-25',
'SignName'=>'',
'TemplateCode'=>'',
// 验证码发送时间间隔(60秒)
'expire'=>60
]
];
2、新建类,将阿里大于示例代码放到这个类中
阿里大于实例代码如下
我们自己定义类和方法,把阿里大于代码复制过来
完整代码如下:
<?php
declare (strict_types = 1);
namespace app\controller;
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
class AliSMSController {
static public function sendCode($phone, $code){
AlibabaCloud::accessKeyClient(config('api.aliSMS.accessKeyId'), config('api.aliSMS.accessSecret'))
->regionId(config('api.aliSMS.regionId'))
->asDefaultClient();
try {
$result = AlibabaCloud::rpc()
->product('Dysmsapi')
// ->scheme('https') // https | http
->version('2017-05-25')
->action('SendSms')
->method('POST')
->host('dysmsapi.aliyuncs.com')
->options([
'query' => [
'RegionId' => config('api.aliSMS.regionId'),
'PhoneNumbers' => $phone,
'SignName' => config('api.aliSMS.SignName'),
'TemplateCode' => config('api.aliSMS.TemplateCode'),
'TemplateParam' => "{\"code\":$code}",
],
])
->request();
// 返回结果
return $result->toArray();
} catch (ClientException $e) {
echo $e->getErrorMessage() . PHP_EOL;
} catch (ServerException $e) {
echo $e->getErrorMessage() . PHP_EOL;
}
}
}
3、模型中定义方法
注意:随你在哪使用,AliSMSController::sendCode($phone, $code)
即可发送短信,
// 引入我们定义好的阿里大于发送短信类
use app\controller\AliSMSController;
// 发送验证码
public function sendCode(){
// 获取用户提交手机号码
$phone = request()->param('phone');
// 判断是否已经发送过
if(Cache::get($phone)) ApiException('你操作得太快了', 30001, 200);
// 生成4位验证码
$code = random_int(1000,9999);
// 判断是否开启验证码功能
if(!config('api.aliSMS.isopen')){
Cache::set($phone,$code,config('api.aliSMS.expire'));
ApiException('验证码:'.$code, 30005, 200);
}
// 发送验证码
$res = AliSMSController::sendCode($phone, $code);
//发送成功 写入缓存
if($res['Code']=='OK') return Cache::set($phone,$code,config('api.aliSMS.expire'));
// 无效号码
if($res['Code']=='isv.MOBILE_NUMBER_ILLEGAL') ApiException('无效号码', 30002, 200);
// 触发日限制
if($res['Code']=='isv.DAY_LIMIT_CONTROL') ApiException('今日你已经发送超过限制,改日再来', 30003, 200);
// 发送失败
ApiException('发送失败', 30004, 200);
}
1
1
1
1
1
1
1
1
1
1