腾讯云短信的简单使用

试过云片和聚合的短信,由于一些原因,审核都没通过,于是就转战了腾讯云的短信服务,难道是因为本人使用的是腾讯云服务器,所以提交不到一个小时就审核通过了?哈哈哈.....

导语

试过云片聚合的短信,由于一些原因,审核都没通过,于是就转战了腾讯云的短信服务,难道是因为本人使用的是腾讯云服务器,所以提交不到一个小时就审核通过了?哈哈哈.....

腾讯云文档平台: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

  1. 一个完整的短信由短信签名和短信正文内容两部分组成,您可以根据业务需求分别设置不同的短信正文内容模板,然后进行组合形成最终展示。短信签名+短信正文内容=最终显示内容;
  2. 短信签名和模板提交后,我们会在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、由于该组件还没有 LaravelServiceProvider,为了方便使用,我们可以自己封装一下。

  • 首先在 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.phpproviders 中增加 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();
              }
          }

结果

  • 手机收到的效果:

手机短信

  • 简单登录后:

手机短信


只是做了测试短信的发送是否成功,后续的登录验证并没有做!!!!

⬆️

写的不错,赞助一下主机费

扫一扫,用支付宝赞赏
扫一扫,用微信赞赏

暂无评论~~