Maison  >  Article  >  développement back-end  >  Explication détaillée du processus de mise en œuvre du code de vérification SMS du téléphone mobile PHP Exemple PHP

Explication détaillée du processus de mise en œuvre du code de vérification SMS du téléphone mobile PHP Exemple PHP

jacklove
jackloveoriginal
2018-06-23 16:18:362988parcourir

Cet article présente principalement en détail le processus de mise en œuvre du code de vérification SMS PHP. Il a une certaine valeur de référence. Les amis intéressés peuvent se référer à

J'ai écrit sur mon blog (Laravel) Dans la partie inscription, vous avez besoin. pour utiliser votre numéro de téléphone mobile pour vous inscrire, et vous devez 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.

4. Installez easy-sms est un composant d'envoi de messages texte écrit par Anzhengchao. Grâce à ce composant, nous pouvons rapidement implémenter le texte. fonction d'envoi de messages.


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 aux fournisseurs ::class,

5. Obtenez l'API_KEY de la pièce cloud

Configurez YUNPIAN_API_KEY dans .env Notez que les éléments suivants doivent être remplacés par votre propre clé

6. Code du contrôleur Obtenez le code de vérification (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. Comparez le 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 de la vérification du téléphone mobile. code.

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. J'espère également que tout le monde soutiendra le site Web php chinois.


Articles qui pourraient vous intéresser :

php détermine 0 et les instances php vides grâce à diverses fonctions

Conseils PHP pour identifier les photos inversées prises par iPhone

Implémentation PHP de la fonction de vérification du code de vérification de connexion, exemple php

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