微信公众号教程(16)公司通讯录开发 终
公司通訊錄開發
?原文:http://www.cnblogs.com/imaker/p/6251219.html
四、公司通訊錄開發
?
首先回答有些朋友的疑問為什么要做通訊錄案例?這個案例貌似沒有什么價值,確實從現實使用來看這個案例真沒啥價值,但我是希望通過這個案例教大家學會數據庫的使用、后臺的開發、微信賬號綁定、微信搜索、記錄翻頁等一些基本方法,然后可以結合自己的實際需求來做開發。
?
上傳員工照片
?
在添加員工文件(roster_add.php)中有一個圖片上傳功能,圖片上傳在表單里是使用input控件的file屬性,如下圖:
當提交表單后,程序會收到一個名稱為roster_pic的文件變量,文件變量獲取是用$_FILES,而不是$_GET或$_POST,如下圖:
第97行是監測是否有選擇文件,$_FILES['roster_pic']['name']是上傳文件的原始文件名。
?
第103到105行獲取上傳文件名的后綴
?
第107到111行監測后綴是否合法。
?
第118行是保存圖片到Storage里并返回上傳后的圖片實際路徑賦值給$old_roster_pic。
?
注意:
1、上傳文件的數據會保存成一個臨時文件,web是不能直接訪問用戶電腦文件的,所以我們讀取的源文件是$_FILES['roster_pic']['tmp_name'] 。
?
2、由于我將添加和修改是放在同一個文件里,$old_roster_pic在表單內是用來存放修改狀態下舊圖片文件名稱的,當表單提交后如果沒有上傳圖片并且$old_roster_pic為空(即不在修改狀態)則會提示上傳圖片,如果上傳了圖片則更新$old_roster_pic這個變量,最后寫入數據庫時使用的都是$old_roster_pic的值。
?
后臺的程序基本就是這些,下面主要講前臺與微信通訊的程序,都在wx_interface.php里。
?
微信賬號綁定
?
微信用戶的賬號如何與自己網站的用戶系統打通,這個是很多人關心的問題,其實很簡單,我們都知道微信用戶在關注公眾號或者發送消息時都會有一個唯一的OPENID傳過來,這個OPENID就是這個用戶對應這個公眾賬號的唯一身份標示,我們只要將這個OPENID與自己網站的用戶系統一一綁定就可以了。
?
方法有兩種,一是將OPENID作為登陸頁面或者注冊頁面的URL參數,當用戶點擊這個URL時跳轉到WAP頁面(即自己網站)上進行綁定,另外就是在對話框里進行綁定,我今天介紹的就是在對話框里進行綁定。
?
首先是檢測用戶是否綁定了微信號,這里我寫了個函數,如下圖:
?
第593行是定義函數的名字為check_user,函數傳入的變量為$fromUsername,即微信用戶的OPENID。
?
第598行是通過傳入的OPENID為條件,檢測在員工數據表中是否存在某條記錄的roster_openid等于該OPENID。
?
第600到609行是返回函數運行的記過,如果有記錄的話返回該條數據,如果沒有就返回失敗。
?
在用戶關注公眾賬號時我就判斷是否有綁定過賬號,并且根據綁定情況回復不同的歡迎詞,如下圖:
?
當檢測到用戶關注的事件,調用check_user這個函數,如果返回不是失敗則提示使用幫助,否則提示綁定賬號,效果如圖:
?
?
?
當用戶輸入BD字符時進入賬號綁定模式,如下圖:
?
先判斷用戶是否已經綁定過,綁定過給提醒中斷執行。否則進入綁定流程,由于綁定操作需要分多個步驟驗證多個條件,然后一并查詢數據庫,因此我們要保存每一步的動作和數據,這里使用memcache來保存每個用戶的上一步操作。這里先保存了BD_0標示這是綁定的第一個步驟,提示用戶信息為“請輸入你的姓名”。
?
?
在程序里使用方法為在代碼最開頭啟動memcache,如下圖:
保存memcache的方法為:
$mc->set(緩存變量名, 保存的數據, 0, 緩存時間單位秒);
?
讀取memcache的方法為:
$mc->get(緩存變量名);
?
我在程序的開頭加了獲取memcache值的代碼,每次用戶請求時都會從memcache中獲取用戶上一步的操作和數據。其中$fromUsername."_do"為用戶操作,$fromUsername."_data"為用戶數據,用$fromUsername可以保證每個用戶都有獨立的緩存變量名。
?
接下來等用戶輸入姓名后,接口會收到新的請求,這個時候由于memcache保存過上步標示,因此這里會根據操作緩存的數據判斷進入到第二步,$last_do的值是從程序開始就獲取memcache值后獲取的,如下圖:
?
這里多了一個保存數據的緩存設置,保存了用戶提交的姓名數據,同時將操作緩存的值改為了BD_1,然后繼續提示用戶輸入工號。
?
當用戶輸入工號后,會進入第三步,如下圖:
繼續保存數據,將上一步的數據(姓名)與本次數據(工號)合并用“||”分割,同時將操作緩存的值改為了BD_2,然后繼續提示用戶輸入手機號。
?
當用戶輸入手機號后,就進入最后一步驗證,如下圖:
進入最后一步后先清空操作和數據緩存,然后將之前保存的數據$last_do加上本次用戶輸入內容合并轉換成數組,并用list函數分別賦值給$roster_name,$roster_number,$roster_mp。
?
再進行數據庫查詢滿足用戶姓名、工號和手機與輸入數據完全相同并且roster_openid(員工openid)為空的記錄,如果有符合條件的記錄則更新該記錄,將$fromUsername(當前操作用戶的openid)保存到roster_openid里,完成綁定。
?
這個時候我們輸入“help”就會可以進行后續操作了。
?
?
PS:“輸入exit退出操作”這個也很簡單,當用戶輸入exit的時候程序會清空操作和數據緩存,也就是說所有之前的操作和數據都沒有了,即所有操作重新開始,如下圖:
?
?
?
這個流程使用了memcache來保存一些臨時變量和多步驟操作,除了用來綁定用戶賬戶外,也適合一些調查問卷或者注冊登陸操作。
?
微信搜索
?
搜索其實就是編輯模式下的關鍵字自動回復,我這里拿姓名搜索舉例,首先我們要先切換當前模式到姓名搜索,如下圖:
?
這部分代碼與賬號綁定的第一步是一樣的,我們用memcache存放當前的操作,這個時候存放操作動作的緩存變量里就標示了當前是在姓名搜索狀態下。同時輸出提示,請輸入員工姓名。
?
?
其實這步可以理解為進入網站的二級導航頁面,一個網站有首頁和各種導航欄目,那么在這個通訊錄里幫助就是首頁,你輸入HELP就到了首頁,輸入XM就到員工查詢這個二級欄目,之后除非你輸入BM、GH等一些欄目名,其他的操作都默認是在員工欄目下進行。
?
然后根據提示輸入員工名字進行查詢,如下圖:
?
從數據庫中查找與用戶輸入一致的記錄,如果沒有則返回提醒:
?
?
如果查詢到則返回一個圖文消息,這里沒有去考慮員工重名的情況,所以查詢和返回結果都是只取一條記錄的。
?
?
前端展現原因我只取工號、姓名、當前狀態、照片等字段返回,查看詳情點擊閱讀原文進入到detail頁,把該員工的ID號(不是工號)作為URL參數傳遞過去,然后再做一次數據庫查詢將所有字段提取出來展現。
?
轉載于:https://www.cnblogs.com/imaker/p/6251219.html
總結
以上是生活随笔為你收集整理的微信公众号教程(16)公司通讯录开发 终的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux阻塞原语,Linux中的内存原
- 下一篇: 【随笔】Win7下GVIM的安装与配置