靓声靓影商行

Good Luck To You!

PHP 实现阿里云短信API对接(登录/注册参考)

2023-11-01 17:41:47

目录


一、阿里云SDK依赖(需要安装好composer)


二、使用步骤


1.登录/注册接口对接的阿里云发送短信的控制器


2.登录发送短信/登录短信验证


3:注册发送短信/注册短信验证


登录和注册时都需要查询用户是否已存在:


登录是为了查看用户是否是新用户(新用户去注册)


注册是为了查看用户是否已经被注册(被注册去登录)


验证成功后:


登录验证就签发token——登陆成功(前端跳转首页)


注册验证就将注册信息添加到用户表里——注册成功(前端跳转登录)


一、阿里云SDK依赖(需要安装好composer)

1:win+R打开命令行进行阿里云换源


composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/


2:cd 到项目根路径下安装依赖


composer require alibabacloud/client


二、使用步骤

1.登录/注册接口对接的阿里云发送短信的控制器

<?php
 
namespace app\controller;
 
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\NlsCloudMeta\NlsCloudMeta;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
use app\model\sms;  /*引入你自己的短信模型地址*/
 
class Indexsms
{
 
    /**
     * 发送短信验证码
     */
 
    /*接收的是登录接口发送过来的数据phone:手机号,type:请求类型-login/register*/
 
    public function index($phone, $type)
    {
        $code = rand(100000, 999999); /*验证码随机*/
 
        $config = [   /*将下面的参数换成在阿里云上得到的参数*/
 
            'accessKeyId' => 'Access Key ID',
 
            'accessSecret' => 'Access Key Secret',
 
            'SignName' => '短信签名',
 
            'TemplateCode' => '模板ID',
 
            'regionId' => 'cn-hangzhou' /*不用改这里的地址*/
 
        ];
 
        $param = ['code' => $code];
        AlibabaCloud::accessKeyClient($config['accessKeyId'], $config['accessSecret'])
 
            ->regionId($config['regionId'])
 
            ->asDefaultClient();
 
        try {
 
            $result = AlibabaCloud::rpc()
 
                ->product('Dysmsapi')
 
                ->version('2017-05-25')
 
                ->action('SendSms')
 
                ->method('POST')
 
                ->options([
 
                    'query' => [
 
                        'PhoneNumbers' => $phone,
 
                        'SignName' => $config['SignName'],
 
                        'TemplateCode' => $config['TemplateCode'],
 
                        'TemplateParam' => json_encode($param)
 
                    ],
 
                ])
 
                ->request();
 
            /*发送成功存入数据库,将手机号,验证码,请求类型写入短信表*/
            $smsModel = new sms();
            $saveSms = $smsModel->saveSms($phone, $code, $type);
 
            return $result->toArray();
        } catch (ClientException $e) {
 
            echo $e->getErrorMessage() . PHP_EOL;
        } catch (ServerException $e) {
 
            echo $e->getErrorMessage() . PHP_EOL;
        }
    }
}


2.登录发送短信/登录短信验证

    //短信登陆
 
    /**
     * remarks:用户登录-短信发送
     *
     * phone(手机号)/type(long/register)
     */
    public function index()
    {
        /*用户表中查询手机号是否存在*/
        $adminModel = new admin();
        $data = request::only(['phone', 'type']);
        $regular = preg_match('/^1[3456789]\d{9}$/', $data['phone']);/*验证手机格式*/
        if ($regular == 0) {
            return json(['code' => 0, 'msg' => '手机号格式不正确']);
        } else {
            $checkUser = $adminModel->checkphone($data['phone'], 'login');
            if ($checkUser == null) {
                return json(['code' => 0, 'msg' => '抱歉,该手机号是新户暂时不能使用短信登陆!']);
            } else {
                $sendsms = new Indexsms();/*实列化发送短信的阿里控制器*/
                $send = $sendsms->index($data['phone'], $data['type']);/*带数据过去*/
                if ($send) {
                    return json(['code' => 1, 'msg' => '发送成功,请注意查收短息5分钟内生效!']);
                } else {
                    return json(['code' => 0, 'msg' => '发送失败,网络繁忙请稍后再试!']);
                }
            }
        }
    }
 
    /**
     * remarks:用户登录-验证短信
     *
     * phone/type
     */
    public function checkLogin()
    {
        $data = request::only(['phone', 'code', 'type']);
        /*查询短信验证码*/
        $smsModel = new sms();
        $checkCode = $smsModel->checkCode($data);
        if ($checkCode == null) {
            return json(['code' => 0, 'msg' => '验证码错误,请重新核对!']);
        } else {
            $uid = new admin();
            $key = 'token';
            $payload = [
                "iat" => time(), /*令牌签发时间*/
                "nbf" => time(), /*如果当前时间在nbf里的时间之前,则Token不被接受*/
                "exp" => time() + 60 * 60 * 24 * 7, /*过期时间*/
                "uid" => $uid->uid($data['phone']),/*验证用户id是否相同*/
            ];
            $smsModel->editCodeState($checkCode['id']);/*验证成功后更改短信的有效性(改无效)*/
            $token = JWT::encode($payload, $key, "HS256");
            return json(['code' => 1, 'msg' => '登陆成功', 'token' => $token]);
        }
    }


3:注册发送短信/注册短信验证

     * remarks:注册
     */
    public function register()
    {
        $data = request::only(['phone', 'type']);
        $regular = preg_match('/^1[3456789]\d{9}$/', $data['phone']);
        if ($regular == 0) {
            return json(['code' => 0, 'msg' => '手机号格式不正确']);
        } else {
            /*查询手机号是否为空*/
            $nullphone = new admin();
            if ($nullphone->checkphone($data['phone']) == null) {
                $sendsms = new Indexsms();/*实列化发送短信的阿里控制器*/
                $send = $sendsms->index($data['phone'], $data['type']);
                if ($send) {
                    return json(['code' => 1, 'msg' => '发送成功,请注意查收短息5分钟内生效!']);
                } else {
                    return json(['code' => 0, 'msg' => '发送失败,网络繁忙请稍后再试!']);
                }
            } else {
                return json(['code' => 0, 'msg' => '抱歉,该手机号已被注册!']);
            }
        }
    }
 
    /**
     * remarks:用户注册-验证短信
     *
     */
    public function checkRegister()
    {
        $data = request::only(['phone', 'code', 'password', 'type']);
        $register = new sms();
        $codeinfo = $register->checkCode($data);
        if ($codeinfo == null) {
            return json(['code' => 0, 'msg' => '验证码错误,请重新核对!']);
        } else if (!empty($data['phone']) && !empty($data['password'])) {
            /*修改短信有效状态*/
            $register->editCodeState($codeinfo['id']);
            $password = md5($data['password']);
            $adduser = new admin();
            $adduser = $adduser->save([
                'phone' => $data['phone'],
                'password' => $password,
            ]);
            return json(['code' => 1, 'msg' => '注册成功!']);
        } else {
            /*注册失败*/
            return json(['code' => 1, 'msg' => '表单信息不完整!']);
        }
    }





作者:admin 分类:未分类 浏览:432 评论:0