thinkphp6 调用阿里云短信服务发送验证码功能实现
2022-11-24 11:10:29
162
{{single.collect_count}}

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

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

官方文档:

SDK及DEMO下载

PHP-SDK快速开始

OpenAPI Explorer

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'=>"验证码发送成功~"]);}}

就可以啦
在这里插入图片描述


回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}