Maison cadre php PensezPHP Utilisation du mode usine pour implémenter l'accès Thinkphp6.0 aux SMS Alibaba Cloud

Utilisation du mode usine pour implémenter l'accès Thinkphp6.0 aux SMS Alibaba Cloud

Apr 29, 2020 pm 10:39 PM
thinkphp6 短信

如今,短信验证码已成为网站、APP的基础必备应用,应用场景十分丰富,随着移动互联网的发展会越来越多。作为一名码农,对第三方短信接口也是必须掌握的。本文php中文网将介绍使用工厂模式怎么实现ThinkPHP6.0接入阿里云短信。

一、环境要求

    PHP版本 >= 7.1.0

    开发环境必须安装有Composer

    已开通阿里云短信服务,并且已获取AccessKey,创建模板和签名

    最重要的,阿里云账户余额一定要有钱。

这里我就不演示开通短信服务和创建签名模板了,小伙伴们可以查看官方文档:https://help.aliyun.com/document_detail/108072.html?spm=a2c4g.11186623.6.565.1b4825903BoqGV

二、使用Composer安装Thinkphp6.0

如果您是第一次安装,请在命令行中切换到您的web目录执行下面的命令

composer create-project topthink/think sms
Copier après la connexion

本教程将安装在C盘www目录下 Utilisation du mode usine pour implémenter laccès Thinkphp6.0 aux SMS Alibaba Cloud三、使用Composer安装 Alibaba Cloud SDK for PHP

进到刚刚创建的sms项目下执行下面的命令

composer require alibabacloud/sdk
Copier après la connexion

Utilisation du mode usine pour implémenter laccès Thinkphp6.0 aux SMS Alibaba Cloud四、使用编辑器打开项目 ,并在config文件夹下创建sms.php配置文件来管理阿里短信配置信息

<?php

return [
    //阿里云短信API接口地址
    &#39;host&#39;              => &#39;dysmsapi.aliyuncs.com&#39;,

    //AccessKey ID
    &#39;access_key_id&#39;     => &#39;您的AccessKey ID&#39;,

    //Access Key Secret
    &#39;access_key_secret&#39; => &#39;您的Access Key Secret&#39;,

    //地区ID
    &#39;region_id&#39;         => &#39;cn-hangzhou&#39;,

    //模板CODE
    &#39;template_code&#39;     => &#39;您的模板CODE&#39;,

    //签名名称
    &#39;sign_name&#39;         => &#39;您的短信签名名称&#39;,
];
Copier après la connexion

五、顺便在config文件夹下打开cache.php添加Redis缓存配置,后面发送短信验证码会用到

<?php

// +----------------------------------------------------------------------
// | 缓存设置
// +----------------------------------------------------------------------

return [
    // 默认缓存驱动
    &#39;default&#39; => env(&#39;cache.driver&#39;, &#39;redis&#39;),

    // 缓存连接方式配置
    &#39;stores&#39;  => [
        &#39;file&#39; => [
            // 驱动方式
            &#39;type&#39;       => &#39;File&#39;,
            // 缓存保存目录
            &#39;path&#39;       => &#39;&#39;,
            // 缓存前缀
            &#39;prefix&#39;     => &#39;&#39;,
            // 缓存有效期 0表示永久缓存
            &#39;expire&#39;     => 0,
            // 缓存标签前缀
            &#39;tag_prefix&#39; => &#39;tag:&#39;,
            // 序列化机制 例如 [&#39;serialize&#39;, &#39;unserialize&#39;]
            &#39;serialize&#39;  => [],
        ],
        // Redis缓存
        &#39;redis&#39; =>  [
            //服务器地址
            &#39;host&#39;      =>  &#39;127.0.0.1&#39;,
            //redis端口
            &#39;port&#39;      =>  6379,
            //驱动方式
            &#39;type&#39;      =>  &#39;redis&#39;,
            //缓存前缀
            &#39;prefix&#39;    => &#39;sms_code_&#39;,
        ]
    ],
];
Copier après la connexion

六、在app目录下创建common/lib/sms/Sms.php接口类,用来约束发送短信验证码的方法

<?php

namespace app\common\lib\sms;

//定义实现发送短信验证码的接口类,用来约束发送验证码的方法
interface Sms
{
    /**
     * @desc 发送短信验证码的方法
     * @param string $phone 手机号
     * @param int $code     验证码
     * @return mixed
     */
    public static function sendCode(string $phone, int $code);
}
Copier après la connexion

七、在common/lib/sms目录下创建AliSms类来实现Sms接口的smsSend()

<?php

namespace app\common\lib\sms;

use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;

class AliSms implements Sms
{

    /**
     * @desc 阿里云发送短信验证码
     * @param string $phone 手机号
     * @param int $code 验证码
     * @return mixed|void
     * @throws ClientException
     */
    public static function sendCode(string $phone, int $code)
    {
        //判断手机号和验证码是否为空
        if (empty($phone) || empty($code)){
            return false;
        }

        AlibabaCloud::accessKeyClient(config(&#39;sms.access_key_id&#39;), config(&#39;sms.access_key_secret&#39;))->regionId(config(&#39;sms.region_id&#39;))->asDefaultClient();

        try {
            $result = AlibabaCloud::rpc()
                ->product(&#39;Dysmsapi&#39;)
                // ->scheme(&#39;https&#39;) // https | http
                ->version(&#39;2017-05-25&#39;)
                ->action(&#39;SendSms&#39;)
                ->method(&#39;POST&#39;)
                ->host(config(&#39;sms.host&#39;))
                ->options([
                    &#39;query&#39; => [
                        &#39;RegionId&#39; =>config(&#39;sms.region_id&#39;),
                        &#39;SignName&#39; => config(&#39;sms.sign_name&#39;),
                        &#39;PhoneNumbers&#39;  =>  $phone,
                        &#39;TemplateCode&#39;  =>  config(&#39;sms.template_code&#39;),
                        &#39;TemplateParam&#39; =>  json_encode([&#39;code&#39;  =>  $code]),
                    ],
                ])->request();
        } catch (ClientException $e) {
            return false;
        } catch (ServerException $e) {
            return false;
        }
        return true;
    }
}
Copier après la connexion

八、在common\lib目录下创建生成短信验证码的类 Code.php

<?php

namespace app\common\lib;

class Code
{
    /**
     * @desc 生成4位或6位短信验证码,默认为4位
     * @param int $length 验证码长度
     * @return int
     */
    public static function getCode(int $length = 4)
    {
        $code = rand(1000,9999);
        if ($length == 6){
            $code = rand(100000,999999);
        }
        return $code;
    }
}
Copier après la connexion

九、在common目录下创建service/Sms.php

<?php

namespace app\common\Service;

use app\common\lib\Code;

class Sms
{
    /**
     * @param string $phone 手机号
     * @param int $lengthCode 验证码长度
     * @param string $type 短信厂家,默认选用AliSms
     * @return mixed
     */
    public static function sendCode(string $phone,int $lengthCode,string $type=&#39;AliSms&#39;)
    {
        //生成短信验证码
        $code = Code::getCode(4);

        //使用工厂模式 调用Lib层发送短信
        $class = "app\common\lib\sms\\".$type;
        $sms = $class::sendCode($phone,$code);

        if ($sms){
            //发送成功,把短信验证码存储Redis缓存中,并给失效时间
            cache($phone,$code,300);
        }
        return $sms;
    }
}
Copier après la connexion

十、在common目录下创建validate/SmsValidate验证器

<?php

namespace app\common\validate;

use think\Validate;

class SmsValidate extends Validate
{
    //验证规则
    protected $rule = [
        &#39;phone&#39;     =>  &#39;require|mobile&#39;,
        &#39;code&#39;      =>  &#39;require|number&#39;
    ];

    //错误信息
    protected $message = [
        &#39;phone.require&#39;     =>  &#39;请输入手机号&#39;,
        &#39;phone.mobile&#39;      =>  &#39;手机号格式错误&#39;,
        &#39;code.require&#39;      =>  &#39;短信验证码不能为空&#39;,
        &#39;code.number&#39;       =>  &#39;短信验证码必须为纯数字&#39;
    ];

    //验证场景
    protected $scene = [
        &#39;sendCode&#39;  =>  [&#39;phone&#39;]
    ];
}
Copier après la connexion

十一、在controller目录下创建Sms.php

<?php

namespace app\controller;

use app\common\validate\SmsValidate;

class Sms
{
    /**
     * @desc 发送短信验证码
     * @return \think\response\Json
     */
    public function code()
    {
        if (request()->isPost()){
            //获取手机号
            $data =  [
                &#39;phone&#39; =>  request()->param(&#39;phone&#39;,&#39;&#39;,&#39;trim&#39;),
            ];

            //参数校验
            $validate = new SmsValidate();
            if (!$validate->scene(&#39;sendCode&#39;)->check($data)){
                return json([&#39;code&#39;=>0,&#39;msg&#39;=>$validate->getError()]);
            }
            //发送短信验证码
            if (\app\common\Service\Sms::sendCode($data[&#39;phone&#39;],6,&#39;AliSms&#39;)){
                return json([&#39;code&#39;=>1,&#39;msg&#39;=>&#39;发送成功,请注意查收。&#39;]);
            }else{
                return json([&#39;code&#39;=>0,&#39;msg&#39;=>&#39;发送失败,请稍后重试!&#39;]);
            }

        }
    }
}
Copier après la connexion

十二、使用PostMan测试发送短信验证码

不输入手机号或输入错误手机号会给相应的提示。

Utilisation du mode usine pour implémenter laccès Thinkphp6.0 aux SMS Alibaba Cloud

Utilisation du mode usine pour implémenter laccès Thinkphp6.0 aux SMS Alibaba Cloud

输入正确的手机号,提示发送短信验证成功Utilisation du mode usine pour implémenter laccès Thinkphp6.0 aux SMS Alibaba Cloud这时我们来看看收到的验证码和缓存中的验证码是否一致Utilisation du mode usine pour implémenter laccès Thinkphp6.0 aux SMS Alibaba Cloud到这里我们的发送验证码已经完成

十三、这时我们需要校验验证码是否正确,在app\controller目录下创建Login.php

<?php

namespace app\controller;

use app\common\validate\SmsValidate;

class Login
{
    public function index()
    {
        //接收参数
        $data = [
            &#39;phone&#39; =>  request()->param(&#39;phone&#39;,&#39;&#39;,&#39;trim&#39;),
            &#39;code&#39;  =>  request()->param(&#39;code&#39;,&#39;&#39;,&#39;trim&#39;),
        ];
        //参数校验
        $validate = new SmsValidate();
        if (!$validate->check($data)){
            return json([&#39;code&#39;=>0,&#39;msg&#39;=>$validate->getError()]);
        }

        //从Redis中获取验证码
        $redisCode = cache($data[&#39;phone&#39;]);

        //判断验证码是否正确
        if (empty($redisCode)){
            return json([&#39;code&#39;=>0,&#39;msg&#39;=>&#39;验证码已过期,请重新发送!&#39;]);
        }
        if ($redisCode != $data[&#39;code&#39;]){
            return json([&#39;code&#39;=>0,&#39;msg&#39;=>&#39;验证码输入错误,请重新输入!&#39;]);
        }

        return &#39;验证成功&#39;;
    }
}
Copier après la connexion

十四、使用PostMan校验验证码是否正确

输入错误的验证码,会给出响应的提示

Utilisation du mode usine pour implémenter laccès Thinkphp6.0 aux SMS Alibaba Cloud

输入正确的验证码,提示验证成功Utilisation du mode usine pour implémenter laccès Thinkphp6.0 aux SMS Alibaba Cloud

看到这里我相信很多小伙伴的验证码都已发送成功了。

不知道小伙伴们有没有发现文中有两处参数校验的代码相识度很高,在后续的thinkphp技术文章中我会对这个问题进行优化,感兴趣的小伙伴请关注。

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment configurer le blocage des messages texte sur iPhone Comment configurer le blocage des messages texte sur iPhone Feb 24, 2024 pm 01:48 PM

Avec la popularité des téléphones intelligents, nous recevons chaque jour un grand nombre de messages texte, dont certains sont des messages publicitaires et promotionnels, et d'autres sont des messages texte indésirables. Ces messages texte nous font non seulement perdre du temps, mais occupent également de l'espace. de nos téléphones portables. Heureusement, les iPhones offrent certaines fonctionnalités pour bloquer ces messages texte ennuyeux. Cet article explique comment bloquer les messages texte sur iPhone. Pour bloquer les messages texte, ouvrez d’abord l’application Paramètres, puis faites défiler et appuyez sur Messages. Dans l'interface des paramètres d'informations, vous pouvez voir certaines options, notamment « Bloqué

Comment ajuster la taille du texte dans les messages texte Comment ajuster la taille du texte dans les messages texte Aug 29, 2023 am 11:38 AM

Comment ajuster la taille de la police dans les messages texte : 1. Sur l'appareil iOS, ouvrez l'application « Paramètres », puis sélectionnez l'option « Affichage et luminosité », recherchez le curseur « Taille du texte » et faites glisser le curseur pour ajuster la taille. du texte sur l'ensemble de l'appareil. La taille du texte, y compris le texte dans le message texte ; 2. Sur l'appareil Android, ouvrez l'application "Paramètres" et sélectionnez l'option "Affichage", recherchez l'option "Taille de la police", et sélectionnez différentes tailles de police pour prévisualiser et ajuster le texte dans la taille de police du message texte.

Comment bloquer les messages texte sur iPhone Comment bloquer les messages texte sur iPhone Jul 31, 2023 pm 09:49 PM

Comment bloquer les SMS de quelqu’un sur iPhone ? Si vous recevez un message texte d'une personne que vous souhaitez bloquer, vous devez ouvrir le message sur votre iPhone. Une fois que vous avez ouvert le message, cliquez sur l'icône en haut avec le numéro de téléphone ou le nom de l'expéditeur en dessous. Cliquez maintenant sur Messages sur le côté droit de l'écran ; vous verrez maintenant un autre écran avec la possibilité de bloquer cet appelant. Cliquez sur ce bouton et sélectionnez Bloquer le contact. Le numéro de téléphone ne pourra plus vous envoyer de SMS ; il ne pourra également plus appeler votre iPhone. Comment débloquer les contacts bloqués sur iPhone ? Si vous décidez d'autoriser une personne bloquée à vous envoyer des messages, vous pouvez la débloquer sur votre iPhone à tout moment. Pour débloquer des contacts sur iPhone, vous devez

Comment récupérer des messages texte supprimés sur un téléphone mobile Apple Comment récupérer des messages texte supprimés sur un téléphone mobile Apple Mar 08, 2024 pm 03:19 PM

Certains messages texte importants ont été supprimés des messages texte du téléphone mobile Apple et de nombreux utilisateurs ne savent pas comment les récupérer. En fait, la méthode de récupération est également très simple. Aujourd'hui, je vais partager avec vous la méthode de récupération détaillée. Comment récupérer des messages texte supprimés sur un téléphone mobile Apple ? Réponse : Il existe quatre méthodes, à savoir la récupération iCloud, la récupération iTunes, la récupération de logiciels tiers et la récupération par l'opérateur 1. Si l'utilisateur utilise iCloud pour sauvegarder les données des messages texte de son mobile téléphone, il peut utiliser directement la récupération de données iCloud. 2. Allez simplement dans [Paramètres]>[Général]>[Restaurer], puis restaurez à partir de la sauvegarde iCloud et sélectionnez la sauvegarde de message texte la plus récente. 3. Si l'utilisateur utilise iTunes pour sauvegarder son téléphone mobile, le lecteur n'a qu'à

PHP réalise la fonction anti-swiping automatique du code de vérification SMS PHP réalise la fonction anti-swiping automatique du code de vérification SMS Sep 13, 2023 pm 12:01 PM

PHP implémente la fonction anti-swiping automatique du code de vérification SMS, qui nécessite des exemples de code spécifiques. Dans les applications Internet modernes, le code de vérification SMS est l'une des méthodes courantes de vérification d'identité. Cependant, en raison de l'existence d'utilisateurs malveillants, les codes de vérification SMS sont souvent vulnérables aux attaques automatisées, ce qu'on appelle le problème anti-swiping des codes de vérification SMS. Afin de protéger la sécurité du compte de l'utilisateur et la stabilité du système, nous devons implémenter la fonction anti-swipe automatique des codes de vérification SMS en PHP. Cet article présentera une méthode simple basée sur l'adresse IP et l'intervalle de temps, et fournira des exemples de code PHP spécifiques. un

Comment récupérer des messages texte supprimés À lire absolument : Tutoriel de récupération de messages texte supprimés. Comment récupérer des messages texte supprimés À lire absolument : Tutoriel de récupération de messages texte supprimés. Mar 25, 2024 pm 12:26 PM

De nombreux amis suppriment accidentellement certains messages texte importants lorsqu'ils utilisent leur téléphone portable. Ils souhaitent les restaurer mais ne savent pas comment procéder. Cet article utilise "Cloud Space" comme exemple pour vous apprendre à répondre aux messages texte supprimés. Tout d’abord, ouvrez votre téléphone et recherchez « l’espace cloud » fourni avec votre téléphone. Comme indiqué ci-dessous : La plupart des téléphones mobiles de marque disposent désormais d'une fonction « service cloud ». Cette fonction est généralement activée par défaut. Une fois activée, elle sauvegardera régulièrement certaines données importantes du téléphone, y compris les messages texte. Après avoir activé le service cloud, déroulez le menu et vérifiez l'heure de sauvegarde des SMS. Comme indiqué ci-dessous : Si l'heure de sauvegarde est antérieure à l'heure à laquelle vous supprimez les messages texte, cela signifie que les messages texte supprimés ont été téléchargés sur l'espace cloud et enregistrés. À ce moment, cliquez sur l'option "Sauvegarder et restaurer".

Laissez les informations d'alerte météo dominer l'écran ! Des technologies de rappel obligatoires telles que les messages flash sont mises en œuvre en première ligne de la prévention et de la réduction des catastrophes. Laissez les informations d'alerte météo dominer l'écran ! Des technologies de rappel obligatoires telles que les messages flash sont mises en œuvre en première ligne de la prévention et de la réduction des catastrophes. Jul 17, 2024 pm 08:28 PM

Selon les informations du 16 juillet, selon le compte rendu public officiel de l'Administration météorologique chinoise, à l'entrée de la principale saison des inondations, de nombreuses régions de mon pays ont rencontré de fortes précipitations continues et de fortes convections, rendant la situation de prévention et de secours contre les inondations complexe et grave. . Depuis le début de cette année, l'Administration météorologique chinoise a tenu plusieurs réunions pour déployer des efforts de prévention et de réduction des catastrophes, appelant au renforcement du lien entre l'alerte précoce et l'intervention d'urgence, promouvant vigoureusement l'application de nouvelles technologies pour les rappels obligatoires tels que les « messages flash ». ", et en améliorant continuellement la couverture publique et le taux de réception des informations d'alerte précoce, de sorte que les rappels de prévention soient plus ciblés, formant une boucle fermée d'alerte précoce, de réponse et de retour d'information pour obtenir des opportunités de prévention des inondations et de secours en cas de catastrophe. 1. Le Centre du service météorologique public de l'Administration météorologique chinoise (Centre national de diffusion des informations d'alerte précoce) renforce la directionnalité des alertes précoces et établit une technologie de diffusion d'alertes précoces de haut niveau basée sur des rappels obligatoires de « messages flash ».

Tutoriel sur la façon de résoudre le problème de non-réception de messages texte sur iPhone 11 Tutoriel sur la façon de résoudre le problème de non-réception de messages texte sur iPhone 11 Mar 23, 2024 am 08:41 AM

1. Il se peut que le filtrage des contacts par SMS soit activé ou que iMessages sur le téléphone ne soit pas activé. 2. Il se peut que le mode avion et le mode Ne pas déranger soient activés. 3. L'opérateur de votre région peut avoir une interruption de service ou des arriérés de paiement de téléphonie mobile. Il est recommandé de contacter l'opérateur pour résoudre le problème. 4. Le système de téléphonie mobile est peut-être défectueux. Il est recommandé de mettre à jour les paramètres de l'opérateur et le système de téléphonie mobile et de redémarrer le téléphone mobile. 5. Il peut s'agir d'une panne matérielle. Il est recommandé de se rendre au centre de service Apple pour un test.

See all articles