Maison  >  Article  >  développement back-end  >  Comment implémenter le code de vérification de téléphone mobile php

Comment implémenter le code de vérification de téléphone mobile php

藏色散人
藏色散人original
2021-03-08 11:20:414353parcourir

Comment implémenter le code de vérification du téléphone mobile PHP : enregistrez d'abord la certification du film cloud et des informations de développement, puis définissez le modèle ; puis ajoutez "'default'=>[]" et d'autres contenus dans le fichier "easysms. php" ; Récupérez ensuite l'API_KEY de Yun Pian ; obtenez enfin le code de vérification via le code du contrôleur.

Comment implémenter le code de vérification de téléphone mobile php

L'environnement d'exploitation de cet article : système Windows 7, PHP7.1, ordinateur Dell G3.

Explication détaillée du processus de mise en œuvre du code de vérification PHP SMS

J'utilise mon numéro de téléphone portable pour m'inscrire dans la section d'inscription de mon blog (Laravel), et j'ai besoin pour envoyer un code de vérification par SMS.

Utilisez le fournisseur de services SMS de Yunpian. Bien entendu, vous pouvez choisir librement le fournisseur de services SMS spécifique.

1. Processus de mise en œuvre

Entrez votre numéro de téléphone portable et cliquez pour obtenir le code de vérification
Après avoir soumis le code de vérification SMS correct, l'enregistrement est terminé

🎜>

2. Carte d'idées de mise en œuvre

3. Enregistrez les tranches de cloud et développez la certification des informations et les paramètres des modèles . , qui ne sera pas détaillé ici. [Recommandé : "Tutoriel vidéo PHP"]

4 Installer easy-sms est un envoi de message texte. composant écrit par Anzhengchao. Utilisez ce composant, nous pouvons rapidement implémenter la fonction d'envoi de SMS.

composer require "overtrue/easy-sms"
//新建配置文件
touch config/easysms.php

Ajoutez ensuite le contenu suivant dans le fichier easysms.php :

 <?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;),
      ],
    ],

];

Créez ensuite un ServiceProvider

php artisan make:provider EasySmsServiceProvider

Modifiez le fichier

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(&#39;easysms&#39;));

    });

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

Enfin, ouvrez config/app.php et ajoutez AppProvidersEasySmsServiceProvider::class,

5. Obtenez l'API_KEY de la tranche cloud

Configurez YUNPIAN_API_KEY dans .env. , Notez que ce qui suit doit être remplacé par votre propre clé

6 Obtenez le code de vérification du code du contrôleur (stockez le code et la clé dans le cache)

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. code de vérification

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

Le processus ci-dessus représente les étapes de base du code de vérification du téléphone mobile.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn