1.项目需求
发送验证码;或者短信提醒;
2.思路实现,
使用的是腾讯云的云通信功能(需要结合腾讯的文档进行编写)
3.代码实现
//发送信息传入手机号,参数name
public function smsact(){
$name = I('get.name');
$tel = I('get.tel');//获取短信发送的收件人
$appId = '**********';//模板标识
$Appkey = '*****************';//短信对接秘钥
$random = $this->generate_code();//得到随机数
$tpl_id = '164858';//腾讯云上的短信模板ID
$time = time();//获取当前时间戳
$sig = $this->sigsum($tel,$Appkey,$random,$time);//app凭证
//建立数组数据包
$params1 = array(
"tel"=>array('nationcode'=>'86','mobile'=>$tel),
"tpl_id"=>$tpl_id,
"params"=>array($name,$tel),
"sig"=>$sig,
"time"=>$time
);
//将数组数据包转换成JSON数据包
$params = json_encode($params1);
//服务器请求路径
$url = "https://yun.tim.qq.com/v5/tlssmssvr/sendsms?sdkappid={$appId}&random={$random}";
//调用请求
$data = $this->http_post($url,$params);
$data = json_decode(json_encode(json_decode($data)),TRUE);
//判断是否返回成功
if($data['result']==0){
//将随机数放进数组里
echo 1;
}
//返回数据
$this->ajaxReturn($data);
}
//加密sha256
/**
* app凭证
* @param [type] $mobile [电话]
* @param [type] $AppKey [sdkappid对应的appkey,需要业务方高度保密]
* @param [type] $strRand [系统生成的随机数]
* @param [type] $strTime [当前时间戳]
* @return [type] data [app凭证]
*/
public function sigsum($tel,$appkey,$strRand,$strTime){
//hash算法指定sha256算法
$str = 'appkey='.$appkey.'&random='.$strRand.'&time='.$strTime.'&mobile='.$tel;
$sig = hash("sha256",$str);
return $sig;
}
/**
* @param string $api_url 接口地址
* @param array $param post参数
* @param int $timeout 超时时间
* @return bool
*/
private function http_post( $api_url = '' , $param = array() , $timeout = 45 ){
if( !$api_url ){
die("error api_url");
}
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $api_url );
curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_0 );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt( $ch, CURLOPT_HEADER, FALSE);
if( parse_url( $api_url )['scheme'] == 'https' ){
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST , FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER , FALSE);
}
curl_setopt( $ch, CURLOPT_HTTPAUTH , CURLAUTH_BASIC);
curl_setopt( $ch, CURLOPT_USERPWD , 'api:key-'.$this->_api_key );
curl_setopt( $ch, CURLOPT_POST, TRUE);
curl_setopt( $ch, CURLOPT_POSTFIELDS, $param );
$res = curl_exec( $ch );
$error = curl_error( $ch );
curl_close( $ch );
if( $error ){
$this->_last_error[] = $error;
return FALSE;
}
return $res;
}
注意事项
1.微信验证码接口附带两个参数apid加上随机数
2.json加密的包跟随接口一起传到服务器
2.tp3.2 php使用的加密方式出现的问题sha256加密方式需要进行hash的转变附属图片