cari
Rumahpembangunan bahagian belakangtutorial phpPHP手机短信验证码实现流程详解php实例

这篇文章主要为大家详细介绍了PHP手机短信验证码的实现流程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本人在自己博客(Laravel)的注册部分 使用手机号注册,需要发送短信验证码。

使用云片的短信服务提供商,当然具体短信服务提供商大家可以自由选择。

1、实现流程

输入手机号,点击获取验证码
提交正确的短信验证码后,注册完成

2、实现思路图

3、注册 云片,以及开发信息认证,模板设置,这里就不详细展开了

4、安装 easy-sms,easy-sms 是安正超写的一个短信发送组件,利用这个组件,我们可以快速的实现短信发送功能。


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


然后在 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;),
      ],
    ],

];


然后创建一个 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(&#39;easysms&#39;));

    });

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


最后 打开config/app.php 在 providers 中增加 App\Providers\EasySmsServiceProvider::class,

5、获取云片的API_KEY

在.env中配置 YUNPIAN_API_KEY,注意下面需要替换为你自己的 key

6、控制器代码 获取验证码(将code 以及key存入缓存)



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、对比验证码


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通过各种函数判断0和空php实例

php识别翻转iphone拍摄的颠倒图片php技巧

PHP实现登录验证码校验功能php实例

Atas ialah kandungan terperinci PHP手机短信验证码实现流程详解php实例. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Bagaimana anda mengubah suai data yang disimpan dalam sesi PHP?Bagaimana anda mengubah suai data yang disimpan dalam sesi PHP?Apr 27, 2025 am 12:23 AM

Tomodififydatainaphpsession, startTheSessionWithSsion_start (), thenuse $ _SessionToset, Modify, Orremovariables.1) startTheSession.2) setOrmodifySessionVariabelinging $ _Session.3) ReveVariablesWithunset ()

Berikan contoh menyimpan array dalam sesi PHP.Berikan contoh menyimpan array dalam sesi PHP.Apr 27, 2025 am 12:20 AM

Array boleh disimpan dalam sesi PHP. 1. Mulakan sesi dan gunakan session_start (). 2. Buat array dan simpan dalam $ _Session. 3. Dapatkan array melalui $ _Session. 4. Mengoptimumkan data sesi untuk meningkatkan prestasi.

Bagaimanakah pengumpulan sampah berfungsi untuk sesi PHP?Bagaimanakah pengumpulan sampah berfungsi untuk sesi PHP?Apr 27, 2025 am 12:19 AM

Pengumpulan sampah sesi PHP dicetuskan melalui mekanisme kebarangkalian untuk membersihkan data sesi yang telah tamat tempoh. 1) Tetapkan kebarangkalian pencetus dan kitaran hayat sesi dalam fail konfigurasi; 2) Anda boleh menggunakan tugas cron untuk mengoptimumkan aplikasi beban tinggi; 3) Anda perlu mengimbangi kekerapan dan prestasi pengumpulan sampah untuk mengelakkan kehilangan data.

Bagaimana anda dapat mengesan aktiviti sesi di PHP?Bagaimana anda dapat mengesan aktiviti sesi di PHP?Apr 27, 2025 am 12:10 AM

Mengesan aktiviti sesi pengguna dalam PHP dilaksanakan melalui pengurusan sesi. 1) Gunakan session_start () untuk memulakan sesi. 2) Simpan dan data akses melalui array $ _Session. 3) Hubungi session_destroy () untuk mengakhiri sesi. Penjejakan sesi digunakan untuk analisis tingkah laku pengguna, pemantauan keselamatan, dan pengoptimuman prestasi.

Bagaimana anda boleh menggunakan pangkalan data untuk menyimpan data sesi PHP?Bagaimana anda boleh menggunakan pangkalan data untuk menyimpan data sesi PHP?Apr 27, 2025 am 12:02 AM

Menggunakan pangkalan data untuk menyimpan data sesi PHP dapat meningkatkan prestasi dan skalabilitas. 1) Konfigurasi MySQL untuk menyimpan data sesi: Sediakan pemproses sesi dalam kod php.ini atau php. 2) Melaksanakan pemproses sesi tersuai: Tentukan fungsi terbuka, tutup, baca, tulis dan lain -lain untuk berinteraksi dengan pangkalan data. 3) Pengoptimuman dan amalan terbaik: Gunakan pengindeksan, caching, pemampatan data dan penyimpanan yang diedarkan untuk meningkatkan prestasi.

Terangkan konsep sesi PHP secara ringkas.Terangkan konsep sesi PHP secara ringkas.Apr 26, 2025 am 12:09 AM

PhpSSsionsTrackUserDataacrossmultiplePagerequestSuseUniquidStoredinacookie.here'ShoWtomanAgeThemEffectely: 1) startAnSessionWithSession_Start () danStoRedatain $ _Session.2)

Bagaimana anda melengkapkan semua nilai yang disimpan dalam sesi PHP?Bagaimana anda melengkapkan semua nilai yang disimpan dalam sesi PHP?Apr 26, 2025 am 12:06 AM

Dalam PHP, iterating melalui data sesi dapat dicapai melalui langkah -langkah berikut: 1. Mulakan sesi menggunakan session_start (). 2. ITERATE melalui gelung foreach melalui semua pasangan nilai utama dalam array $ _Session. 3. Apabila memproses struktur data kompleks, gunakan fungsi is_array () atau is_object () dan gunakan print_r () untuk mengeluarkan maklumat terperinci. 4. Apabila mengoptimumkan traversal, paging boleh digunakan untuk mengelakkan memproses sejumlah besar data pada satu masa. Ini akan membantu anda mengurus dan menggunakan data sesi PHP dengan lebih cekap dalam projek sebenar anda.

Terangkan cara menggunakan sesi untuk pengesahan pengguna.Terangkan cara menggunakan sesi untuk pengesahan pengguna.Apr 26, 2025 am 12:04 AM

Sesi ini menyedari pengesahan pengguna melalui mekanisme pengurusan negara pelayan. 1) Penciptaan sesi dan penjanaan ID unik, 2) IDS diluluskan melalui kuki, 3) kedai pelayan dan mengakses data sesi melalui ID, 4) Pengesahan pengguna dan pengurusan status direalisasikan, meningkatkan keselamatan aplikasi dan pengalaman pengguna.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini