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
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 mobile 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 [ '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'), ], ], ];
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('easysms')); }); $this->app->alias(EasySms::class,'easysms'); } }
Enfin, ouvrez config/app.php et ajoutez AppProvidersEasySmsServiceProvider::class,
5. Obtenez l'API_KEY de la tranche cloud
dans les fournisseurs Configurez YUNPIAN_API_KEY dans .env Notez que les éléments suivants doivent être remplacés par votre propre clé6 Le code du contrôleur obtient le code de vérification (stockez le code et la clé dans le cache)<.>
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. Comparez les codes de vérification
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; }
Le processus ci-dessus correspond aux étapes de base du code de vérification du téléphone mobile.
Recommandations associées :
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!