thinkphp3.2 整合阿里大鱼短信发送接口

时间:2022-06-01 17:55:23

在这里说一下这个常用的短信验证码如何使用thinkphp实现吧,登录阿里大鱼,注册登录,然后增加短信模板,签名,这些完成之后,下载sdk,把sdk。

sdk里面对于我们来说有用的文件只有下面这些,注意了,这里标记的5个文件是有用的,而AliMsgSend.class.php文件是我们要写的短信发送接口。

thinkphp3.2 整合阿里大鱼短信发送接口

如上图,把这5个文件移动到我们项目里面的Library目录下面,我们新建一个AliMsg文件夹,放到这个文件夹里面(如果你问我Library目录在哪里,那么你可以去thinkphp的核心目录里面找一找,哈哈)。

那么我们现在新建文件AliMsgSend.class.php文件,文件内容如下:

<?php

//加载需要的文件
require_once "TopClient.php";
require_once "TopLogger.php";
require_once "AlibabaAliqinFcSmsNumSendRequest.php";
require_once "RequestCheckUtil.php";
require_once "ResultSet.php";


class AliMsgSend{
//定义key
private $appkey = null;
private $secretKey = null;

public function __construct($_appkey, $_secretKey)
{

$this->appkey = $_appkey;
$this->secretKey = $_secretKey;
}

public function __call ($name, $arguments)
{

return "The function is not exist!";
}

/**阿里大鱼验证码发送接口
* @param $_RecNum string 手机号,
* @param $_smsParam json 短信模板变量,
* @param $_smsTemplateCode string 短信模板id,
* @param $_extend string 公共回传参数,
* @param $_smsFreeSignName string 短信签名,
* @param $_smsType string 短信类型 defult normal,
* @return bool
*/

public function sendMsg($_RecNum, $_smsParam, $_smsTemplateCode, $_smsFreeSignName, $_extend = "", $_smsType = "normal")
{

$c = new TopClient;
$c ->appkey = $this->appkey;
$c ->secretKey = $this->secretKey;
$req = new AlibabaAliqinFcSmsNumSendRequest;
$req ->setExtend( $_extend );
$req ->setSmsType( $_smsType );
$req ->setSmsFreeSignName( $_smsFreeSignName );
$req ->setSmsParam( $_smsParam );
$req ->setRecNum( $_RecNum );
$req ->setSmsTemplateCode( $_smsTemplateCode );
$resp = $c ->execute( $req );
return $this->sendMsgResult($resp);
}

/**对接口返回值进行处理
* @param null $_resp
* @return bool
*/

private function sendMsgResult($_resp = null)
{

if ($_resp->result->success && !$_resp->result->code) {
return true;
} else if ($_resp->code || $_resp->msg == "Remote service error") {
return false;
} else {
return false;
}
}
}

好了,接口搞定了,那么我们如何调用它呢,我们只需要在控制器里面写一个方法就可以了。我的方法如下:

        $code=rand(100000,999999); //定义验证码
session('smscode',$code,600); //把验证码存到session
import('AliMsg.AliMsgSend'); //引入我们刚才写的接口类
$appKey = '你的appKey';
$secreKey = '你的secreKey';
$re = new \AliMsgSend($appKey, $secreKey);
$recNum = '要发送的手机号码,注意这个是字符串类型的';
$smsParam = "模板变量";
$smsTemplateCode = "模板id";
$smsFreeSignName = "签名";
$res = $re->sendMsg($recNum, $smsParam, $smsTemplateCode, $smsFreeSignName);

上面的这些参数在你的阿里大鱼控制台里面都可以看到,我就说一下这里的模板变量吧,我们在定义模板的时候会这样写:这是你的注册验证码${code};这样我们就有了一个模板变量,那么我们这里就需要把这个变量传过去,变量是一个json格式的字符串,比如{code:’123456’}。

我们的返回值$res是一个bool值,如果发送成功会返回true,不然会返回false,然后可以根据需要进行处理。