今天要弄个用户订阅就给推送一个消息的功能,却发现不知道如何判断用户是订阅的操作,还是取消订阅,还是发消息
代码如下 | 复制代码 |
public function responseMsg() { global $db; //get post data, May be due to the different environments $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); writeover("msg.txt",$postStr."rn","a+"); 。。。。。。 } |
发现$postStr是之前没有封装的字符串,直接打印,即可知道用户的行为了。
测试输出的文件如下
代码如下 | 复制代码 |
<xml><ToUserName><![CDATA[gh_a64528aca3b]]></ToUserName> <FromUserName><![CDATA[oSgH_jveTxJSlFK_6QSiGeVaSyk]]></FromUserName> <CreateTime>1394705044</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[ha]]></Content> <MsgId>5990212551746www.111cn.net353512</MsgId> </xml> |
MsgType即可判断用户行为text表示用户输入了一条文本信息。
如果是订阅,那么就是event 大家自己测试吧。
一个新用户关注公众账号发送的消息的例子
代码如下 | 复制代码 |
<xml><ToUserName><![CDATA[gh_a5218aca3b]]></ToUserName> <FromUserName><![CDATA[oSgH_jveTxJSlFK_6QSiGeVyk]]></FromUserName> <CreateTime>1394706271</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[subscribe]]></Event> <EventKey><![CDATA[]]></EventKey> </xml> |
这样就可以得到具体的事件类型了。
$msgtype = $postObj->MsgType;能判断用户的行为,后续的操作就方便多了。
附上写入日志文件的代码
/*
‘r’ 只读方式打开,将文件指针指向文件头。
‘r+’ 读写方式打开,将文件指针指向文件头。
‘w’ 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
‘w+’ 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
‘a’ 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
‘a+’ 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
*/
代码如下 | 复制代码 |
function writeover2($filename,$data,$method="rb+",$iflock=1) { @touch($filename);/*文件不存在则创建之.可以采用file_exists验证并其他创建文件函数代替.测试结果效率相当*/ $handle=@fopen($filename,$method); if($iflock){ flock($handle,LOCK_EX); } fwrite($handle,$data); if($method=="rb+") ftruncate($handle,strlen($data)); fclose($handle); } |
时间: 2024-11-08 18:56:05