php微信公众平台开发类实例
本文实例讲述了php微信公众平台开发类。分享给大家供大家参考。具体分析如下:
ThinkWechat.php类文件如下:
<?php
classWechat{
/**
*微信推送过来的数据或响应数据
*@vararray
*/
private$data=array();
/**
*构造方法,用于实例化微信SDK
*@paramstring$token微信开放平台设置的TOKEN
*/
publicfunction__construct($token){
$this->auth($token)||exit;
if(!empty($_GET['echostr'])){
exit($_GET['echostr']);
}else{
try
{
$xml=file_get_contents("php://input");
$xml=newSimpleXMLElement($xml);
$xml||exit;
foreach($xmlas$key=>$value){
$this->data[$key]=strval($value);
}
}catch(Exception$e){
}
}
}
/**
*获取微信推送的数据
*@returnarray转换为数组后的数据
*/
publicfunctionrequest(){
return$this->data;
}
/**
**响应微信发送的信息(自动回复)
*@paramstring$to接收用户名
*@paramstring$from发送者用户名
*@paramarray$content回复信息,文本信息为string类型
*@paramstring$type消息类型
*@paramstring$flag是否新标刚接受到的信息
*@returnstringXML字符串
*/
publicfunctionresponse($content,$type='text',$flag=0){
/*基础数据*/
$this->data=array(
'ToUserName'=>$this->data['FromUserName'],
'FromUserName'=>$this->data['ToUserName'],
'CreateTime'=>time(),
'MsgType'=>$type,
);
/*添加类型数据*/
$this->$type($content);
/*添加状态*/
$this->data['FuncFlag']=$flag;
/*转换数据为XML*/
$xml=newSimpleXMLElement('<xml></xml>');
$this->data2xml($xml,$this->data);
exit($xml->asXML());
}
/**
*回复文本信息
*@paramstring$content要回复的信息
*/
privatefunctiontext($content){
$this->data['Content']=$content;
}
/**
*回复音乐信息
*@paramstring$content要回复的音乐
*/
privatefunctionmusic($music){
list(
$music['Title'],
$music['Description'],
$music['MusicUrl'],
$music['HQMusicUrl']
)=$music;
$this->data['Music']=$music;
}
/**
*回复图文信息
*@paramstring$news要回复的图文内容
*/
privatefunctionnews($news){
$articles=array();
foreach($newsas$key=>$value){
list(
$articles[$key]['Title'],
$articles[$key]['Description'],
$articles[$key]['PicUrl'],
$articles[$key]['Url']
)=$value;
if($key>=9){break;}//最多只允许10调新闻
}
$this->data['ArticleCount']=count($articles);
$this->data['Articles']=$articles;
}
/**
*数据XML编码
*@paramobject$xmlXML对象
*@parammixed$data数据
*@paramstring$item数字索引时的节点名称
*@returnstring
*/
privatefunctiondata2xml($xml,$data,$item='item'){
foreach($dataas$key=>$value){
/*指定默认的数字key*/
is_numeric($key)&&$key=$item;
/*添加子元素*/
if(is_array($value)||is_object($value)){
$child=$xml->addChild($key);
$this->data2xml($child,$value,$item);
}else{
if(is_numeric($value)){
$child=$xml->addChild($key,$value);
}else{
$child=$xml->addChild($key);
$node=dom_import_simplexml($child);
$node->appendChild($node->ownerDocument->createCDATASection($value));
}
}
}
}
/**
*对数据进行签名认证,确保是微信发送的数据
*@paramstring$token微信开放平台设置的TOKEN
*@returnbooleantrue-签名正确,false-签名错误
*/
privatefunctionauth($token){
if(empty($_GET['signature']))return;
/*获取数据*/
$data=array($_GET['timestamp'],$_GET['nonce'],$token);
$sign=$_GET['signature'];
/*对数据进行字典排序*/
sort($data,SORT_STRING);
/*生成签名*/
$signature=sha1(implode($data));
return$signature===$sign;
}
}
希望本文所述对大家的php程序设计有所帮助。