导语
试过云片
和聚合
的短信,由于一些原因,审核都没通过,于是就转战了腾讯云
的短信服务,难道是因为本人使用的是腾讯云服务器,所以提交不到一个小时就审核通过了?哈哈哈.....
腾讯云文档平台:https://cloud.tencent.com/document/product
发送前准备
https://cloud.tencent.com/document/product/382/18071#.E5.8F.91.E9.80.81.E5.89.8D.E5.87.86.E5.A4.87
- 一个完整的短信由短信签名和短信正文内容两部分组成,您可以根据业务需求分别设置不同的短信正文内容模板,然后进行组合形成最终展示。短信签名+短信正文内容=最终显示内容;
- 短信签名和模板提交后,我们会在2个小时左右完成审核,如有需求可设置常用手机和邮箱,用于即时接收该应用短信内容审核通知。
大致流程:添加应用->点击新增的应用->国内短信->短信内容配置->短信签名和短信正文
- 短信签名图(注意这里的签名内容须为
ICP备案的负责人名称
+网站名称
):
- 短信正文即模板图:
下面记录一下测试过程
1、composer
了一个全新的laravel
框架5.7:
composer create-project --prefer-dist laravel/laravel test
2、没有从官方下载SDK,直接composer
一个很好用的包(因为是overtrue出品):
composer require "overtrue/easy-sms"
3、由于该组件还没有 Laravel
的 ServiceProvider
,为了方便使用,我们可以自己封装一下。
- 首先在
config
目录中增加easysms.php
文件
touch config/easysms.php
config/easysms.php
, 填入如下内容
<?php
return [
// HTTP 请求的超时时间(秒)
'timeout' => 5.0,
// 默认发送配置
'default' => [
// 网关调用策略,默认:顺序调用
'strategy' => \Overtrue\EasySms\Strategies\OrderStrategy::class,
// 默认可用的发送网关
'gateways' => ['qcloud',],
],
// 可用的网关配置
'gateways' => [
'errorlog' => ['file' => '/tmp/easy-sms.log',],
'qcloud' => [
'sdk_app_id' => env('QCLOUD_SMS_SDK_APP_ID'),
'app_key' => env('QCLOUD_SMS_APP_KEY'),
],
],
];
.env
配置
# qcloud sms
QCLOUD_SMS_SDK_APP_ID=140018xxxx
QCLOUD_SMS_APP_KEY=9a88180e4a4004520610434f40fxxxxx
- 然后创建一个
ServiceProvider
php artisan make:provider EasySmsServiceProvider
- 修改文件
app/providers/EasySmsServiceProvider.php
<?php
namespace App\Providers;
use Overtrue\EasySms\EasySms;
use Illuminate\Support\ServiceProvider;
class EasySmsServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->singleton(EasySms::class, function ($app) {
return new EasySms(config('easysms'));
});
$this->app->alias(EasySms::class, 'easysms');
}
}
- 最后 打开
config/app.php
在providers
中增加App\Providers\EasySmsServiceProvider::class
App\Providers\EasySmsServiceProvider::class,
4、写好路由:
<?php
//腾讯云短信测试
Route::get('/sms', 'TestController@sms')->name('sms');
Route::post('/sms_send', 'TestController@smsSend')->name('sms.send');
Route::post('/sms_validate', 'TestController@validateSmsCode')->name('sms.validate');
Route::get('/sms_success', 'TestController@validateSmsCode')->name('sms.success');
5、开始短信的基础页面和逻辑:
- 发送短信表单页面
TestController
拿到phone
,然后去调用腾讯云短信服务,像该手机号发送短信验证码
<?php
use Overtrue\EasySms\EasySms;
/*
* 调用腾讯云发送短信验证码
* */
public function smsSend(Request $request)
{
try{
$easySms = app('easysms');
$expire_minutes = 10;
$code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);
$data=[
'code'=>$code,
'phone'=>$request->phoneNum,
'sms_content' => " {$code}为您的登录验证码,请于{$expire_minutes}分钟内填写。如非本人操作,请忽略本短信。 ",
];
$res=$easySms->send($request->phoneNum, ['content' => $data['sms_content'],]);
if($res['qcloud']['status'] == 'success'){
SmsMessage::create($data);
$expired_at = now()->addMinutes($expire_minutes);
// 缓存验证码 10 分钟过期
\Cache::put('smsKey_'.$request->phoneNum, ['phone' => $request->phoneNum, 'code' => $code], $expired_at);
return ['status'=>1,'msg'=>'已发送','data'=>$res];
} else{
return ['status'=>0,'msg'=>'发送异常','data'=>$data];
}
}catch (NoGatewayAvailableException $e){
return $e->getResults();
}
}
- 然后简单验证一下,这里只是做个测试
/*
* 短信验证码验证
* */
public function validateSmsCode(Request $request)
{
if(cache('smsKey_'.$request->phoneNum) != '' && cache('smsKey_'.$request->phoneNum)['code'] == $request->code){
return view('sms_success');
}else{
return back()->with(['sms_validate'=>'验证失败'])->withInput();
}
}
结果
- 手机收到的效果:
- 简单登录后:
只是做了测试短信的发送是否成功,后续的登录验证并没有做!!!!
写的不错,赞助一下主机费
扫一扫,用支付宝赞赏

扫一扫,用微信赞赏

暂无评论~~