Maison > Article > développement back-end > Méthode d'implémentation d'envoi de code de vérification via SMS dans l'exemple PHP Laravel
Lors de l'enregistrement des utilisateurs et de la gestion de la sécurité du centre personnel, il est souvent nécessaire d'utiliser des SMS pour envoyer des codes de vérification. L'article suivant vous présente principalement la méthode de mise en œuvre de l'envoi de codes de vérification par SMS dans Laravel. code. Pour plus de détails, les amis qui en ont besoin peuvent s'y référer. Apprenons avec l'éditeur ci-dessous.
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 [ 'KEY' =>env('ALISMS_KEY',null), 'SECRETKEY'=>env('ALISMS_SECRETKEY',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 )
Démarrez :
1. Introduisez SMS dans le contrôleur où vous devez 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
{ code:"生成的验证码", product:"示例项目" }Maintenant, il peut être utilisé normalement. Je ne sais pas pourquoi. Lorsque je l'utilisais, la console a renvoyé un code d'erreur code = 11. Après avoir vérifié sur Taobao, c'était à cause du problème d'autorisation isv. Après cela, j'ai augmenté le contrôle des autorisations utilisateur au maximum sur Alibaba. Cloud, mais cette erreur se produit toujours. Même après le passage à un package d'extension, le problème persiste. Il n'a pas encore été résolu, j'ai donc écrit le package natif dans Laravel. Téléchargez d'abord le package SDK pour le service SMS sur le site officiel d'Alibaba Cloud
composer dumpautoloadDe cette façon, la bibliothèque de classes tierce est introduite dans Laravel .
<?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); } }Après cela, instanciez et appelez simplement la méthode.
Résumé
Articles qui pourraient vous intéresser :Implémentation de PHP getMail Exemple PHP de fonction de réception d'e-mail
Méthode de génération de la technique php d'image partagée PHP
laravel 5.4 + vue + vux + Le processus de correspondance d'environnement d'Element introduit des exemples 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!