PHP配置阿里云短信

烂漫一生 提交于 2020-12-16 06:37:51
  • 目录
  • 1. 前言
  • 2. 细读官方手册
  • 3. 短信接口SDK包下载和配置
  • 3.1 SDK下载
  • (1)官方链接下载
  • (2)composer下载
  • 3.2 封装发送手机短信验证码功能类
  • 3.2.1 密钥举例
  • 3.2.2 封装调用SDK类
  • 3.2.3 测试用例实战
  • 3.2.4 测试用例结果
  • 3.2.5将测试用例封装成常用类
  • 3.2.6界面可视化
  • 4. 总结

1.前言

之前我写过一篇‘发送手机短信验证实战’,用的是云之讯平台的短信接口,但相比而言,目前市面上用的大多是阿里云和腾讯云的短信接口,刚好,我公司也使用阿里云的短信接口(新版SDK),下面我们一起来进行阿里云短信接口的调用和需求功能封装吧!

代码分享:https://github.com/mtdgclub/aliyunSmsDemo

2.细读官方手册

由手册我们可以知道,阿里云为我们提供了两种短信发送接口:

  • SendSms接口是短信发送接口,支持在一次请求中向多个不同的手机号码发送同样内容的短信。
  • SendBatchSms接口在一次请求中分别向多个不同的手机号码发送不同签名和模版内容的短信

而我这里主要用的是SendSms接口

官方入门手册:https://helpcdn.aliyun.com/document_detail/53111.html

SendSms接口介绍:https://help.aliyun.com/document_detail/101414.html

3.短信接口SDK包下载和配置

3.1 SDK下载

(1)官方链接下载

https://help.aliyun.com/document_detail/55359.html?spm=5176.11065259.1996646101.searchclickresult.d0a31a71oq0HYi

(2)composer下载

这里我建议最好通过composer拉取SDK包,主要把下面代码写入composer.json,然后composer install即可

{
  "require": {
    "alibabacloud/client": "^1.4"
  },
  "repositories": {
    "packagist": {
      "type": "composer",
      "url": "https://packagist.phpcomposer.com"
    }
  }
}

3.2 封装发送手机短信验证码功能类

下面我将参考官方手册,把SendSms接口类,根据日常开发需求封装成专门发送手机短信验证码的功能类;为了保密,我使用公司的短信配置参数进行测试,但代码库已做脱敏处理,大家可以自行在阿里云控制台获取和注册短信模板,这里不多加叙述,比较简单:

3.2.1 密钥举例

key:  LTAIaM6WC6zFue2Z  

Secret:  x4mD01sBVFWCVJF0SHg1ojKXXXXXXX(已处理)

SignName(签名): 中闰XX

短信模板编号:SMS_168345XXX

3.2.2 封装调用SDK类

这里列举核心代码,详见sendsms.php

/**
 * @param string $mobile 手机号
 * @param string $code 发送给客户的验证码
 * @return bool|string
 */
public function sendSms($mobile, $code)
{
    $this->PhoneNumbers = $mobile;
    $this->TemplateParam = $code;
    AlibabaCloud::accessKeyClient("$this->AccessKeyId", "$this->AccessKeySecret")
        ->regionId('cn-hangzhou')
        ->asGlobalClient();
    try {
        $result = AlibabaCloud::rpcRequest()
            ->product('Dysmsapi')
            // ->scheme('https') // https | http
            ->version('2017-05-25')
            ->action($this->Action)
            ->method('POST')
            ->options([
                'query' => [
                    'RegionId' => "cn-hangzhou",
                    'PhoneNumbers' => $this->PhoneNumbers,
                    'SignName' => $this->SignName,
                    'TemplateCode' => $this->TemplateCode,
                    'TemplateParam' => json_encode($this->TemplateParam),
                ],
            ])
            ->request();
        return $result->toArray();
    }  catch (ClientException $e) {
        return $e->getErrorMessage();
    } catch (ServerException $e) {
        return $e->getErrorMessage();
    }
}

通过上面这了函数,我们就能直接使用到SDK包里官方为我们封装好的函数

3.2.3 测试用例实战

接下里,我们先测试看看能不能调用我们封装好的SDK调用类,详见index.php文件

<?php
//测试模板
session_start();
require_once 'Sms.php';
$sms = new SmsController();
$mobile='18902696838';
$result='';
if ($mobile) {
    if ($sms->isPhoneNumber($mobile)) {
        $sms->unsetSession('CaptchaVoice');
        $sms_code =$sms->getRandom(6, 1);
        $codeArray['a'] = $sms_code;//需要与模板参数一致
        $sendSms = new sendSms();
        $result = $sendSms->sendSms($mobile,$codeArray);
        if ($result['Code'] == 'OK') {
            $_SESSION['CaptchaVoice'] = $codeArray['a'];
            $data = array('code' => 1, 'msg' => '发送验证码成功');
        }else{
            $data = array('code' => 1000, 'msg' => '接口发送错误');
        }
    } else {
        $data = array('code' => 1001, 'msg' => '手机号码格式不正确');
    }
} else {
    $data = array('code' => 1000, 'msg' => '丢失参数');
}
var_dump($sendSms);
var_dump($result);
var_dump($data);
var_dump(json_encode($data));

上面的函数有几个坑需要你注意的:

(1)$codeArray数组变量的键是你所申请模板的参数名,必须要对应,否则会报错

(2)因为要记录sessio,所以必须开启session_start

3.2.4 测试用例结果

发送成功,可以看到我们的几个var_dump()显示的数据

首先是调用类sendSms实例化的数据:

然后是发送短信返回的信息如下:

最后是我们自定义的返回数据:

3.2.5将测试用例封装成常用类

具体封装之后的代码这里省略不讲了,详见Sms.php,如有需要可以直接拿来用哦

3.2.6界面可视化

为了方便测试和使用,我使用layui写了点前端样式,帮助大家进行调试。

前端的demo样式:

另外还加上了正则匹配、通过ajax发送和校验验证码,该demo稍微修改一下前端,是可以直接搬到真实项目上使用的。

4.总结

以上,阿里云短信接口的学习就到这里了,我觉得大家平时不要轻视这些小功能,踏踏实实把它们一点一滴的做好,说实话,我阿里云短信的学习过程中,遇到了一些坑,让我开发的经验有了一定的进步,而且,完成该学习,在以后我们的项目中,就可以方便快捷迁移到需要的地方二次开发。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!