Home  >  Article  >  Backend Development  >  PHP example of implementation method of sending verification code via SMS in laravel

PHP example of implementation method of sending verification code via SMS in laravel

jacklove
jackloveOriginal
2018-06-26 17:16:221990browse

When doing user registration and personal center security management, it is often necessary to use SMS to send verification codes. The following article mainly introduces you to the implementation method of sending verification codes through SMS in laravel. The article introduces it through sample code. For details, friends who need it can refer to it. Let’s learn with the editor below.

Preface

Some time ago I wanted to implement a SMS verification code function, but it was stuck for a long time.

First of all, I used Alibaba Cloud’s SMS service. The first access process is as follows:

Open SMS service on Alibaba Cloud What you need to do next:

1. Apply for signature 2. Apply for template 3. Create Accesskey. It is worth mentioning that you can create Accesskey through the sub-user provided by Alibaba Cloud, which can be more secure 4 , Recharge

laravel has many extension packages for SMS services. I used Alibaba before. Use the following:

1. Enter your project from the terminal or command, run: composer require iscms/alisms-for-laravel

2, add: iscms\Alisms\AlidayuServiceProvider::class to the Providers of config\app.php, similar to:

3. Run: php artisan vendor:publish. This will add an alisms.php file under the config folder with the following content:

<?php
 return [
  &#39;KEY&#39; =>env(&#39;ALISMS_KEY&#39;,null),
  &#39;SECRETKEY&#39;=>env(&#39;ALISMS_SECRETKEY&#39;,null),
 ];

4. Write in the .env file:

ALISMS_KEY=23305789
ALISMS_SECRETKEY=**************

Note: ALISMS_KEY and ALISMS_SECRETKEY are the access key pairs generated by Alibaba Cloud (AccessKeyId and AccessKeySecret)

Get started:

1 , introduce SMS in the controller where you need to call the SMS service:

Use iscms\Alisms\SendsmsPusher as Sms;

public function __construct(Sms $sms)
 {
  $this->sms=$sms;
 }

 public function index()
 {
  $result=$this->sms->send("$phone","$name","$content","$code");
 }

Parameter description: $phone,$name,$content,$code


  • $phone refers to the SMS number of the party receiving the SMS,

  • $name refers to the SMS signature and can be found at Alibaba Dayu SMS Signature http://www.alidayu.com/admin/service/sign

  • $content refers to the SMS Variable content in the template. For example

There is the following SMS template in my Ali Big Fish template

Template name: Identity Verification Verification Code


Template ID: SMS_3910275


*Template content: Verification code $[code], you are authenticating ${product}, don’t tell others!


Then the corresponding $content should be


   {
  code:"生成的验证码",
  product:"示例项目"
 }

It can be used normally at this point, but not I don’t know why. When I was using it, the console returned an error code of code=11. After checking on Taobao, it was because of the isv permission issue. After that, I turned the user permission control to the maximum on Alibaba Cloud, but it still happened. This error occurred, and the problem persisted after changing to an extension package. It has not been solved yet, so I wrote the native version in laravel.

First download the sdk package for SMS service from the Alibaba Cloud official website


The SDK tool kit contains a total of 2 class libraries, one aliyun-php-sdk-core package, The other one is the alicom-dysms-api package. Add these two packages to the project class library as dependencies.


Select the PHP version of the sdk package and unzip the compressed package. There are four folders in it: api_demo, api_sdk, msg_demo, msg_sdk


In the app folder of the laravel project Create a new folder named libs and copy api_sdk and msg_sdk to the libs folder.


Find the composer.json file in the root directory, find the classmap option defined in composer.json, and write the two imported packages:

Enter the terminal into the project folder and run:


composer dumpautoload

In this way, the third-party class library is introduced in laravel.


Create code file


I simply encapsulated it:


<?php
 // namespace App\Http\Controllers\sms;
 use Aliyun\Core\Config;
 use Aliyun\Core\Profile\DefaultProfile;
 use Aliyun\Core\DefaultAcsClient;
 use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
 use Aliyun\Api\Sms\Request\V20170525\QuerySendDetailsRequest;
 use App\Http\Controllers\Controller;

 // 加载区域结点配置
 Config::load();
 class SmsController extends Controller 
 {

  /**
   * 构造器
   * @param string $accessKeyId 必填,AccessKeyId
   * @param string $accessKeySecret 必填,AccessKeySecret
   */
  public function __construct($accessKeyId="######",$accessKeySecret="#######")
  {
   // 短信API产品名
    $product = "Dysmsapi";
   // 短信API产品域名
    $domain = "dysmsapi.aliyuncs.com";
    // 暂时不支持多Region
    $region = "cn-hangzhou";
    // 服务结点
    $endPointName = "cn-hangzhou";
    // 初始化用户Profile实例
    $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
    // 增加服务结点
    DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);

    // 初始化AcsClient用于发起请求
    $this->acsClient = new DefaultAcsClient($profile);
  }


  /**
   * 发送短信范例
   * @param [type] $phoneNumbers 必填, 短信接收号码
   * @param string $signName 必填, 短信签名,应严格"签名名称"填写,
   * @param string $templateCode 必填, 短信模板Code,应严格按"模板CODE"填写,
   * @param [type] $outId  选填, 假如模板中存在变量需要替换则为必填项
   * @return [type]    [description]
   */
  public function sendSms($phoneNumbers,$signName="XX软件",$templateCode="SMS_XXXXXX",$outId=null)
  {
    // 初始化SendSmsRequest实例用于设置发送短信的参数
   $request = new SendSmsRequest;
    // 必填,设置雉短信接收号码
   $request->setPhoneNumbers($phoneNumbers);
    // 必填,设置签名名称
   $request->setSignName($signName);
   // 必填,设置模板CODE
   $request->setTemplateCode($templateCode);
   $num = rand(100000,999999);
    // 可选,设置模板参数
   $request->setTemplateParam(json_encode(
    Array(
     "code" => "$num"
    )
   ));

    // 可选,设置流水号
   if($outId) {
    $request->setOutId($outId);
   }

    // 发起访问请求
   $acsResponse = $this->acsClient->getAcsResponse($request);
  }


  /**
   * 查询短信发送情况范例
   * @param [type] $phoneNumbers 必填, 短信接收号码
   * @param [type] $sendDate  必填,短信发送日期,格式Ymd,支持近30天记录查询 
   * @param integer $pageSize 必填,分页大小
   * @param integer $currentPage 必填,当前页码
   * @param [type] $bizId  选填,短信发送流水号
   * @return [type]    [description]
   */
  public function queryDetails($phoneNumbers,$sendDate,$pageSize=10,$currentPage=1,$bizId=null)
  {
    // 初始化QuerySendDetailsRequest实例用于设置短信查询的参数
   $request = new QuerySendDetailsRequest();
   $request->setPhoneNumber($phoneNumbers);
   $request->setSendDate($sendDate);
   $request->setPageSize($pageSize);
   $request->setCurrentPage($currentPage);
   if($bizId) {
    $request->setBizId($bizId);
   }
   $acsResponse = $this->acsClient->getAcsResponse($request);
  }
 }

After that, just instantiate and call the method.

Summary

Articles you may be interested in:

PHP receiveMail implementation Email receiving function php example

PHP sharing image generation method php skills

laravel 5.4 vue vux element environment PHP example of the matching process

The above is the detailed content of PHP example of implementation method of sending verification code via SMS in laravel. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn