美文网首页程序员开发
thinkphp6 调用阿里云短信服务发送验证码功能实现

thinkphp6 调用阿里云短信服务发送验证码功能实现

作者: i高安 | 来源:发表于2020-11-26 09:16 被阅读0次

    最近做的项目需要用手机号注册账号,之前没有对接过发送短信,今天研究了一下, 写下一贴以做记录。

    项目框架用thinkphp6,短信选择阿里云的短信服务。阿里云提供了两种方式安装sdk,这里选择用composer

    官方文档:

    SDK及DEMO下载

    PHP-SDK快速开始

    OpenAPI Explorer

    @TOC

    1.使用composer安装sdk

    我的开发环境是windows系统,已经安装过composer,本篇不再讨论如何安装。

    composer require alibabacloud/sdk
    

    等待安装好就行了:

    安装成功

    2. 新建send_sms方法

    common.php里新建send_cms:

    /**
     * 发送短信
     * @param $AccessKeyId
     * @param $Secret
     * @param $params
     * @return bool
     * @throws ClientException
     */
    function send_sms ($AccessKeyId, $Secret, $params) {
        if (empty($params['phone'])) {
            return false;
        }
        // 创建客户端
        AlibabaCloud::accessKeyClient($AccessKeyId, $Secret)
            ->regionId('cn-hangzhou')
            ->asDefaultClient();
        try {
            $result = AlibabaCloud::rpc()
                ->product('Dysmsapi')
                ->version('2017-05-25')
                ->action('SendSms')
                ->host('dysmsapi.aliyuncs.com')
                ->options([
                    // 这里的参数可以在openAPI Explorer里面查看
                    'query' => [
                        'RigionId'     => 'cn_hangzhou',
                        'PhoneNumbers' => $params['phone'], // 输入的手机号
                        'SignName'     => $params['sign'],  // 签名信息
                        'TemplateCode' => $params['code'],  // 短信模板id
                        'TemplateParam' => $params['param'] // 可选,模板变量值,json格式
                    ]
                ])
                ->request();
    //        print_r($result->toArray());
            return $result->toArray();
        } catch (ClientException $e) {
            echo $e->getErrorMessage() . PHP_EOL;
        } catch (ServerException $e) {
            echo $e->getErrorMessage() . PHP_EOL;
        }
    }
    

    创建验证手机号码方法:

    /**
     * 校验手机号码
     * @param $phone
     * @return bool
     */
    function validatePhone ($phone) {
        if(!preg_match("/^1[34578]\d{9}$/", $phone)){
            return false;
        }
        return true;
    }
    

    3. 定义配置信息

    config目录下新建alisms.php

    <?php
    /**
     * Created by PhpStorm.
     * User: Administrator
     * Date: 2020/11/25
     * Time: 10:23
     */
    
    return [
        // 填入自己的设置项
        'AccessKeyId' => "",
        'Secret'      => "",
        'SignName'    => "",
        'TemplateCode'=> ""
    ];
    

    4. 控制器中调用方法

     /**
         * 发送手机验证码
         * @return string
         * @throws \AlibabaCloud\Client\Exception\ClientException
         */
        public function registerBySms () {
            $phone  = input('post.phone');
            if (empty($phone) || !validatePhone($phone)) {
                return json_encode(['code'=>100,'msg'=>'请输入正确的手机号!']);
            }
            $sign   = Config::get('alisms.SignName');
            $code   = Config::get('alisms.TemplateCode');
            $ak     = Config::get('alisms.AccessKeyId');
            $sk     = Config::get('alisms.Secret');
            // 请求的参数
            $params = [
                'phone' => $phone,
                'sign'  => $sign,
                'code'  => $code,
                'param' => json_encode([
                    'name' => "测试名称",
                    'number' => 233
                ])
            ];
            $res = send_sms($ak, $sk, $params);
            if ($res['Code'] === 'OK') {
                return json_encode(['code'=>200,'msg'=>"验证码发送成功~"]);
            }
        }
    

    就可以啦
    [图片上传失败...(image-e21da0-1606353390135)]


    相关文章

      网友评论

        本文标题:thinkphp6 调用阿里云短信服务发送验证码功能实现

        本文链接:https://www.haomeiwen.com/subject/tnliiktx.html