Thinkphp5.1用阿里云短信发送验证码

Thinkphp5.1短信 tp5.1短信 thinkphp发短信 composer短信 composer阿里云短信

好久没有更新阿里云短信API了,最近做新项目,到阿里云官网想下个最新的sdk发现已经更新好久了,之前只是一直在用老的,而且好久没关注,这次记录一下。

申请模版和签名不多说了,自己去阿里云管理台操作好,发送短信的文档(短信发送API)也写的很清楚,这里记录一下thinkphp5.1调用API发送短信。

使用阿里云短信服务发送验证码示例:

1.先切换到项目根目录,然后composer安装sdk,

composer  require  alibabacloud/client

f2/95de04cfd412c97edf8a109404f428.png


这里会下一堆东西,圈起来的貌似都是(不是很确定,因为当天没来得及记下来[黑线][黑线][黑线][黑线][黑线]

2.因为项目这边前后台都可能会用到,所以我这边就写在了common.php里(application/common.php),配置信息放在config/app.php里。

<?php

// 应用公共文件

use AlibabaCloud\Client\AlibabaCloud;

use AlibabaCloud\Client\Exception\ClientException;

use AlibabaCloud\Client\Exception\ServerException;


/**

  * 验证码(阿里云短信)

  */

function smsVerify($mobile, $code, $tempId)

{     

   AlibabaCloud::accessKeyClient(config('app.aliyunsms.access_key_id'), config('app.aliyunsms.access_key_secret'))

                        ->regionId('cn-hangzhou') //replace regionId as you need(这个地方是发短信的节点,默认即可,或者换成你想要的)

                        ->asGlobalClient();

    $data = [];

    try {

        $result = AlibabaCloud::rpcRequest()

                  ->product('Dysmsapi')

                  //->scheme('https') //https | http(如果域名是https,这里记得开启)

                  ->version('2017-05-25')

                  ->action('SendSms')

                  ->method('POST')

                  ->options([

                        'query'                 => [

                            'PhoneNumbers'      => $mobile,

                            'SignName'          => config('app.aliyunsms.sign_name'),

                            'TemplateCode'      => $tempId,

                            'TemplateParam'     => json_encode(['code'=>$code]),

                        ],

                    ])

                  ->request();

        $res    = $result->toArray();

        if($res['Code'] == 'OK'){

            $data['status'] = 1;

            $data['info']   = $res['Message'];

        }else{

            $data['status'] = 0;

            $data['info']   = $res['Message'];

        }

        return $data;

    } catch (ClientException $e) {

        $data['status'] = 0;

        $data['info']   = $e->getErrorMessage();

        return $data;

    } catch (ServerException $e) {

        $data['status'] = 0;

        $data['info']   = $e->getErrorMessage();

        return $data;

    }

}


复制以上代码,配置换成自己的即可使用,当然,配置也可以放到数据库里。

3.在需要的地方调用这个方法即可:

我这里是ajax调用的,所以返回值是json格式。


$code = rand_string(4,1);//这里是随机生成4位数字,这个方法是我自己写的哦,要注意!

$res    = smsVerify($mobile, $code, 'SMS_113461246');

if($res['status'] == 1){

    Session::set($mobile.'code',$code);

    ajaxReturn(1,"验证码已发送");

}else{

    ajaxReturn(0,"验证码发送失败,请联系客服");

}


这样就好了,验证码发送的功能就完成了!


05/7ad96b0bc7df5d127f52a2b55a001c.png