Maison  >  Article  >  développement back-end  >  Explication détaillée des étapes pour implémenter la fonction de code de vérification SMS de Laravel

Explication détaillée des étapes pour implémenter la fonction de code de vérification SMS de Laravel

php中世界最好的语言
php中世界最好的语言original
2018-05-16 14:04:432328parcourir

Cette fois, je vais vous apporter une explication détaillée des étapes pour mettre en œuvre la fonction d'envoi du code de vérification par message texte dans Laravel Quelles sont les précautions pour la mise en œuvre de la fonction de. envoi du code de vérification dans Laravel via SMS Ce qui suit est un cas pratique, jetons un coup d'œil.

Avant-propos

Il y a quelque temps, je voulais mettre en place une fonction de code de vérification par SMS, mais elle est restée bloquée pendant longtemps.

Tout d'abord, j'ai utilisé le service SMS d'Alibaba Cloud Le premier processus d'accès est le suivant :

Activer le service SMS sur Alibaba Cloud Quoi. vous devez faire ensuite :

1. Demander la signature 2. Demander un modèle 3. Créer une clé d'accès Il convient de mentionner que vous pouvez créer une clé d'accès via le sous-utilisateur fourni par Alibaba Cloud, qui. peut être plus sécurisé 4 , Recharge

Laravel propose de nombreux packages d'extension pour les services SMS. J'ai déjà utilisé Alibaba L'utilisation est la suivante :

1. exécutez : composer require iscms/alisms-for-laravel

2. Ajoutez : iscmsAlismsAlidayuServiceProvider::class aux fournisseurs de configapp.php, similaire à :

3. >, cela ajoutera un fichier alisms.php sous le dossier de configuration avec le contenu suivant : php artisan vendor:publish

<?php
 return [
  &#39;KEY&#39; =>env(&#39;ALISMS_KEY&#39;,null),
  &#39;SECRETKEY&#39;=>env(&#39;ALISMS_SECRETKEY&#39;,null),
 ];
4. Écrivez dans le fichier .env :

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

Remarque : ALISMS_KEY et ALISMS_SECRETKEY sont les paires de clés d'accès générées par Alibaba Cloud (AccessKeyId et AccessKeySecret)

Commencez :

1. Avant de commencer, SMS doit être introduit dans le

contrôleur qui doit appeler le service SMS :

 

use iscmsAlismsSendsmsPusher as Sms;

public function construct(Sms $sms)
 {
  $this->sms=$sms;
 }
 public function index()
 {
  $result=$this->sms->send("$phone","$name","$content","$code");
 }
Description du paramètre : $phone, $name , $content, $code

  • $phone fait référence au numéro SMS de la personne qui reçoit le SMS,

  • $name fait référence au Signature SMS qui peut être signée sur Alibaba Dayu SMS http://www .alidayu.com/admin/service/sign Rechercher

  • $content fait référence au contenu variable dans le modèle SMS. Par exemple,

dans le modèle My Ali Big Fish a le modèle SMS suivant

Nom du modèle : Code de vérification de la vérification de l'identité

ID du modèle : SMS_3910275

*Contenu du modèle : code de vérification$[code ], vous authentifiez ${product}, ne le dites à personne d'autre !

Ensuite, le $content correspondant devrait être

   {
  code:"生成的验证码",
  product:"示例项目"
 }
Maintenant, il peut être utilisé normalement, mais je ne sais pas pourquoi, lors de l'utilisation, la console a renvoyé code=11 Le code d'erreur a été vérifié sur Taobao et cela était dû à un problème avec les autorisations ISV. Après cela, j'ai activé le contrôle des autorisations utilisateur au maximum sur Alibaba Cloud, mais cette erreur s'est toujours produite, j'ai modifié le package d'extension et le problème persiste. existe toujours aujourd'hui. Il n'y avait pas de solution, j'ai donc écrit la version native en Laravel.

Téléchargez d'abord le package SDK pour le service SMS sur le site officiel d'Alibaba Cloud

Le package d'outils SDK contient un total de 2 bibliothèques de classes, un package aliyun-php-sdk-core et le l'autre est le package alicom-dysms-api, ajoutez ces deux packages à la bibliothèque de classes du projet en tant que dépendances.

Sélectionnez la version PHP du package sdk et décompressez le package compressé. Il contient quatre dossiers : api_demo, api_sdk, msg_demo, msg_sdk

Créez un nouveau fichier nommé libs sous le dossier de l'application. du dossier du projet laravel, copiez api_sdk et msg_sdk dans le dossier libs.

Trouvez le fichier composer.json dans le répertoire racine, recherchez l'option classmap définie dans composer.json et écrivez les deux packages importés :

Terminal Entrez dans le dossier du projet et exécutez :

composer dumpautoload
De cette façon, la bibliothèque de classes tierce est introduite dans Laravel.

Créer un fichier de code

Je l'ai simplement encapsulé :

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

之后用就实例化调用方法就可以了。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

怎么让360搜索引擎收录php改写方法

PHP使用Curl实现模拟登录及抓取数据步骤详解

PHP使用file_get_contents发送http请求步骤详解

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