微信開(kāi)發(fā)的時(shí)候,發(fā)現(xiàn)有個(gè)重要的變量$postObj,獲得了一個(gè)xml結(jié)構(gòu)裝入的對(duì)象里因?yàn)橛脩?hù)發(fā)來(lái)的事件,之前只知道用戶(hù)發(fā)送一個(gè)消息,我進(jìn)行處理.
今天要弄個(gè)用戶(hù)訂閱就給推送一個(gè)消息的功能,卻發(fā)現(xiàn)不知道如何判斷用戶(hù)是訂閱的操作,還是取消訂閱,還是發(fā)消息,代碼如下:
- 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+");
- 。。。。。
- }
發(fā)現(xiàn)$postStr是之前沒(méi)有封裝的字符串,直接打印,即可知道用戶(hù)的行為了,測(cè)試輸出的文件如下:
- <xml><ToUserName><![CDATA[gh_a64528aca3b]]></ToUserName>
- <FromUserName><![CDATA[oSgH_jveTxJSlFK_6QSiGeVaSyk]]></FromUserName>
- <CreateTime>1394705044</CreateTime>
- <MsgType><![CDATA[text]]></MsgType>
- <Content><![CDATA[ha]]></Content>
- <MsgId>5990212551746m.survivalescaperooms.com353512</MsgId>
- </xml>
MsgType即可判斷用戶(hù)行為text表示用戶(hù)輸入了一條文本信息,如果是訂閱,那么就是event 大家自己測(cè)試吧.
一個(gè)新用戶(hù)關(guān)注公眾賬號(hào)發(fā)送的消息的例子,代碼如下:
- <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>
這樣就可以得到具體的事件類(lèi)型了.
$msgtype = $postObj->MsgType;能判斷用戶(hù)的行為,后續(xù)的操作就方便多了.
附上寫(xiě)入日志文件的代碼:
‘r’ 只讀方式打開(kāi),將文件指針指向文件頭。
‘r+’ 讀寫(xiě)方式打開(kāi),將文件指針指向文件頭。
‘w’ 寫(xiě)入方式打開(kāi),將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創(chuàng)建之。
‘w+’ 讀寫(xiě)方式打開(kāi),將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創(chuàng)建之。
‘a’ 寫(xiě)入方式打開(kāi),將文件指針指向文件末尾。如果文件不存在則嘗試創(chuàng)建之。
‘a+’ 讀寫(xiě)方式打開(kāi),將文件指針指向文件末尾。如果文件不存在則嘗試創(chuàng)建之。
PHP實(shí)例代碼如下:
- function writeover2($filename,$data,$method="rb+",$iflock=1)
- {
- @touch($filename);/*文件不存在則創(chuàng)建之.可以采用file_exists驗(yàn)證并其他創(chuàng)建文件函數(shù)代替.測(cè)試結(jié)果效率相當(dāng)*/
- $handle=@fopen($filename,$method);
- if($iflock){
- flock($handle,LOCK_EX);
- }
- fwrite($handle,$data);
- if($method=="rb+") ftruncate($handle,strlen($data));
- fclose($handle);
- }
新聞熱點(diǎn)
疑難解答