关注和取消关注
<?php
define("APPID","wx4cff8e15a7a0801d");//填写自己的APPID
define("APPSECRET","4d7cb4b8b54412d9ef0c6a7c011cd570");//填写自己的APPSECRET
define("TOKEN", "weixin");//token随便填,只要一致就行。
$wechat = new wechat();
$wechat->responseMsg();
class wechat{
private $_appid;
private $_appsecret;
private $_token;
private $tpl=array(
//发送文本消息模板
'text' => ' <xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>',
);
public function __construct(){
$this->_appid =APPID;
$this->_appsecret =APPSECRET;
$this->_token =TOKEN;
}
/**
*响应微信平台发送的消息
**/
public function responseMsg()//所有的被动消息处理都从这里开始
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//获得用户发送信息
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);//解析XML到对象
switch($postObj->MsgType){
case 'text': //文本处理
$this->_doText($postObj);
break;
case 'event': //事件处理
$this->_doEvent($postObj);
break;
default: exit;
}
}
/**
*_doText():处理文本消息
*@postObj:响应的消息对象
**/
private function _doText($postObj)
{
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
if(!empty( $keyword ))
{
$contentStr='hello world!';
exit;
//这里可以做一些业务处理
if($keyword == "hello")
$contentStr = "Welcome to wechat world!";
$msgType = "text";
$resultStr = sprintf($this->tpl['text'], $fromUsername, $toUsername, $time, $contentStr);
echo $resultStr;
}
exit;
}
/**
*_doEvent():处理事件消息
*@postObj:响应的消息对象
**/
private function _doEvent($postObj){ //事件处理
switch($postObj->Event){
case 'subscribe': //订阅
$this->_doSubscribe($postObj);
break;
case 'unsubscribe': //取消订阅
$this->_doUnsubscribe($postObj);
break;
default:;
}
}
/**
*处理关注事件
*@postObj:响应的消息对象
**/
private function _doSubscribe($postObj){
$contentStr='欢迎您关注我的公众号!';
$str = sprintf($this->tpl['text'],$postObj->FromUserName,$postObj->ToUserName,time(),$contentStr);
//还可以保存用户的信息到数据库
echo $str;
}
/**
*处理取消关注事件
*@postObj:响应的消息对象
**/
private function _doUnsubscribe($postObj){
//把用户的信息从数据库中删除
//获取用户的openid,在进行一些业务操作
file_put_contents('useropenid.txt',$postObj->FromUserName);
}
}