本文实例讲述了php版微信公众平台接口参数调试实现判断用户行为的方法。分享给大家供大家参考,具体如下:
微信开发的时候,发现有个重要的变量$postObj,获得了一个xml结构装入的对象里因为用户发来的事件,之前只知道用户发送一个消息,我进行处理.
今天要弄个用户订阅就给推送一个消息的功能,却发现不知道如何判断用户是订阅的操作,还是取消订阅,还是发消息,代码如下:
1
2
3
4
5
6
7
8
9
|
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是之前没有封装的字符串,直接打印,即可知道用户的行为了,测试输出的文件如下:
1
2
3
4
5
6
7
|
< 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 大家自己测试吧.
一个新用户关注公众账号发送的消息的例子,代码如下:
1
2
3
4
5
6
7
|
< 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实例代码如下:
1
2
3
4
5
6
7
8
9
10
11
|
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程序设计有所帮助。