首页 阿里云动态正文

PHP配置阿里云短信

云返利网 阿里云动态 2020-08-21 17:16:12 30 0 阿里云返利
  • 目录
  • 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),下面我们一起来进行阿里云短信接口的调用和需求功能封装吧!

代码分享:

2.细读官方手册

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

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

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

官方入门手册:

SendSms接口介绍:

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

3.1 SDK下载

(1)官方链接下载

(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

/**
 *  string $mobile 手机号
 *  string $code 发送给客户的验证码
 *  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.总结

【关于云返利网】

云返利网是阿里云、腾讯云、华为云产品推广返利平台,在各个品牌云产品官网优惠活动之外,云返利网还提供返利。您可以无门槛获得阿里云、华为云、腾讯云所有产品返利,在官网下单后就可以领取,无论是自己用、公司用还是帮客户采购,您个人都可以获得返利。云返利网的目标是让返利更多、更快、更简单!详情咨询13121395187(微信同号)