美文网首页
laravel spa单页面手机短信验证码实现

laravel spa单页面手机短信验证码实现

作者: charmingcheng | 来源:发表于2020-09-07 16:53 被阅读0次

1.安装第三方插件

composer require "overtrue/easy-sms"

2.配置config文件->config/sms.php 这里使用的云片

<?php
return [
    // HTTP 请求的超时时间(秒)
    'timeout' => 5.0,
    
    // 默认发送配置
    'default' => [
        // 网关调用策略,默认:顺序调用
        'strategy' => \Overtrue\EasySms\Strategies\OrderStrategy::class,
        
        // 默认可用的发送网关
        'gateways' => [
            'yunpian'
        ],
    ],
    // 可用的网关配置
    'gateways' => [
        'errorlog' => [
            'file' => '/tmp/easy-sms.log',
        ],
        'yunpian' => [
            'api_key' => 'xxxxxxxx',
            'signature' => '【】', // 内容中无签名时使用
        ],
    ],
];

3.获取验证码,返回缓存的短信验证码key

/**
     * 获取手机验证码
     *
     */
    public function getSmsCode(Request $request)
    {
        if ($phone = $request->phone) {
  
            try {
                $easySms = new EasySms(config('sms'));
                $code = mt_rand(0000, 9999);
                
                $smsContent = [
                    'content'  => '您的验证码是'.$code,
                ];
                $result = $easySms->send($phone, $smsContent);

                $key = 'verificationCode_'.str_random(15);
                $expiredAt = now()->addMinutes(10);
                // 缓存验证码 10分钟过期。
                Cache::put($key, ['phone' => $phone, 'code' => $code], $expiredAt);

                $data = [
                    'sms_key' => $key,
                    'expired_at' => $expiredAt->toDateTimeString(),
                ];
                return response()->json(['code'=>0, 'data'=>$data, 'message'=>'短信验证码发送成功']);
            } catch (\Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) {
                $message = $exception->getException('yunpian')->getMessage();
                return response()-json(['code'=>10001, 'message'=>$message ?: '短信发送异常']);
            }
        }
    }

4.通过短信验证码key,获取验证码,进行比对

$cacheCode = Cache::get($request->smsKey);

if ($cacheCode) {
    if ($request->smsCode != $cacheCode['code']) {
        return $this->errorWithCode('短信验证码不正确',1,422);
    }
} else {
    return $this->errorWithCode('验证码已过期,请重新发送',1,422);
}

相关文章

网友评论

      本文标题:laravel spa单页面手机短信验证码实现

      本文链接:https://www.haomeiwen.com/subject/mekymctx.html