短信服务之阿里云平台

开通阿里云短信服务

登录阿里云进入控制台 产品与服务–>云通讯–>短信服务–>国内消息

1.创建 签名与短信模板
在这里插入图片描述
2.创建 AccessKey
在这里插入图片描述
3.本人这里使用子账号 创建专门把短信服务授权给该账号
在这里插入图片描述
在这里插入图片描述

集成到TP5框架

安装

1.官方PHP SKD Github : https://github.com/aliyun/openapi-sdk-php-client
2.使用composer安装

composer require alibabacloud/client

使用composer的安装步骤需要在composer.json里面去配置一下,本来不想说的,又怕有些不懂,特此做一下说明:
如下图在composer.json文件中的require里加入:“alibabacloud/client”: “^1.5”。
在这里插入图片描述
然后再执行composer命令,如下图,其中也会生成一些依赖包
在这里插入图片描述

使用

可以在common文件夹增加一个Sms类
在这里插入图片描述
贴上代码

<?php
namespace app\common;

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

class Sms {

    /**
     * 发送登录/注册短信
     * @param string phone 手机号码
     * @param int number 验证码
     * @return array
     */
    public static function sendLoginCode(string $phone, int $number) : array
    {
        try{
            AlibabaCloud::accessKeyClient(env('ACCESS_KEY_ID'), env('ACCESS_KEY_SECRET'))
                ->regionId('cn-hangzhou')
                ->asDefaultClient();
            $options = [
                'query' => [
                    'RegionId' => "cn-hangzhou",
                    'PhoneNumbers' => $phone,
                    'SignName' => env('SIGN'),
                    'TemplateCode' => env('ZC_MB_ID'),
                    'TemplateParam' => json_encode([
                        "code" => $number,
                        "product" => "dsd"
                    ])
                ]
            ];
            $result = AlibabaCloud::rpc()
                ->product('Dysmsapi')
                // ->scheme('https') // https | http
                ->version('2017-05-25')
                ->action('SendSms')
                ->method('POST')
                ->host('dysmsapi.aliyuncs.com')
                ->options($options)
                ->request();
            if($result->Code == 'OK') {
                $code = 0;
                $msg = '发送成功';
                //把生成的随机数存进redis缓存
                $key = 'zc_code_' . $phone;
                app('mycache')->set($key, $number, 300);
            }else{
                $code = 2;
                $msg = $result->Message;
            }

            return [$code, $msg];
        }catch(Exception $e){
            throw $e;
        }
    }
}

顺便把验证码发送和验证一块贴出来吧,上面那一块是真正的调用短信发送服务,下面是发送服务前和发送服务后的操作

<?php
namespace app\index\controller;

use think\Validate;
use app\common\Sms;

class SmsMsg {


    /**
     * 发送登录/注册短信验证码
     */
    public function sendLoginCode()
    {
        try{
            $rule = [
                'phone' => 'require'
            ];
            $errorMsg = [
                'phone.require' => '手机号码不能为空'
            ];
            $validate = Validate::make($rule, $errorMsg);
            $check = $validate->check(request()->post());
            if(!$check){
                $msg = $validate->getError();
                return json(['code' => 4000, 'msg' => $msg]);
            }

            $phone = request()->post('phone');//获取手机号码
            $number = mt_rand(100000, 999999);//生成6位数字码
            //发送
            list($code, $msg) = Sms::sendLoginCode($phone, $number);
            if($code){
                return json(['code' => $code, 'msg' => $msg]);
            }

            return json(['code' => $code, 'msg' => '发送成功']);
        }catch(ClientException $e){
            throw new Excetpion($e->getErrorMessage());
        }catch(ServerException $e){
            throw new Excetpion($e->getErrorMessage());
        }catch(Exception $e){
            throw $e;
        }
    }

    /**
     * 检测验证码有效性
     */
    public function checkLoginCode()
    {
        try{
            $rule = [
                'phone' => 'require',
                'code' => 'require|number'
            ];
            $errorMsg = [
                'phone.require' => '手机号码不能为空',
                'code.require' => '手机号码不能为空',
                'code.number' => '手机号码必须为数字'
            ];
            $validate = Validate::make($rule, $errorMsg);
            $check = $validate->check(request()->post());
            if(!$check){
                $msg = $validate->getError();
                return json(['code' => 40000, 'msg' => $msg]);
            }

            $phone = request()->post('phone');//手机号码
            $code = request()->post('code');//验证码

            $key = 'zc_code_' . $phone;
            $validCode = app('mycache')->get($key);
            //0为不通过, 1为通过
            $data = [
                'is_valid' => 0
            ];
            if($code == $validCode){
                $data['is_valid'] = 1;
            }

            return json(['code' => 0, 'msg' => '验证成功', 'data' => $data]);
        }catch(Exception $e){
            throw $e;
        }
    }
}

如果解决了你的疑问,麻烦点个赞吧,当然也不介意您关注收藏下的呢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值