总是想写点儿对大家有用的东西,微信这个东西最近火的很,到处都是公众账号,微营销等等。这段时间专门研究了一些关于微信公众平台的东西,也做过一些小的项目,所以分享一些关于微信公众平台的东西<?php <br />
<br>
class Wechat{<br>
<br>
//签名<br>
private $token = '';<br>
<br>
//消息类型<br>
private $msgtype;<br>
<br>
//消息内容<br>
private $msgobj;<br>
<br>
//事件类型<br>
private $eventtype;<br>
<br>
//事件key值<br>
private $eventkey;<br>
<br>
#{服务号才可得到<br>
//AppId<br>
private $appid = "";<br>
//AppSecret<br>
private $secret = "";<br>
#}<br>
<br>
private $_isvalid = false;<br>
<br>
public function __construct($token,$isvalid = false){<br>
$this->token = $token;<br>
$this->_isvalid = $isvalid;<br>
}<br>
<br>
/**<br>
* 执行程序入口<br>
*/<br>
public function index(){<br>
if($this->_isvalid){<br>
$this->valid();<br>
}<br>
$this->getMsg();<br>
$this->responseMsg();<br>
}<br>
<br>
/**<br>
* 初次校验<br>
*/<br>
private function valid(){<br>
$echoStr = $_GET["echostr"];<br>
<br>
if($this->checkSignature()){<br>
echo $echoStr;<br>
exit();<br>
}<br>
}<br>
<br>
/**<br>
* 创建自定义菜单<br>
*/<br>
private function createMenu(){<br>
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$this->getAccessToken();<br>
$menujson = '{<br>
"button":[<br>
{<br>
"type":"click",<br>
"name":"NAME1",<br>
"key":"V1001_NEW"<br>
},<br>
{<br>
"type":"view",<br>
"name":"NAME2",<br>
"url":"http://www.zhangenrui.cn"<br>
},<br>
{<br>
"type":"view",<br>
"name":"NAME3",<br>
"url":"http://www.zhangenrui.cn"<br>
}<br>
]<br>
}';<br>
<br>
$ch = curl_init($url);<br>
<br>
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");<br>
curl_setopt($ch, CURLOPT_POSTFIELDS,$menujson);<br>
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br>
<br>
$info = curl_exec($ch);<br>
<br>
if (curl_errno($ch)) {<br>
echo 'Errno'.curl_error($ch);<br>
}<br>
<br>
curl_close($ch);<br>
<br>
var_dump($info);<br>
}<br>
<br>
/**<br>
* 删除自定义菜单<br>
*/<br>
private function deleteMenu(){<br>
$url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$this->getAccessToken();<br>
<br>
$ch = curl_init($url);<br>
<br>
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br>
<br>
$info = curl_exec($ch);<br>
<br>
if (curl_errno($ch)) {<br>
echo 'Errno'.curl_error($ch);<br>
}<br>
<br>
curl_close($ch);<br>
<br>
var_dump($info);<br>
<br>
}<br>
<br>
/**<br>
* 获取消息<br>
*/<br>
private function getMsg(){<br>
//验证消息的真实性<br>
if(!$this->checkSignature()){<br>
exit();<br>
}<br>
<br>
//接收消息<br>
$poststr = $GLOBALS["HTTP_RAW_POST_DATA"];<br>
if(!empty($poststr)){<br>
$this->msgobj = simplexml_load_string($poststr,'SimpleXMLElement',LIBXML_NOCDATA);<br>
$this->msgtype = strtolower($this->msgobj->MsgType);<br>
}<br>
else{<br>
$this->msgobj = null;<br>
}<br>
}<br>
<br>
/**<br>
* 回复消息<br>
*/<br>
private function responseMsg(){<br>
switch ($this->msgtype) {<br>
case 'text':<br>
$data = $this->getData($this->msgobj->Content);<br>
if(empty($data) || !is_array($data)){<br>
$content = "ruiblog";<br>
$this->textMsg($content);//查询不到记录返回提示信息<br>
}<br>
else{<br>
$this->newsMsg($data);<br>
}<br>
break;<br>
case 'event':<br>
$this->eventOpt();<br>
break;<br>
default:<br>
# code...<br>
break;<br>
}<br>
}<br>
<br>
/**<br>
* 回复文本消息<br>
*/<br>
private function textMsg($content=''){<br>
$textxml = "<xml><tousername>msgobj->FromUserName}]]></tousername><fromusername>msgobj->ToUserName}]]></fromusername><createtime>".time()."</createtime><msgtype></msgtype><content></content></xml>";<br>
<br>
//做搜索处理<br>
if(empty($content)){<br>
$content = "查询功能正在开发中...";<br>
}<br>
$resultstr = sprintf($textxml,$content);<br>
echo $resultstr;<br>
}<br>
<br>
/**<br>
* 回复图文消息<br>
*/<br>
private function newsMsg($data){<br>
if(!is_array($data)){<br>
exit();<br>
}<br>
$newscount = (count($data) > 10)?10:count($data);<br>
$newsxml = "<xml><tousername>msgobj->FromUserName}]]></tousername><fromusername>msgobj->ToUserName}]]></fromusername><createtime>".time()."</createtime><msgtype></msgtype><articlecount>{$newscount}</articlecount><articles>%s</articles></xml>";<br>
$itemxml = "";<br>
foreach ($data as $key => $value) {<br>
$itemxml .= "<item>";<br>
$itemxml .= "<title></title>
<description></description><picurl></picurl><url></url>";<br>
$itemxml .= "</item>";<br>
}<br>
$resultstr = sprintf($newsxml,$itemxml);<br>
echo $resultstr;<br>
}<br>
<br>
/**<br>
* 事件处理<br>
*/<br>
private function eventOpt(){<br>
$this->eventtype = strtolower($this->msgobj->Event);<br>
switch ($this->eventtype) {<br>
case 'subscribe':<br>
<br>
//做用户绑定处理<br>
<br>
$content = "ruiblog";<br>
$this->textMsg($content);<br>
break;<br>
case 'unsubscribe':<br>
<br>
//做用户取消绑定的处理<br>
<br>
break;<br>
case 'click':<br>
$this->menuClick();<br>
break;<br>
default:<br>
# code...<br>
break;<br>
}<br>
}<br>
<br>
/**<br>
* 自定义菜单事件处理<br>
*/<br>
private function menuClick(){<br>
$this->eventkey = $this->msgobj->EventKey;<br>
switch ($this->eventkey) {<br>
case 'V1001_NEW':<br>
$data = $this->getData();<br>
$this->newsMsg($data);<br>
break;<br>
default:<br>
# code...<br>
break;<br>
}<br>
}<br>
<br>
/**<br>
* 获取本地数据<br>
*/<br>
private function getData($key='ruiblog'){<br>
$data = $key;<br>
//写你自己相关的程序<br>
return $data;<br>
}<br>
<br>
/**<br>
* 校验签名<br>
*/<br>
private function checkSignature(){<br>
$signature = $_GET["signature"];<br>
$timestamp = $_GET["timestamp"];<br>
$nonce = $_GET["nonce"]; <br>
<br>
$token = $this->token;<br>
$tmpArr = array($token, $timestamp, $nonce);<br>
sort($tmpArr);<br>
$tmpStr = implode( $tmpArr );<br>
$tmpStr = sha1( $tmpStr );<br>
<br>
return ($tmpStr == $signature)?true:false;<br>
}<br>
<br>
/**<br>
* 获取access token<br>
*/<br>
private function getAccessToken(){<br>
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appid&secret=$this->secret";<br>
$atjson=file_get_contents($url);<br>
$result=json_decode($atjson,true);//json解析成数组<br>
if(!isset($result['access_token'])){<br>
exit( '获取access_token失败!' );<br>
}<br>
return $result["access_token"];<br>
}<br>
}<br>
<br>
?>
详细点这里:http://www.appryan.com/2015/05/17/php-wechart/
Wechat.class.zip ( 2.3 KB 下载:429 次 )
AD:真正免费,域名+虚机+企业邮箱=0元