PHP 핸드폰 문자 인증 코드 구현 절차 상세 설명

본인 은 자신의 블 로그(Laravel)등록 부분 에 휴대 전화 번호 로 등록 하고 문자 인증 번 호 를 보 내야 합 니 다.
구름 조각을 사용 하 는 문자 서비스 제공 자 는 물론 구체 적 인 문자 서비스 제공 자 는 자 유 롭 게 선택 할 수 있다.
1.실현 절차
핸드폰 번 호 를 입력 하고 클릭 하여 인증 번 호 를 받 습 니 다.
정확 한 문자 인증 코드 를 제출 한 후 등록 완료
2.실현 사고 지도

3.클 라 우 드 등록 및 개발 정보 인증,템 플 릿 설정,여 기 는 상세 하 게 전개 되 지 않 습 니 다.
4.easy-sms 를 설치 하고 easy-sms 는 안정 초 가 쓴 문자 발송 구성 요소 입 니 다.이 구성 요 소 를 이용 하여 우 리 는 문자 발송 기능 을 신속하게 실현 할 수 있 습 니 다.

composer require "overtrue/easy-sms"
//      
touch config/easysms.php
그리고 easysms.php 파일 에 다음 내용 을 추가 합 니 다.

 <?php

  return [

    'timeout'=>5.0,
    'default'=>[
      //       ,  :    
      'strategy' => \Overtrue\EasySms\Strategies\OrderStrategy::class,

      //          
      'gateways' => [
        'yunpian',
      ],
    ],
    //        
    'gateways' => [
      'errorlog' => [
        'file' => '/tmp/easy-sms.log',
      ],
      'yunpian' => [
        'api_key' => env('YUNPIAN_API_KEY'),
      ],
    ],

];
그리고 ServiceProvider 를 만 듭 니 다.

php artisan make:provider EasySmsServiceProvider
파일 수정
app/providers/EasySmsServiceProvider.php

<?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('easysms'));

    });

    $this->app->alias(EasySms::class,'easysms');
  }
}
마지막 으로 config/app.php 를 열 어 providers 에 App\Providers\EasySmsServiceProvider::class 를 추가 합 니 다.
5,구름 조각 획득 APIKEY
.env 에 YUNPIAN 설정API_KEY,다음 키 로 바 꿔 야 합 니 다.
6.컨트롤 러 코드 인증 코드 가 져 오기(코드 와 key 를 캐 시 에 저장)

public function getVerificationCode($request)
  {
    if(FALSE === $this->validateApiRequest($request->all(),
        ['mobile' => 'required|regex:/^1[34578]\d{9}$/|unique:users'],[
          'mobile.required'=>'      ',
          'mobile.regex'=>'        ',
          'mobile.unique'=>'      '
        ])){
      return false;
    }

    $mobile = trim($request->get('mobile'));
    $code = str_pad(random_int(1,9999),4,0,STR_PAD_LEFT);


    try{
       $easySms->send($mobile,
        ['content'=>"【UKNOW】      {$code}。      ,      "]       );

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

      $response = $exception->getResponse();
      $result =json_decode($response->getBody()->getContents(),true);
      $this->setMsg($result['msg']?? '      ');
      return false;
    }

    $key = 'verificationCode'.str_random(15);
    $expiredAt = now()->addMinutes(1);
    Cache::put($key,['mobile'=>$mobile,'code'=>$code],$expiredAt);

    return [
      'verification_key'=>$key,
      'expiredAt'=>$expiredAt->toDateTimeString(),
      'verification_code'=>$code
      ];
}
7.비교 인증번호

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

  $params = [
   'mobile'=>$mobile,
   'verification_key'=>$verification_key,
   'code'=>$code,
   'password'=>$password,
   'password_confirmation'=>$password_confirmation
  ];
  //    
  if (
   FALSE === $this->validateApiRequest($params, [
    'mobile' => 'required|regex:/^1[34578]\d{9}$/|unique:users',
    'code' => 'required',
    'verification_key'=>'required',
    'password'  => 'required|min:6|confirmed',
    'password_confirmation' => 'required',
   ], [
    'mobile.required' => '      ',
    'mobile.regex' => '        ',
    'mobile.unique' => '      ',
    'code.required' => '        ',
    'password.required' => '     ',
    'password.min'   => '      6 ',
    'password.confirmed' => '       ',
    'password_confirmation.required'=>'       ',
    'verification_key.required'=>'        '
   ])
  ) {
   return false;
  }

  $verifyData = Cache::get($verification_key);
  if( !$verifyData){
   $this->setMsg('      ');
   return false;
  }
  if(!hash_equals($code,(string)$verifyData['code'])){
   $this->setMsg('     ');
   return false;
  }

  Cache::forget($verification_key);
  $user = User::create([
   'mobile'=>$mobile,
   'password'=>bcrypt($password)
  ]);
  if(!$user){
   $this->setMsg('    ');
   return false;
  }
  return true;
}
이상 의 절 차 는 바로 휴대 전화 인증 코드 의 기본 절차 이다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기