PHP微信开发ReplyModel(封装验证,数据获取,信息返回)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP微信开发ReplyModel(封装验证,数据获取,信息返回)相关的知识,希望对你有一定的参考价值。

<?php
class ReplyModel{
//验证token,
public function ValidationToken($token){
if(isset($_GET["echostr"])){
$tokenInfo["token"]=$token;
$tokenInfo["echostr"]=$_GET["echostr"];
$tokenInfo["signature"]=$_GET["signature"];
$tokenInfo["timestamp"]=$_GET["timestamp"];
$tokenInfo["nonce"]=$_GET["nonce"];
if($this->checkSignature($tokenInfo)){
return $tokenInfo["echostr"];
}
return false;
}else{
return true;
}
}
//封装检测函数
private function checkSignature($info)
{
$signature = $info["signature"];
$timestamp = $info["timestamp"];
$nonce = $info["nonce"];
$token = $info["token"];
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}

//得到xml数据并且解析成一个对象,成功返回$postObj,失败返回null
public function getXmlAnalysis(){
//1:获取到微信推送过来的POST数据(xml格式)
$postArr="<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[1]]></Content>
<MsgId>1234567890123456</MsgId>
</xml>";
$postArr=$GLOBALS["HTTP_RAW_POST_DATA"];
/*$postArr="<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[5]]></Content>
<MsgId>1234567890123456</MsgId>
</xml>";*/
if (!empty($postArr)){
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($postArr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);
return $postObj;
}else{
return null;
}
}

//返回纯文本信息,需要传入的参数为解析后的微信服务器数据对象$postObj,需要返回的内容(eg:$relText="你输入的是数字1,返回的是数字1";)
public function ReplyText($postObj,$relText){
$textArr=array("");
$textArr[‘template‘]=$relText;;
$textArr[‘toUser‘]=$postObj->FromUserName;
$textArr[‘fromUser‘]=$postObj->ToUserName;
$textArr[‘time‘]=time();
$textArr[‘MsgType‘]=‘text‘;
return $textArr;
}

/*返回图文消息,需要传入的参数为解析后的微信服务器数据对象$postObj,需要返回的内容(eg:$relImageText=array(
array("title"=>"pqs",
"description"=>"pqs is user weixin",
"picurl"=>"https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/logo_white_fe6da1ec.png",
"url"=>"http://www.scarecrowpqs.com/atmSystem/")
);;)*/
public function ReplyImageText($postObj,$relImageText){
$textArr=array("");
$textArr[‘toUser‘]=$postObj->FromUserName;
$textArr[‘fromUser‘]=$postObj->ToUserName;
$textArr[‘time‘]=time();
$textArr[‘MsgType‘]=‘news‘;
$textArr[‘template‘]=$relImageText;
return $textArr;
}

//返回图片消息,//返回纯文本信息,需要传入的参数为解析后的微信服务器数据对象$postObj,需要返回的内容(eg:$relText="MediaId";)
public function ReplyImage($postObj,$relImage){
$textArr=array("");
$textArr[‘toUser‘]=$postObj->FromUserName;
$textArr[‘fromUser‘]=$postObj->ToUserName;
$textArr[‘time‘]=time();
$textArr[‘MsgType‘]=‘image‘;
$textArr[‘template‘]=$relImage;
return $textArr;
}

//获取微信接口,需要传入的参数为appid和appsecret,返回值为$accessToken
private function getWxAccessToken($appid,$appsecret){
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
$arr=$this->http_curl($url);
return $arr;
}

//获取微信接口,判断是否在本地的过期没
public function getIsWxAccessToken(){
if($_SESSION[‘access_token‘] && $_SESSION[‘expires_in‘]>time()){
return $_SESSION[‘access_token‘];
}else{
$relStr=$this->getWxAccessToken("wx9e92e07e63ba07d9","d4624c36b6795d1d99dcf0547af5443d");
$_SESSION["access_token"]=$relStr[‘access_token‘];
$_SESSION["expires_in"]=time()+7200;
return $relStr[‘access_token‘];
}

}

//需要传入的参数为accessToken,返回值为微信服务器地址
public function getWxServerIp($accessToken){
$accessToken=$this->getIsWxAccessToken();
$url="https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=".$accessToken;
$arr=$this->http_curl($url);
return $arr;
}

//curl请求函数
private function http_curl($url,$type=‘get‘,$res=‘json‘,$arr=‘‘,$header=0){
//初始化curl
$ch=curl_init();
//设置curl
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HEADER,$header);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//调用接口
if($type==‘post‘){
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$arr);
}
$rel=curl_exec($ch);
//关闭curl
if(curl_errno($ch)){
var_dump(curl_error($ch));
}else{
curl_close($ch);
if($res==‘json‘){
$relStr=json_decode($rel,true);
return $relStr;
}else{
return $rel;
}
}
}


//定义自定义菜单
public function setMenuItem($MenuArr,$Access_Token){
$url="https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$Access_Token;
$MenuArr=urldecode(json_encode($MenuArr));
$rel=$this->http_curl($url,‘post‘,‘json‘,$MenuArr);
return $rel;
}

}

以上是关于PHP微信开发ReplyModel(封装验证,数据获取,信息返回)的主要内容,如果未能解决你的问题,请参考以下文章

微信公众平台——token验证php版

PHP实现微信公众平台开发—基础篇

php微信开发-tp5下验证服务器的代码

PHP微信公众平台开发高级篇—微信JS-SDK

夺命雷公狗---微信开发25----客服消息接口基础和推送语音

微信小程序-封装请求