PHP公眾開發筆記系列
日期:2014.9.2
今天主要的任務是昨天提到的那個處理緩衝資訊的問題,我需要儲存一些訊息用來做二次判斷。
首先,記錄一些PHP文法知識吧。
1、PHP中字串的串連文法:
在lua中,兩個字串的串連很簡單,加入有兩個字串 "aaa";"bbb"; 需要將這兩個字串串連起來,只需要用兩個句點 .. 便可以了:"aaa" .. "bbb"; 這裡要注意,字串與句點直接需要有空格,沒有空格會報錯;
而在PHP中,串連只需要一個句點就可以了:"aaa"."bbb"; 而且不需要強制在字串和句點之間用空格;
2、得到時間,轉換為日期格式:
使用date函數,格式為:date('Y-m-d H:i:s',time());挺簡單的,記錄一下
公眾平台開發需求完成進度。
現在回到昨天留下的那個任務:利用session緩衝記錄資訊,實現我們構想的那個菜單:
php中關於session的使用,我不是很清楚,所以就一直度娘度娘的,折騰了一番,總算是實現了我的功能需求了,不過還是覺得有一些不足的地方,留給以後再來修正吧。
昨天提到了,我要實現的菜單,希望能記住上一條資訊。即提醒使用者輸入查詢,進入查詢菜單,在使用者發送過來“查詢”之後,下一條資訊就應該轉入查詢菜單了,即我需要記住使用者發送過“查詢”這個資訊。在度娘度了好久之後,尋找到了要麼就用資料庫,要麼就用session,在PHP中用資料庫還不會,然後我感覺就簡單的處理一下記住資訊應該不需要動用資料庫,所以採用的是使用session。
使用Session來實現我們的需求:
php中關於session具體該怎麼用,以後還是需要度娘來詳細瞭解一番,現在我們這隻是簡單的使用。
在查閱資料的時候,有網友提到用使用者的username作為唯一id,這樣就使得針對每個使用者儲存的資訊會不一致(因為我們現在是伺服器發送訊息,每個使用者都會發送訊息過來,不能影響別的使用者的使用),所以代碼實現如下:
session_id($postObj->fromUsername); //這個是伺服器post過來的xml資料包中使用者名稱字,用這個作為id
session_start(); //這個應該是開啟session的意思吧?
而我這兩行代碼該放到哪裡也不是很清楚,現在我是將這個代碼放在 responseMsg函數中了,不知道是不是這樣的,後面的測試是有用的。
開啟了session之後,就是記錄資訊了:
$_SESSION['menu_type'] = $this->getUserMenu($textWord); //這裡的getusermenu是我用來根據使用者輸入得到菜單類型的函數;記錄資訊用到了$_SESSION這個變數,這裡是以數組形式使用??
在我們記錄好了資訊之後,該進行資訊的判斷了,使用到:
isset($_SESSION['menu_type']); //用isset來判斷我們是否設定了這個值,這樣就能判斷使用者是否選擇了一個菜單了
然後在我們不需要使用的時候,則使用以下函數來銷毀這個:
unset($_SESSION['menu_type'];
在代碼中再做相應的調整,便可以實現我們的需求了。然後現在覺得不足的地方是,我該在哪個時候銷毀儲存的使用者選擇的菜單類型呢?假如使用者選擇了“查詢”菜單,那麼我們這邊就是響應使用者的查詢行為了,至少在使用者查詢的過程中我們不應該銷毀掉儲存的菜單類型。我感覺合理的銷毀有三種情況:使用者關掉了對話方塊(即使用者退出了和我們這個公眾號的聊天框,但網上沒查到怎麼知道使用者退出了);使用者長時間內沒有執行查詢操作(即使用者在選擇了“查詢”菜單的前提下,經過了一個給定的時間內沒有執行相應的查詢操作,這個時候自動銷毀);最後就是使用者自動選擇退出。不銷毀記錄的資訊,會出現這樣的問題,在使用者選擇了“查詢”菜單,然後使用者退出了與公眾號的聊天,下一次再進入的時候,還會儲存記錄的使用者選擇的菜單資訊,感覺這樣是不合理的。
拋開上面提到的問題,至少這一步我們需要的功能是實現了,有關的問題慢慢修複吧。