个人博客网站文章地址:http://blog.mclink.xyz/index/article/index/id/43.html
前些时候在学韩大佬的swoole的时候,在登录界面用到了短信验证码登录场景,想到了阿里云的短信服务功能,就使用了一下,效果还可以,基本上2-3s短信就来了,在此记录一下我的使用经历,其实是十分简单的。
一,注册阿里云并且进行登录
不少人可能在阿里云买过云服务器啥的,如果你已经有对应的账号了,那么更好,这里也可以使用淘宝的账户进行登录,这是阿里云的首页页面。
将鼠标移到产品那里,会弹出一个div,这里其实就是运用了hover而已,这种导航方式还是随处可见的。我们可以在div右边找到云通信对应的短信服务,进行点击。
二、进入短信服务页面,开通使用
进入后,如果有个开通使用,就点击进行服务的开通。开通成功后会显示这样的页面。
那么就进入控制台把。实际上我们需要用到的有五个:1.AccessKey 2.AccessKeySecret 3.签名 4.模板 5.SDK
所以首先你得先获取这三个东西,这里的AK要记得存起来,签名管理和模板管理是需要进行审核的,审核通过才能使用,我这里是已经创建审核通过后的。
这里的东西在接口调用的代码那里会用到,然后我们还需要获取阿里云短信的SDK,在接口调用那里我们选择短信发送API PHP版,进入后,你会发觉人家的文档还是写的十分详细的,不过都是文字版的,我们可以在在那里找到sdk下载。
下载解压后我们暂时只需要这两个文件。你需要把api_sdk放在一个文件夹里,我们会通过代码将其引入进行使用,假如你已经放好了,那么我们可以通过代码调用了,你也可以自己看下阿里提供了api_demo,我们会在它的基础上进行修改以致于符合我们的业务逻辑,例如这样调用:
<?php
namespace app\common\lib\ali;
ini_set("display_errors", "on");
require_once APP_PATH.'../extend/ali/vendor/autoload.php'; //这里放的是你的api_sdk的位置下的autoload.php
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
use Aliyun\Api\Sms\Request\V20170525\SendBatchSmsRequest;
use Aliyun\Api\Sms\Request\V20170525\QuerySendDetailsRequest;
// 加载区域结点配置
Config::load();
/**
* Class SmsDemo
*
* 这是短信服务API产品的DEMO程序,直接执行此文件即可体验短信服务产品API功能
* (只需要将AK替换成开通了云通信-短信服务产品功能的AK即可)
* 备注:Demo工程编码采用UTF-8
*/
class Sms
{
static $acsClient = null;
/**
* 取得AcsClient
*
* @return DefaultAcsClient
*/
public static function getAcsClient() {
//产品名称:云通信流量服务API产品,开发者无需替换
$product = "Dysmsapi";
//产品域名,开发者无需替换
$domain = "dysmsapi.aliyuncs.com";
// TODO 此处需要替换成开发者自己的AK (https://ak-console.aliyun.com/)
$accessKeyId = "你自己的AK"; // AccessKeyId
$accessKeySecret = "你的AccessKeySecret"; // AccessKeySecret
// 暂时不支持多Region
$region = "cn-hangzhou";
// 服务结点
$endPointName = "cn-hangzhou";
if(static::$acsClient == null) {
//初始化acsClient,暂不支持region化
$profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
// 增加服务结点
DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
// 初始化AcsClient用于发起请求
static::$acsClient = new DefaultAcsClient($profile);
}
return static::$acsClient;
}
/**
* 发送短信
* @return stdClass
*/
public static function sendSms($phone,$code) {
// 初始化SendSmsRequest实例用于设置发送短信的参数
$request = new SendSmsRequest();
//可选-启用https协议
//$request->setProtocol("https");
// 必填,设置短信接收号码
$request->setPhoneNumbers($phone);
// 必填,设置签名名称,应严格按"签名名称"填写,请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
$request->setSignName("你的签名名称");
// 必填,设置模板CODE,应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
$request->setTemplateCode("你的模板CODE");
// 可选,设置模板参数, 假如模板中存在变量需要替换则为必填项
$request->setTemplateParam(json_encode(array( // 短信模板中字段的值
"code"=>$code,
"product"=>"dsd"
), JSON_UNESCAPED_UNICODE));
// 可选,设置流水号
// $request->setOutId("yourOutId");
// 选填,上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
$request->setSmsUpExtendCode("1234567");
// 发起访问请求
$acsResponse = static::getAcsClient()->getAcsResponse($request);
return $acsResponse;
}
}
大致说一下代码,这是一个经过改装的demo,结合了TP5,直接调用sendSms,传入电话号码和验证码就可以进行短信的发送了,上面需要你改的有,1.AccessKeyID 2.AccessKeyScerct 3.签名名称 4.模板CODE。对了,还有require的autoload.php一定要跟你放的sdk位置对上。这里的PHP版本要求是5.4以上的。这时候你只要进行调用即可,我的项目调用的方式比较复杂,因为用到了swoole的task池,是通过投递异步任务实现的,具体的操作符合你的业务逻辑即可。