天天看點

C#開發微信門戶及應用(4)--關注使用者清單及詳細資訊管理

在上個月的對C#開發微信門戶及應用做了介紹,寫過了幾篇的随筆進行分享,由于時間關系,間隔了一段時間沒有繼續寫這個系列的部落格了,并不是對這個方面停止了研究,而是繼續深入探索這方面的技術,為了更好的應用起來,專心做好底層的技術開發。

微信的很重要的一個特點就是能夠利用其平台龐大的使用者群體,是以很容易整合在CRM(客戶關系管理)系統裡面,服務号和訂閱好都能夠向關注者推送相關的産品消息,還能和48小時内響應消息和事件的活躍使用者進行互動對話,是以使用者資訊是微信API裡面非常重要的一環,本随筆主要介紹擷取關注使用者、檢視使用者資訊、分組管理等方面的開發應用。

在微信的管理平台上,我們可以看到自己賬号的關注者使用者,以及使用者分組資訊,如下所示。

C#開發微信門戶及應用(4)--關注使用者清單及詳細資訊管理

上面的管理界面,能看到關注者使用者的基礎資訊,但是使用微信API擷取到的是一個稱之為OpenID的清單,我們先了解這個東西是什麼?微信API的說明給出下面的解析:

關注者清單由一串OpenID(加密後的微信号,每個使用者對每個公衆号的OpenID是唯一的。對于不同公衆号,同一使用者的openid不同)組成。公衆号可通過本接口來根據OpenID擷取使用者基本資訊,包括昵稱、頭像、性别、所在城市、語言和關注時間。

上面的解析意思很清楚了,就是一個使用者關注我們的公衆号,那麼不管他是第幾次關注,對我們公衆号來說,都是一個确定的值;但是,一個使用者對其他公衆号,卻有着其他不同的OpenID。

微信提供了為數不多的幾個關鍵字資訊,用來記錄使用者的相關内容,根據使用者的相關定義,我們定義一個實體類,用來放置擷取回來的使用者資訊。

根據分組資訊定義,我們定義一個分組的實體類資訊。

在做微信API的開發,很多時候,我們都需要傳入一個AccessToken,這個就是區分調用者和記錄會話資訊的字元串,是以,在學習所有API開發之前,我們需要很好了解這個通路控制參數。

C#開發微信門戶及應用(4)--關注使用者清單及詳細資訊管理

這個對象的定義,我們可以從微信的API說明中了解。

access_token是公衆号的全局唯一票據,公衆号調用各接口時都需使用access_token。正常情況下access_token有效期為7200秒,重複擷取将導緻上次擷取的access_token失效。由于擷取access_token的api調用次數非常有限,建議開發者全局存儲與更新access_token,頻繁重新整理access_token會導緻api調用受限,影響自身業務。

根據上面的說明定義,我們可以看到,它是一個和身份,以及會話時間有關的一個參數,而且它的産生次數有限制,是以要求我們需要對它進行緩存并重複利用,在會話到期之前,我們應該盡可能重用這個參數,避免反複請求,增加伺服器壓力,以及調用的時間。

我定義了一個方法,用來構造生成相關的Access Token,而且它具有緩存的功能,但具體如何緩存及使用,對我API的調用是透明的,我們隻要用的時候,就對它調用就是了。

緩存主要是基于.NET4增加的類庫MemoryCache,這個是一個非常不錯的緩存類。

我的擷取AccessToken的操作實作代碼如下所示。

由于我們知道,AccessToken預設是7200秒過期,是以在這個時間段裡面,我們盡可能使用緩存來記錄它的值,如果超過了這個時間,我們調用這個方法的時候,它會自動重新擷取一個新的值給我們了。

擷取關注使用者清單,一次拉取API調用,最多拉取10000個關注者的OpenID,可以通過多次拉取的方式來滿足需求。微信的接口定義如下所示。

http請求方式: GET(請使用https協定)

https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID

這個接口傳回的資料是

根據傳回的Json資料定義,我們還需要定義兩個實體類,用來存放傳回的結果。

為了擷取相關的使用者資訊,我定義了一個接口,用來擷取使用者的資訊,接口定義如下所示。

然後在實作類裡面,我們分别對上面兩個接口進行實作,擷取使用者清單資訊如下所示。

我們看到,轉換的邏輯已經放到了JsonHelper裡面去了,這個輔助類裡面分别對數值進行了擷取内容,驗證傳回值,然後轉換正确實體類幾個部分的操作。

擷取内容,通過輔助類HttpHelper進行,這個在我的公用類庫裡面,裡面的邏輯主要就是通過HttpRequest進行資料的擷取操作,不在贅述。

由于傳回的内容,我們需要判斷它是否正确傳回所需的結果,如果沒有,抛出自定義的相關異常,友善處理,具體如下所示。

然後轉換為相應的格式,就是通過Json.NET的類庫進行轉換。

這樣我們就可以在ConvertJson函數實體裡面,完整的進行處理和轉換了,轉換完整的函數代碼如下所示。

調用這個API的界面層代碼如下所示(測試代碼)

上面的擷取清單操作,相對比較簡單,而且不用POST任何資料,是以通過Get協定就能擷取到所需的資料。

本小節繼續介紹擷取使用者詳細資訊的操作,這個操作也是通過GET協定就可以完成的。

這個API的調用定義如下所示:

通過傳入一個OpenId,我們就能很好擷取到使用者的相關資訊了。

前面小節我們已經定義了它的接口,說明了傳入及傳回值,根據定義,它的實作函數如下所示。

最後,我們結合擷取使用者清單和擷取使用者詳細資訊的兩個API,我們看看調用的代碼(測試代碼)。

本系列相關文章如下:

<a href="http://www.cnblogs.com/wuhuacong/p/4442683.html">C#開發微信門戶及應用(25)-微信企業号的用戶端管理功能</a>

<a href="http://www.cnblogs.com/wuhuacong/p/4203869.html">C#開發微信門戶及應用(24)-微信小店貨架資訊管理</a>

<a href="http://www.cnblogs.com/wuhuacong/p/4203139.html">C#開發微信門戶及應用(23)-微信小店商品管理接口的封裝和測試</a>

<a href="http://www.cnblogs.com/wuhuacong/p/4203050.html">C#開發微信門戶及應用(22)-微信小店的開發和使用</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3995678.html">C#開發微信門戶及應用(20)-微信企業号的菜單管理</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3995494.html">C#開發微信門戶及應用(19)-微信企業号的消息發送(文本、圖檔、檔案、語音、視訊、圖文消息等)</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3995484.html">C#開發微信門戶及應用(18)-微信企業号的通訊錄管理開發之成員管理</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3992230.html">C#開發微信門戶及應用(17)-微信企業号的通訊錄管理開發之部門管理</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3991735.html">C#開發微信門戶及應用(16)-微信企業号的配置和使用</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3988858.html">C#開發微信門戶及應用(15)-微信菜單增加掃一掃、發圖檔、發地理位置功能</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3778972.html">C#開發微信門戶及應用(14)-在微信菜單中采用重定向擷取使用者資料</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3756347.html">C#開發微信門戶及應用(13)-使用地理位置擴充相關應用</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3753834.html">C#開發微信門戶及應用(12)-使用語音處理</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3735739.html">C#開發微信門戶及應用(11)--微信菜單的多種表現方式介紹</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3735671.html">C#開發微信門戶及應用(10)--在管理系統中同步微信使用者分組資訊</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3734614.html">C#開發微信門戶及應用(9)-微信門戶菜單管理及送出到微信伺服器</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3733189.html">C#開發微信門戶及應用(8)-微信門戶應用管理系統功能介紹</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3732902.html">C#開發微信門戶及應用(7)-微信多客服功能及開發內建</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3701961.html">C#開發微信門戶及應用(6)--微信門戶菜單的管理操作</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3695351.html">C#開發微信門戶及應用(5)--使用者分組資訊管理</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3695213.html">C#開發微信門戶及應用(4)--關注使用者清單及詳細資訊管理</a>

<a href="http://www.cnblogs.com/wuhuacong/p/3622636.html">C#開發微信門戶及應用(3)--文本消息和圖文消息的應答</a>