Rumah > pembangunan bahagian belakang > tutorial php > PHP手机短信验证码实现流程详解php实例

PHP手机短信验证码实现流程详解php实例

jacklove
Lepaskan: 2023-04-01 18:34:02
asal
3038 orang telah melayarinya

这篇文章主要为大家详细介绍了PHP手机短信验证码的实现流程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本人在自己博客(Laravel)的注册部分 使用手机号注册,需要发送短信验证码。

使用云片的短信服务提供商,当然具体短信服务提供商大家可以自由选择。

1、实现流程

输入手机号,点击获取验证码
提交正确的短信验证码后,注册完成

2、实现思路图

3、注册 云片,以及开发信息认证,模板设置,这里就不详细展开了

4、安装 easy-sms,easy-sms 是安正超写的一个短信发送组件,利用这个组件,我们可以快速的实现短信发送功能。


1

2

3

composer require "overtrue/easy-sms"

//新建配置文件

touch config/easysms.php

Salin selepas log masuk


然后在 easysms.php 文件内 添加以下内容:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<?php

 

  return [

 

    &#39;timeout&#39;=>5.0,

    &#39;default&#39;=>[

      // 网关调用策略,默认:顺序调用

      &#39;strategy&#39; => \Overtrue\EasySms\Strategies\OrderStrategy::class,

 

      // 默认可用的发送网关

      &#39;gateways&#39; => [

        &#39;yunpian&#39;,

      ],

    ],

    // 可用的网关配置

    &#39;gateways&#39; => [

      &#39;errorlog&#39; => [

        &#39;file&#39; => &#39;/tmp/easy-sms.log&#39;,

      ],

      &#39;yunpian&#39; => [

        &#39;api_key&#39; => env(&#39;YUNPIAN_API_KEY&#39;),

      ],

    ],

 

];

Salin selepas log masuk


然后创建一个 ServiceProvider


1

php artisan make:provider EasySmsServiceProvider

Salin selepas log masuk


修改文件

app/providers/EasySmsServiceProvider.php


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

<?php

 

namespace App\Providers;

 

use Illuminate\Support\ServiceProvider;

use Overtrue\EasySms\EasySms;

 

class EasySmsServiceProvider extends ServiceProvider

{

  /**

   * Bootstrap services.

   *

   * @return void

   */

  public function boot()

  {

    //

  }

 

  /**

   * Register services.

   *

   * @return void

   */

  public function register()

  {

    $this->app->singleton(EasySms::class,function ($app){

 

      return new EasySms(config(&#39;easysms&#39;));

 

    });

 

    $this->app->alias(EasySms::class,&#39;easysms&#39;);

  }

}

Salin selepas log masuk


最后 打开config/app.php 在 providers 中增加 App\Providers\EasySmsServiceProvider::class,

5、获取云片的API_KEY

在.env中配置 YUNPIAN_API_KEY,注意下面需要替换为你自己的 key

6、控制器代码 获取验证码(将code 以及key存入缓存)



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

public function getVerificationCode($request)

  {

    if(FALSE === $this->validateApiRequest($request->all(),

        [&#39;mobile&#39; => &#39;required|regex:/^1[34578]\d{9}$/|unique:users&#39;],[

          &#39;mobile.required&#39;=>&#39;请输入手机号&#39;,

          &#39;mobile.regex&#39;=>&#39;手机号格式不正确&#39;,

          &#39;mobile.unique&#39;=>&#39;手机号已存在&#39;

        ])){

      return false;

    }

 

    $mobile = trim($request->get(&#39;mobile&#39;));

    $code = str_pad(random_int(1,9999),4,0,STR_PAD_LEFT);

 

 

    try{

       $easySms->send($mobile,

        [&#39;content&#39;=>"【UKNOW】您的验证码是{$code}。如非本人操作,请忽略本短信"]       );

 

    }catch(\GuzzleHttp\Exception\ClientException $exception){

 

      $response = $exception->getResponse();

      $result =json_decode($response->getBody()->getContents(),true);

      $this->setMsg($result[&#39;msg&#39;]?? &#39;短信发送异常&#39;);

      return false;

    }

 

    $key = &#39;verificationCode&#39;.str_random(15);

    $expiredAt = now()->addMinutes(1);

    Cache::put($key,[&#39;mobile&#39;=>$mobile,&#39;code&#39;=>$code],$expiredAt);

 

    return [

      &#39;verification_key&#39;=>$key,

      &#39;expiredAt&#39;=>$expiredAt->toDateTimeString(),

      &#39;verification_code&#39;=>$code

      ];

}

Salin selepas log masuk


7、对比验证码


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

public function userStore($mobile, $verification_key,$code,$password,$password_confirmation)

 {

 

  $params = [

   &#39;mobile&#39;=>$mobile,

   &#39;verification_key&#39;=>$verification_key,

   &#39;code&#39;=>$code,

   &#39;password&#39;=>$password,

   &#39;password_confirmation&#39;=>$password_confirmation

  ];

  //参数判断

  if (

   FALSE === $this->validateApiRequest($params, [

    &#39;mobile&#39; => &#39;required|regex:/^1[34578]\d{9}$/|unique:users&#39;,

    &#39;code&#39; => &#39;required&#39;,

    &#39;verification_key&#39;=>&#39;required&#39;,

    &#39;password&#39;  => &#39;required|min:6|confirmed&#39;,

    &#39;password_confirmation&#39; => &#39;required&#39;,

   ], [

    &#39;mobile.required&#39; => &#39;请输入手机号&#39;,

    &#39;mobile.regex&#39; => &#39;手机号格式不正确&#39;,

    &#39;mobile.unique&#39; => &#39;手机号已存在&#39;,

    &#39;code.required&#39; => &#39;请输入短信验证码&#39;,

    &#39;password.required&#39; => &#39;请输入密码&#39;,

    &#39;password.min&#39;   => &#39;密码不得小于6位&#39;,

    &#39;password.confirmed&#39; => &#39;密码前后不一致&#39;,

    &#39;password_confirmation.required&#39;=>&#39;请再次输入密码&#39;,

    &#39;verification_key.required&#39;=>&#39;请输入短信验证码&#39;

   ])

  ) {

   return false;

  }

 

  $verifyData = Cache::get($verification_key);

  if( !$verifyData){

   $this->setMsg(&#39;验证码已失效&#39;);

   return false;

  }

  if(!hash_equals($code,(string)$verifyData[&#39;code&#39;])){

   $this->setMsg(&#39;验证码错误&#39;);

   return false;

  }

 

  Cache::forget($verification_key);

  $user = User::create([

   &#39;mobile&#39;=>$mobile,

   &#39;password&#39;=>bcrypt($password)

  ]);

  if(!$user){

   $this->setMsg(&#39;注册失败&#39;);

   return false;

  }

  return true;

}

Salin selepas log masuk


以上流程就是手机验证码基本步骤。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持php中文网。


您可能感兴趣的文章:

php通过各种函数判断0和空php实例

php识别翻转iphone拍摄的颠倒图片php技巧

PHP实现登录验证码校验功能php实例

Atas ialah kandungan terperinci PHP手机短信验证码实现流程详解php实例. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan