Laravel5.4中使用阿里大于(鱼)发送短信验证码
程序员文章站
2024-03-20 10:46:34
...
首先,百度【阿里大于】,打开页面注册,登录(阿里云账号密码就可以)
登录成功,点击控制台
进入【短信服务】—增加签名–增加模板—增加订阅–点击api文档观看
API接口文档【如图】
到此设置结束开始在laravel中进行操作
安装laravel阿里大于(鱼)服务
composer require iscms/alisms-for-laravel
注册服务(config/app.php)
在文件中找到Providers数组,写入
iscms/Alisms/AlidayuServiceProvider::class
生成阿里大于(鱼)配置文件(config文件夹)
php artisan vendor:publish
此时,在config.php中会出现一个阿利大于的配置文件为:alisms.php
<?php
/**
* 阿里大鱼短信配置
*/
return [
// 短信应用key
'app_key' => '******',
/*
| 短信应用**
*/
'app_secret' => '******',
/*
| 类型
*/
'type' => 'normal',
// 扩展
'extend' => '',
/*
| 短信签名
*/
'sign_name' => 'summer', //阿塞布
/*
| 短信模板
*/
'template' => [
'verify' => 'SMS_47470198',
]
];
**在生成的依赖包中:如果想引用的话:记得配置好,否则app_key和secretKey找不到
新建一个控制器,在其中这样写来发短信:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
/*调用短信*/
use iscms\Alisms\SendsmsPusher as Sms;
//laravel中的session的过期时间在config.php--session.php 默认进行了设置;所以使用redis进行存储
use Illuminate\Support\Facades\Redis;
class HomeController extends Controller
{
/*初始化 得到appkey+secretKey */
public function __construct(Sms $sms)
{
$this->sms=$sms; //得到在SendSmsPusher.php中的所有配置信息
}
public function Alidayu(Request $request)
{
//第一步:引入配置文件,得到需要的预先设置好的参数
$smsconf = config('alisms');
$mobile = '18335108888'; // 用户手机号,接收验证码
$name = $smsconf['sign_name']; // 短信签名,可以在阿里大鱼的管理中心看到
$num = rand(100000, 999999); // 生成随机验证码 **键值和之前设定的短信模板变量保持一致
$smsParams = [
'verify_code' => "$num"
];
$content = json_encode($smsParams); // 转换成json格式的
$code = $smsconf['template']['verify']; // 阿里大于(鱼)短信模板ID
$interval = 300;
Redis::set($mobile, json_encode([
'captcha' => $code,
'expire' => time() + $interval
]));
$result = $this->sms->send($mobile, $name, $content, $code);
//property_exists — 检查对象或类是否具有该属性
if (property_exists($result, "code") && $result->code > 0) {
return response()->json(['status'=>201, 'error'=>$result->msg]);
}else{
return response()->json(['status'=>200, 'error'=>'短信发送成功']);
}
}
/*验证填写的验证码和给该手机发送的验证码是否匹配*/
public function verify(Request $req)
{
//第一步:接收到手机号+验证码
$mobile = $req->input('mobile');
$captcha =$req->input('captcha');
// 检查验证码
$redisCaptcha = json_decode(Redis::get($mobile), true);
$now = time();
if ($redisCaptcha['expire'] < $now) {
Redis::del($mobile);
return response()->json(['status' => 204, 'error' => '验证码过期']);
}
if ($redisCaptcha['captcha'] != $captcha) {
return response()->json(['status' => 201, 'error' => '验证码错误']);
}
return response()->json(['status'=>200, 'error'=>'输入的验证码和发送的验证码一致']);
}
}
*****************控制器所写方法的打印结果展示****************************************
打印构造函数中的$sms
结果如下:
iscms\Alisms\SendsmsPusher Object
(
[TopClient:iscms\Alisms\SendsmsPusher:private] => iscms\AlismsSdk\TopClient Object
(
[appkey] => 23639393
[secretKey] => 273f3cc8ffbd47f269e35a42c872f54a
[gatewayUrl] => http://gw.api.taobao.com/router/rest
[format] => json
[connectTimeout] =>
[readTimeout] =>
[checkRequest] => 1
[signMethod:protected] => md5
[apiVersion:protected] => 2.0
[sdkVersion:protected] => top-sdk-php-20151012
[simplify] => 1
)
[name:iscms\Alisms\SendsmsPusher:private] =>
[content:iscms\Alisms\SendsmsPusher:private] =>
[phone:iscms\Alisms\SendsmsPusher:private] =>
[code:iscms\Alisms\SendsmsPusher:private] =>
)
打印返回值$result
A。发送短信成功时,返回的对象信息
stdClass Object
(
[result] => stdClass Object
(
[err_code] => 0
[model] => 513811803394124578^0
[msg] => *
[success] => 1
)
[request_id] => 43ebsfmfind5
)
B。发送短信失败时,返回的对象信息
stdClass Object
(
[code] => 28
[msg] => Missing app key
[request_id] => 2fpg7qvs6r7l
)
参数说明:
$phone 手机号,用户输入的手机号
$name 短信签名,阿里大鱼申请的短信签名的名字
$content 替换短信模板中的变量,JSON字符串格式,所有值都是字符串,不能有整形
$code 阿里大鱼申请的短信模ID:SMS_39***4
阿里大于(鱼)短信模板(http://www.alidayu.com/)
模板名称: 身份验证
模板ID: SMS_39***4
*模板内容:验证码${code},您正在进行个人身份验证,打死不要告诉别人哦!
那么里面存在着变量${code}需要替换成验证码,那么对应的$content 就应该为{code:"生成的验证码"}
e.g {code:'123456'}
上一篇: 二分查找总结——模板+例题