2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 阿里云短信验证码发送类

阿里云短信验证码发送类

时间:2022-10-22 10:57:04

相关推荐

阿里云短信验证码发送类

<?php

/**

*阿里云短信验证码发送类

*@authorAdministrator

*

*/

classSms{

//保存错误信息

public$error;

//AccessKeyID

private$accessKeyId="";

//AccessAccessKeySecret

private$accessKeySecret="";

//签名

private$signName="";

//模版ID

private$templateCode="";

publicfunction__construct($cofig=array()){

$cofig=array(

"accessKeyId"=>"***************",

"accessKeySecret"=>"******************",

"signName"=>"七零",

"templateCode"=>"SMS_25300059"

);

//配置参数

$this->accessKeyId=$cofig["accessKeyId"];

$this->accessKeySecret=$cofig["accessKeySecret"];

$this->signName=$cofig["signName"];

$this->templateCode=$cofig["templateCode"];

}

privatefunctionpercentEncode($string){

$string=urlencode($string);

$string=preg_replace("/\+/","%20",$string);

$string=preg_replace("/\*/","%2A",$string);

$string=preg_replace("/%7E/","~",$string);

return$string;

}

/**

*签名

*

*@paramunknown$parameters

*@paramunknown$accessKeySecret

*@returnstring

*/

privatefunctioncomputeSignature($parameters,$accessKeySecret){

ksort($parameters);

$canonicalizedQueryString="";

foreach($parametersas$key=>$value){

$canonicalizedQueryString.="&".$this->percentEncode($key)."=".$this->percentEncode($value);

}

$stringToSign="GET&%2F&".$this->percentencode(substr($canonicalizedQueryString,1));

$signature=base64_encode(hash_hmac("sha1",$stringToSign,$accessKeySecret."&",true));

return$signature;

}

/**

*发送验证码/document_detail/44364.html?spm=5176.doc44368.6.126.gSngXV

*

*@paramunknown$mobile

*@paramunknown$verify_code

*

*/

publicfunctionsend_verify($mobile,$verify_code){

$params=array(

//公共参数

"SignName"=>$this->signName,

"Format"=>"JSON",

"Version"=>"-09-27",

"AccessKeyId"=>$this->accessKeyId,

"SignatureVersion"=>"1.0",

"SignatureMethod"=>"HMAC-SHA1",

"SignatureNonce"=>uniqid(),

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

//接口参数

"Action"=>"SingleSendSms",

"TemplateCode"=>$this->templateCode,

"RecNum"=>$mobile,

"ParamString"=>"{"no":"".$verify_code.""}"

);

//计算签名并把签名结果加入请求参数

$params["Signature"]=$this->computeSignature($params,$this->accessKeySecret);

//发送请求

$url="/?".http_build_query($params);

$ch=curl_init();

curl_setopt($ch,CURLOPT_URL,$url);

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch,CURLOPT_TIMEOUT,10);

$result=curl_exec($ch);

curl_close($ch);

$result=json_decode($result,true);

if(isset($result["Code"])){

$this->error=$this->getErrorMessage($result["Code"]);

returnfalse;

}

returntrue;

}

/**

*获取详细错误信息

*

*@paramunknown$status

*/

publicfunctiongetErrorMessage($status){

//阿里云的短信乱八七糟的(其实是用的阿里大于)

///doc2/apiDetail?spm=a3142.7629140.1.19.SmdYoA&apiId=25450

$message=array(

"InvalidDayuStatus.Malformed"=>"账户短信开通状态不正确",

"InvalidSignName.Malformed"=>"短信签名不正确或签名状态不正确",

"InvalidTemplateCode.MalFormed"=>"短信模板Code不正确或者模板状态不正确",

"InvalidRecNum.Malformed"=>"目标手机号不正确,单次发送数量不能超过100",

"InvalidParamString.MalFormed"=>"短信模板中变量不是json格式",

"InvalidParamStringTemplate.Malformed"=>"短信模板中变量与模板内容不匹配",

"InvalidSendSms"=>"触发业务流控",

"InvalidDayu.Malformed"=>"变量不能是url,可以将变量固化在模板中"

);

if(isset($message[$status])){

return$message[$status];

}

return$status;

}

}

复制代码

//生成验证码

$code=rand(1000,9999);

//发送短信

$sms=newSms();

//测试模式

$status=$sms->send_verify($mobile,$code);

if(!$status){

echo$sms->error;

}

echo"success";

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。