您的位置 首页 php

thinkPHP使用最新阿里短信验证码接口验证手机号

1、下载阿里最新的短信签名助手,修改到如下后放置在common的API中,命名为SignatureHelperApi.class.php

<?php

namespace Common\Api;

/**

* 签名助手

* Class SignatureHelper

*/

class SignatureHelperApi {

/**

* 生成签名并发起请求

*

* @param $accessKeyId string AccessKeyId (

* @param $accessKeySecret string AccessKeySecret

* @param $domain string API接口所在域名

* @param $ params array API具体参数

* @param $security boolean 使用https

* @return bool|\stdClass 返回API接口调用结果,当发生错误时返回 false

*/

public function request($accessKeyId, $accessKeySecret, $domain, $params, $security=false) {

$apiParams = array_merge(array (

“SignatureMethod” => “HMAC- sha1 “,

“SignatureNonce” => uniqid(mt_rand(0,0xffff), true),

“SignatureVersion” => “1.0”,

“AccessKeyId” => $accessKeyId,

“Timestamp” => gmdate(“Y-m-d\TH:i:s\Z”),

“Format” => “JSON”,

), $params);

ksort($apiParams);

$sortedQueryStringTmp = “”;

foreach ($apiParams as $key => $value) {

$sortedQueryStringTmp .= “&” . $this->encode($key) . “=” . $this->encode($value);

}

$stringToSign = “GET&%2F&” . $this->encode(substr($sortedQueryStringTmp, 1));

$sign = base64_encode(hash_hmac(“sha1”, $stringToSign, $accessKeySecret . “&”,true));

$signature = $this->encode($sign);

$url = ($security ? ‘https’ : ‘http’).”://{$domain}/?Signature={$signature}{$sortedQueryStringTmp}”;

try {

$content = $this->fetchContent($url);

return json_decode($content);

} catch( \Exception $e) {

return false;

}

}

private function encode($str)

{

$res = urlencode($str);

$res = preg_replace(“/\+/”, “%20”, $res);

$res = preg_replace(“/\*/”, “%2A”, $res);

$res = preg_replace(“/%7E/”, “~”, $res);

return $res;

}

private function fetchContent($url) {

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_TIMEOUT, 5);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(

“x-sdk-client” => “php/2.0.0”

));

if(substr($url, 0,5) == ‘https’) {

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

}

$rtn = curl_exec($ch);

if($rtn === false) {

trigger_error(“[CURL_” . curl_errno($ch) . “]: ” . curl_error($ch), E_USER_ERROR);

}

curl_close($ch);

return $rtn;

}

}

?>

2、新建控制器UserController.class.php

如下命名空间:

3、编写控制器方法:

public function sendMessage(){

$params = array ();

$accessKeyId = “aaaaaa”;// 取得您的AK信息

$accessKeySecret = “aaaaaaaaaaa”;// 取得您的AK信息

$params[“PhoneNumbers”] = I(‘get.tel’); // fixme 必填: 短信接收号码

$params[“SignName”] = “签名名称”; // fixme 必填: 短信签名,应严格按”签名名称”填写

$params[“TemplateCode”] = “模板CODE”; // fixme 必填: 短信模板Code,应严格按”模板CODE”填写

$tel_code = rand(100000,999999);

$params[‘TemplateParam’] = Array (

“yzm” => $tel_code, // fixme 设置模板参数, 假如模板中存在变量需要替换则为必填项

);

$params[“SendDate”] = date(‘Ymd’,time()); // fixme 必填: 短信发送日期,格式Ymd,支持近30天记录查询

$params[“PageSize”] = 2; // fixme 必填: 分页大小

$params[“CurrentPage”] = 1; // fixme 必填: 当前页码

$params[‘OutId’] = “12345”; // fixme 可选: 设置发送短信流水号

$params[‘SmsUpExtendCode’] = “1234567”; // fixme 可选: 上行短信扩展码, 扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段

// *** 以下代码若无必要无需更改 ***

if(!empty($params[“TemplateParam”]) && is_array($params[“TemplateParam”])) {

$params[“TemplateParam”] = json_encode($params[“TemplateParam”]);

}

// 初始化SignatureHelper实例用于设置参数,签名以及发送请求

$helper = new SignatureHelperApi();

// 此处可能会抛出异常,注意catch

$content = $helper->request(

$accessKeyId,

$accessKeySecret,

“dysmsapi.aliyuncs.com”,

array_merge($params, array(

“RegionId” => “cn-hangzhou”,

“Action” => “SendSms”,

“Version” => “2017-05-25”,

))

);

session(‘tel’,$params[“PhoneNumbers”]);

session(‘code’,$tel_code);

echo $tel_code;

}

4、html页面中通过按钮点击事件访问控制器的方法

<script type=”text/javascript”>

$(‘.telverify’).click( function (){

var tel = $(‘#inputMobile’).val();

if(tel == ”){

$(“#inputMobile”).next(“span”).text(‘手机号不能为空!’).css(“color”,’red’);

}else{

$(this).attr(‘disabled’,true).text(‘120秒后重新获取’);

$.get(‘/Home/User/sendMessage/tel/’+tel+’.html’,function(result){

var num = 119;

var timer = setInterval(function(){

$(‘.telverify’).text(num+”秒后重新获取”);

num–;

if(num < 0){

clearInterval(timer);

$(‘.telverify’).attr(‘disabled’,false).text(‘获取验证码’);

}

},1000)

})

}

})

</script>

文章来源:智云一二三科技

文章标题:thinkPHP使用最新阿里短信验证码接口验证手机号

文章地址:https://www.zhihuclub.com/154095.shtml

关于作者: 智云科技

热门文章

网站地图