这里有新鲜出炉的精品教程,程序狗速度看过来!
微信(英文名:wechat)是腾讯公司于 2011 年 1 月 21 日推出的一个为智能终端提供即时通讯服务的免费应用程序,微信支持跨通信运营商、跨操作系统平台通过网络快速发送免费语音短信、视频、图片和文字,同时,也可以使用通过共享流媒体内容的资料和基于位置的社交插件 "摇一摇"、"漂流瓶"、"朋友圈"、"公众平台"、"语音记事本" 等服务插件。
这篇文章主要介绍了 php 版微信公众平台接口参数调试实现判断用户行为的方法, 可判断出用户订阅、取消订阅、发送信息等行为, 涉及微信公众平台接口参数调试的相关操作技巧, 需要的朋友可以参考下
本文实例讲述了 php 版微信公众平台接口参数调试实现判断用户行为的方法。分享给大家供大家参考,具体如下:
微信开发的时候, 发现有个重要的变量 $postObj, 获得了一个 xml 结构装入的对象里因为用户发来的事件, 之前只知道用户发送一个消息, 我进行处理.
今天要弄个用户订阅就给推送一个消息的功能, 却发现不知道如何判断用户是订阅的操作, 还是取消订阅, 还是发消息, 代码如下:
- 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.phpfensi.com353512</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+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
PHP 实例代码如下:
- 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);
- }
希望本文所述对大家 PHP 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0805/342540.html