> 백엔드 개발 > PHP 문제 > PHP 휴대폰 인증 코드 구현 방법

PHP 휴대폰 인증 코드 구현 방법

藏色散人
풀어 주다: 2023-03-08 14:20:01
원래의
4584명이 탐색했습니다.

PHP 휴대폰 인증 코드 구현 방법: 먼저 클라우드 필름 및 개발 정보 인증을 등록하고 템플릿을 설정한 다음 "easysms.php" 파일에 "'default'=>[]" 및 기타 내용을 추가하세요. 그런 다음 슬라이스의 클라우드 API_KEY를 얻고 마지막으로 컨트롤러 코드를 통해 확인 코드를 얻습니다.

PHP 휴대폰 인증 코드 구현 방법

이 문서의 운영 환경: Windows 7 시스템, PHP7.1, Dell G3 컴퓨터.

PHP SMS 인증코드 구현 과정에 대한 자세한 설명

제 블로그(Laravel) 등록 섹션에 휴대폰 번호를 사용하여 등록했는데, SMS 인증코드를 보내야 합니다.

Yunpian의 SMS 서비스 제공업체를 이용하세요. 물론 특정 SMS 서비스 제공업체를 자유롭게 선택할 수 있습니다.

1. 구현 과정

휴대폰 번호를 입력하고 클릭하여 인증 코드를 받으세요
정확한 SMS 인증 코드를 제출하면 등록이 완료됩니다

2. 구현 아이디어 맵

3. 클라우드 필름 등록, 개발 정보 인증 및 템플릿 설정에 대해서는 여기서 자세히 설명하지 않습니다. [권장: "PHP 비디오 튜토리얼"]

4 easy-sms를 설치합니다. An Zhengchao가 작성한 문자 메시지 전송 구성요소입니다. 이 구성요소를 사용하면 SMS 전송 기능을 빠르게 구현할 수 있습니다.

1

2

3

composer require "overtrue/easy-sms"

//新建配置文件

touch config/easysms.php

로그인 후 복사

그런 다음 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;),

      ],

    ],

 

];

로그인 후 복사

그런 다음 ServiceProvider를 만듭니다

1

php artisan make:provider EasySmsServiceProvider

로그인 후 복사

파일을 수정하세요

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;);

  }

}

로그인 후 복사

마지막으로 config/app.php를 열고 AppProvidersEasySmsServiceProvider를 추가하세요. 공급자::class,

5. 클라우드 조각의 API_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

      ];

}

로그인 후 복사

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;

}

로그인 후 복사

위의 과정은 휴대폰 인증코드의 기본 단계입니다.

위 내용은 PHP 휴대폰 인증 코드 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿