Laravel6版本使用手机短信验证

准备工作

a)申请荣联-云通讯的企业资质账号
https://www.yuntongxun.com/member/main
b)导入荣联-云通讯SDK到laravel项目中
c)这里只放模板代码,短信sdk这个就不贴代码了,需要自己到官网下载对应的sdk
d)下载的模板代码有根据laravel框架改动加入命名空间和类名方便调用

<?php

namespace App\SDK;

use App\Models\M3Result;
use App\SDK\SmsSDK;

class SendTemplateSMS
{
    //主帐号
    private $accountSid = '***';
    //主帐号Token
    private $accountToken = '***';
    //应用Id
    private $appId = '***';
    //请求地址,格式如下,不需要写https://
    private $serverIP = 'app.cloopen.com';
    //请求端口
    private $serverPort = '8883';
    //REST版本号
    private $softVersion = '2013-12-26';

    /**
     * 发送模板短信
     * @param to 手机号码集合,用英文逗号分开
     * @param datas 内容数据 格式为数组 例如:array('Marry','Alon'),如不需替换请填 null
     * @param $tempId 模板Id
     */
    function sendTemplateSMS($to, $datas, $tempId)
    {
        $m3_result = new M3Result;
        // 初始化REST SDK
        $rest = new SmsSDK($this->serverIP, $this->serverPort, $this->softVersion);
        $rest->setAccount($this->accountSid,$this->accountToken);
        $rest->setAppId($this->appId);

        // 发送模板短信
        $result = $rest->sendTemplateSMS($to,$datas,$tempId);
        if($result == NULL ) {
            $m3_result->status = 3;
            $m3_result->message = 'result error!';
        }
        if($result->statusCode != 0) {
            $m3_result->status = $result->statusCode;
            $m3_result->message = $result->statusMsg;
        }else{
            $m3_result->status = 0;
            $m3_result->message = '发送成功';
        }

        return $m3_result;
    }
}

定义消息返回json格式

<?php

namespace App\Models;

class M3Result
{
    public $status;
    public $message;

    public function toJson()
    {
        return json_encode($this,JSON_UNESCAPED_UNICODE);
    }
}

定义处理消息发送逻辑控制器

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\M3Result;
use App\SDK\SendTemplateSMS;
use Illuminate\Http\Request;
use App\Models\Tempphone;

class SmsController extends Controller
{

    public function sendSMS(Request $request)
    {
        $m3_result = new M3Result();

        $phone = $request->input('phone', '18814113478');
        if ($phone == '') {
            $m3_result->status = 1;
            $m3_result->message = '手机号不能为空';
            return $m3_result->toJson();
        }

        $send_template_sms = new SendTemplateSMS();
        //自定义短信验证码的格式--6位数字
        $code = '';
        $charset = '123456789';
        $_len = strlen($charset)-1;
        for ($i = 0; $i < 6; $i++) {
            $code .= $charset[mt_rand(0, $_len)];
        }
        $m3_result = $send_template_sms->sendTemplateSMS($phone, array($code, 60), 1);
        if ($m3_result->status == 0) {
            $m3_result->message = '信息发送成功';
            $temp_phone = new Tempphone();
            $temp_phone->phone = $phone;//电话号码
            $temp_phone->code = $code;//验证码
            $temp_phone->deadine = date('Y-m-d H:i:s', time() + 60 * 60);//验证码:当前时间+1小时
            $temp_phone->save();

        }

        return $m3_result->toJson();
    }
}

创建存储发送短信过期时间数据表

CREATE TABLE `tempphone` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `phone` char(11) COLLATE utf8_unicode_ci DEFAULT '' COMMENT '手机号',
  `code` varchar(7) COLLATE utf8_unicode_ci DEFAULT '' COMMENT '验证码',
  `deadine` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

对应模型定义

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Tempphone extends Model
{
    protected $table = 'tempphone';
    protected $primaryKey = 'id';

    public $timestamps = false;
}

定义请求路由

Route::any('registerPage', ['uses'=>'SmsController@sendSMS']);

在这里插入图片描述