国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

??
1. ??? ??? ?? ? ??? ?? ??
2. AIP ???? ?? ??
3. ??? ??? ?? ????
4、獲取用戶詳細信息
? ?? ??? ?? ?? C# WeChat ?? ? ?????? ??(4)--??? ?? ?? ? ?? ?? ??

C# WeChat ?? ? ?????? ??(4)--??? ?? ?? ? ?? ?? ??

Feb 16, 2017 pm 04:34 PM

?? ??? C#?? WeChat ?? ? ?????? ??? ???? ??? ?? ???? ??????. ?? ???? ?? ??? ? ??? ???? ?? ???? ?????. ?? ?? ??? ??????. ??? ? ??? ??? ???? ????? ???? ?? ? ? ???? ?? ?? ?? ??? ??????.

WeChat? ?? ??? ??? ???? ??? ??? ??? ??? ? ???? CRM(?? ?? ??) ???? ?? ??? ? ??? ??? ?? ???? ?? ? ??? ????. ?? ??, 48?? ??? ???? ???? ??? ?? ????? ??? ?? ??? ??? ??? WeChat API?? ?? ??? ?????. , ?? ?? ? ??????? ?????.

1. ??? ??? ?? ? ??? ?? ??

?? ?? ?????? ??? ?? ?? ??? ??? ???? ??? ?? ??? ??? ? ????.

C#開發(fā)微信門戶及應(yīng)用(4)--關(guān)注用戶列表及詳細信息管理

?? ?? ???????? ??? ???? ?? ??? ? ? ??? WeChat API? ???? ?? ?? OpenID?? ?????. ?? ???? WeChat API? ?? ??? ??? ????.

??? ??? OpenID(???? WeChat ID)? ???? ?????. ? ?? ??? ?? ? ???? OpenID? ?????. ???? openid? ????). ?? ??? ? ?????? ???? OpenID? ???? ???, ???, ??, ??, ?? ? ??? ??? ??? ?? ??? ??? ?? ? ????.

? ??? ??? ?? ?????. ?, ???? ?? ?? ??? ????? ??? ?? ??????? ?? ?? ?? ??? ?? ?? ?????. ?? ?? ??? ?? OpenID? ????.

WeChat? ??? ?? ???? ???? ?? ? ?? ??? ??? ????, ???? ?? ??? ???? ??? ??? ??? ???? ??? ???? ?????.

????///?<summary>
????///?高級接口獲取的用戶信息。????///?在關(guān)注者與公眾號產(chǎn)生消息交互后,公眾號可獲得關(guān)注者的OpenID????///?(加密后的微信號,每個用戶對每個公眾號的OpenID是唯一的。對于不同公眾號,同一用戶的openid不同)。????///?公眾號可通過本接口來根據(jù)OpenID獲取用戶基本信息,包括昵稱、頭像、性別、所在城市、語言和關(guān)注時間。????///?</summary>
????public?class?UserJson?:?BaseJsonResult
????{????????///?<summary>
????????///?用戶是否訂閱該公眾號標(biāo)識,值為0時,代表此用戶沒有關(guān)注該公眾號,拉取不到其余信息。????????///?</summary>
????????public?int?subscribe?{?get;?set;?}????????///?<summary>
????????///?用戶的標(biāo)識,對當(dāng)前公眾號唯一????????///?</summary>
????????public?string?openid?{?get;?set;?}????????///?<summary>
????????///?用戶的昵稱????????///?</summary>
????????public?string?nickname?{?get;?set;?}????????///?<summary>
????????///?用戶的性別,值為1時是男性,值為2時是女性,值為0時是未知????????///?</summary>
????????public?int?sex?{?get;?set;?}????????///?<summary>
????????///?用戶的語言,簡體中文為zh_CN????????///?</summary>
????????public?string?language?{?get;?set;?}????????///?<summary>
????????///?用戶所在城市????????///?</summary>
????????public?string?city?{?get;?set;?}????????///?<summary>
????????///?用戶所在省份????????///?</summary>
????????public?string?province?{?get;?set;?}????????///?<summary>
????????///?用戶所在國家????????///?</summary>
????????public?string?country?{?get;?set;?}????????///?<summary>
????????///?用戶頭像,最后一個數(shù)值代表正方形頭像大小(有0、46、64、96、132數(shù)值可選,0代表640*640正方形頭像),用戶沒有頭像時該項為空????????///?</summary>
????????public?string?headimgurl?{?get;?set;?}????????///?<summary>
????????///?用戶關(guān)注時間,為時間戳。如果用戶曾多次關(guān)注,則取最后關(guān)注時間????????///?</summary>
????????public?long?subscribe_time?{?get;?set;?}
????}

??? ?? ??? ?? ???? ??? ??? ??? ?????.

????///?<summary>
????///?分組信息????///?</summary>
????public?class?GroupJson?:?BaseJsonResult
????{????????///?<summary>
????????///?分組id,由微信分配????????///?</summary>
????????public?int?id?{?get;?set;?}????????///?<summary>
????????///?分組名字,UTF8編碼????????///?</summary>
????????public?string?name?{?get;?set;?}
????}

2. AIP ???? ?? ??

WeChat API? ??? ? AccessToken? ???? ?? ??? ????. ???? ???? ?? ??? ???? ?????? ?? API ??? ??? ?? ? ?? ?? ?? ??? ? ???? ???.

C#開發(fā)微信門戶及應(yīng)用(4)--關(guān)注用戶列表及詳細信息管理

WeChat? API ???? ? ??? ??? ?? ??? ? ????.

access_token? ?? ??? ????? ??? ?????. ?? ??? ? ?????? ??? ? access_token? ???? ???. ???? ????? access_token? 7200? ?? ?????. ????? ???? ??? access_token? ??????. access_token? ?? ?? API ?? ??? ?? ???? ???? ???? access_token? ????? ???? ?????? ?? ????. access_token? ?? ?? ??? API ??? ???? ????? ??? ????.

?? ??? ??? ID ? ?? ??? ??? ?? ???? ??? ? ?? ???? ??? ??? ? ? ???? ??? ???? ?? ? ????? ??? ????? ?? ??? ??? ?? ??? ?? ??? ??? ???.

?? Access Token? ???? ???? ???? ?????, ?? ??? ???, ?? ???? ???? ??? API ??? ?????. ??.

????????///?獲取憑證接口????????///?</summary>
????????///?<param name="appid">第三方用戶唯一憑證</param>
????????///?<param name="secret">第三方用戶唯一憑證密鑰,既appsecret</param>
????????string?GetAccessToken(string?appid,?string?secret);

??? ?? .NET4? ??? ??? ?????? MemoryCache? ???? ?? ?? ?? ?? ??????.

AccessToken? ?? ?? ?? ?? ?? ??? ??? ????.

????????///?<summary>
????????///?獲取每次操作微信API的Token訪問令牌????????///?</summary>
????????///?<param name="appid">應(yīng)用ID</param>
????????///?<param name="secret">開發(fā)者憑據(jù)</param>
????????///?<returns></returns>
????????public?string?GetAccessToken(string?appid,?string?secret)
????????{????????????//正常情況下access_token有效期為7200秒,這里使用緩存設(shè)置短于這個時間即可
????????????string?access_token?=?MemoryCacheHelper.GetCacheItem<string>("access_token",?delegate()
????????????????{????????????????????string?grant_type?=?"client_credential";????????????????????var?url?=?string.Format("http://www.miracleart.cn/{0}&appid={1}&secret={2}",
????????????????????????????????????????????grant_type,?appid,?secret);

????????????????????HttpHelper?helper?=?new?HttpHelper();????????????????????string?result?=?helper.GetHtml(url);????????????????????string?regex?=?"\"access_token\":\"(?<token>.*?)\"";
????????????????????string?token?=?CRegex.GetText(result,?regex,?"token");????????????????????return?token;
????????????????},????????????????new?TimeSpan(0,?0,?7000)//7000秒過期????????????);????????????return?access_token;????????????
????????}

AccessToken? ????? 7200? ?? ????? ?? ?? ???? ? ?? ?? ??? ? ??? ???? ?? ?????. ? ?? ??? ? ???? ???? ???? ? ?? ?? ???.

3. ??? ??? ?? ????

? ?? ? API ??? ?? 10,000?? ??? OpenID? ??? ? ????. ?? ?. WeChat? ????? ??? ??? ????.

http ?? ??: GET(https ????? ?????)
http://www.miracleart.cn/

這個接口返回的數(shù)據(jù)是

{"total":2,"count":2,"data":{"openid":["","OPENID1","OPENID2"]},"next_openid":"NEXT_OPENID"}

根據(jù)返回的Json數(shù)據(jù)定義,我們還需要定義兩個實體類,用來存放返回的結(jié)果。

????///?<summary>
????///?獲取關(guān)注用戶列表的Json結(jié)果????///?</summary>
????public?class?UserListJsonResult?:?BaseJsonResult
????{????????///?<summary>
????????///?關(guān)注該公眾賬號的總用戶數(shù)????????///?</summary>
????????public?int?total?{?get;?set;?}????????///?<summary>
????????///?拉取的OPENID個數(shù),最大值為10000????????///?</summary>
????????public?int?count?{?get;?set;?}????????///?<summary>
????????///?列表數(shù)據(jù),OPENID的列表????????///?</summary>
????????public?OpenIdListData?data?{?get;?set;?}????????///?<summary>
????????///?拉取列表的后一個用戶的OPENID????????///?</summary>
????????public?string?next_openid?{?get;?set;?}
????}????///?<summary>
????///?列表數(shù)據(jù),OPENID的列表????///?</summary>
????public?class?OpenIdListData
????{????????///?<summary>
????????///?OPENID的列表????????///?</summary>
????????public?List<string>?openid?{?get;?set;?}
????}

為了獲取相關(guān)的用戶信息,我定義了一個接口,用來獲取用戶的信息,接口定義如下所示。

????///?<summary>
????///?微信用戶管理的API接口????///?</summary>
????public?interface?IUserApi
????{????????///?<summary>
????????///?獲取關(guān)注用戶列表????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="nextOpenId">第一個拉取的OPENID,不填默認(rèn)從頭開始拉取</param>
????????///?<returns></returns>
????????List<string>?GetUserList(string?accessToken,?string?nextOpenId?=?null);????????///?<summary>
????????///?獲取用戶基本信息????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="openId">普通用戶的標(biāo)識,對當(dāng)前公眾號唯一</param>
????????///?<param name="lang">返回國家地區(qū)語言版本,zh_CN?簡體,zh_TW?繁體,en?英語</param>
????????UserJson?GetUserDetail(string?accessToken,?string?openId,?Language?lang?=?Language.zh_CN);

然后在實現(xiàn)類里面,我們分別對上面兩個接口進行實現(xiàn),獲取用戶列表信息如下所示。

????????///?<summary>
????????///?獲取關(guān)注用戶列表????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="nextOpenId">第一個拉取的OPENID,不填默認(rèn)從頭開始拉取</param>
????????///?<returns></returns>
????????public?List<string>?GetUserList(string?accessToken,?string?nextOpenId?=?null)
????????{
????????????List<string>?list?=?new?List<string>();????????????string?url?=?string.Format("http://www.miracleart.cn/{0}",?accessToken);????????????if?(!string.IsNullOrEmpty(nextOpenId))
????????????{
????????????????url?+=?"&next_openid="?+?nextOpenId;
????????????}

????????????UserListJsonResult?result?=?JsonHelper<UserListJsonResult>.ConvertJson(url);????????????if?(result?!=?null?&&?result.data?!=?null)
????????????{
????????????????list.AddRange(result.data.openid);
????????????}????????????return?list;
????????}

我們看到,轉(zhuǎn)換的邏輯已經(jīng)放到了JsonHelper里面去了,這個輔助類里面分別對數(shù)值進行了獲取內(nèi)容,驗證返回值,然后轉(zhuǎn)換正確實體類幾個部分的操作。

獲取內(nèi)容,通過輔助類HttpHelper進行,這個在我的公用類庫里面,里面的邏輯主要就是通過HttpRequest進行數(shù)據(jù)的獲取操作,不在贅述

HttpHelper?helper?=?new?HttpHelper();string?content?=?helper.GetHtml(url);

由于返回的內(nèi)容,我們需要判斷它是否正確返回所需的結(jié)果,如果沒有,拋出自定義的相關(guān)異常,方便處理,具體如下所示。

????????///?<summary>
????????///?檢查返回的記錄,如果返回沒有錯誤,或者結(jié)果提示成功,則不拋出異常????????///?</summary>
????????///?<param name="content">返回的結(jié)果</param>
????????///?<returns></returns>
????????private?static?bool?VerifyErrorCode(string?content)
????????{????????????if?(content.Contains("errcode"))
????????????{
????????????????ErrorJsonResult?errorResult?=?JsonConvert.DeserializeObject<ErrorJsonResult>(content);????????????????//非成功操作才記錄異常,因為有些操作是返回正常的結(jié)果({"errcode":?0,?"errmsg":?"ok"})
????????????????if?(errorResult?!=?null?&&?errorResult.errcode?!=?ReturnCode.請求成功)
????????????????{????????????????????string?error?=?string.Format("微信請求發(fā)生錯誤!錯誤代碼:{0},說明:{1}",?(int)errorResult.errcode,?errorResult.errmsg);
????????????????????LogTextHelper.Error(errorResult);????????????????????throw?new?WeixinException(error);//拋出錯誤????????????????}
????????????}????????????return?true;
????????}

然后轉(zhuǎn)換為相應(yīng)的格式,就是通過Json.NET的類庫進行轉(zhuǎn)換。

????????????T?result?=?JsonConvert.DeserializeObject<T>(content);????????????return?result;

這樣我們就可以在ConvertJson函數(shù)實體里面,完整的進行處理和轉(zhuǎn)換了,轉(zhuǎn)換完整的函數(shù)代碼如下所示。

????///?
????///?Json字符串操作輔助類????///?
????public?class?JsonHelper?where?T?:?class,?new()
????{????????///?<summary>
????????///?檢查返回的記錄,如果返回沒有錯誤,或者結(jié)果提示成功,則不拋出異常????????///?</summary>
????????///?<param name="content">返回的結(jié)果</param>
????????///?<returns></returns>
????????private?static?bool?VerifyErrorCode(string?content)
????????{????????????if?(content.Contains("errcode"))
????????????{
????????????????ErrorJsonResult?errorResult?=?JsonConvert.DeserializeObject<ErrorJsonResult>(content);????????????????//非成功操作才記錄異常,因為有些操作是返回正常的結(jié)果({"errcode":?0,?"errmsg":?"ok"})
????????????????if?(errorResult?!=?null?&&?errorResult.errcode?!=?ReturnCode.請求成功)
????????????????{????????????????????string?error?=?string.Format("微信請求發(fā)生錯誤!錯誤代碼:{0},說明:{1}",?(int)errorResult.errcode,?errorResult.errmsg);
????????????????????LogTextHelper.Error(errorResult);????????????????????throw?new?WeixinException(error);//拋出錯誤????????????????}
????????????}????????????return?true;
????????}????????///?
????????///?轉(zhuǎn)換Json字符串到具體的對象????????///?
????????///?返回Json數(shù)據(jù)的鏈接地址
????????///?
????????public?static?T?ConvertJson(string?url)
????????{
????????????HttpHelper?helper?=?new?HttpHelper();????????????string?content?=?helper.GetHtml(url);
????????????VerifyErrorCode(content);

????????????T?result?=?JsonConvert.DeserializeObject<T>(content);????????????return?result;
????????}
}

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

????????????IUserApi?userBLL?=?new?UserApi();
????????????List<string>?userList?=?userBLL.GetUserList(token)

?

4、獲取用戶詳細信息

上面的獲取列表操作,相對比較簡單,而且不用POST任何數(shù)據(jù),因此通過Get協(xié)議就能獲取到所需的數(shù)據(jù)。

本小節(jié)繼續(xù)介紹獲取用戶詳細信息的操作,這個操作也是通過GET協(xié)議就可以完成的。

這個API的調(diào)用定義如下所示:

http請求方式:?GET
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

通過傳入一個OpenId,我們就能很好獲取到用戶的相關(guān)信息了。

前面小節(jié)我們已經(jīng)定義了它的接口,說明了傳入及返回值,根據(jù)定義,它的實現(xiàn)函數(shù)如下所示。

????????///?<summary>
????????///?獲取用戶基本信息????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="openId">普通用戶的標(biāo)識,對當(dāng)前公眾號唯一</param>
????????///?<param name="lang">返回國家地區(qū)語言版本,zh_CN?簡體,zh_TW?繁體,en?英語</param>
????????public?UserJson?GetUserDetail(string?accessToken,?string?openId,?Language?lang?=?Language.zh_CN)
????????{????????????string?url?=?string.Format("http://www.miracleart.cn/{0}&openid={1}&lang={2}",
???????????????????accessToken,?openId,?lang.ToString());

????????????UserJson?result?=?JsonHelper<UserJson>.ConvertJson(url);????????????return?result;
????????}

最后,我們結(jié)合獲取用戶列表和獲取用戶詳細信息的兩個API,我們看看調(diào)用的代碼(測試代碼)。

????????private?void?btnGetUsers_Click(object?sender,?EventArgs?e)
????????{
????????????IUserApi?userBLL?=?new?UserApi();
????????????List<string>?userList?=?userBLL.GetUserList(token);????????????foreach?(string?openId?in?userList)
????????????{
????????????????UserJson?userInfo?=?userBLL.GetUserDetail(token,?openId);????????????????if?(userInfo?!=?null)
????????????????{????????????????????
????????????????????string?tips?=?string.Format("{0}:{1}",?userInfo.nickname,?userInfo.openid);
????????????????????Console.WriteLine(tips);
????????????????}
????????????}
????????}

?

更多C#開發(fā)微信門戶及應(yīng)用(4)--關(guān)注用戶列表及詳細信息管理?相關(guān)文章請關(guān)注PHP中文網(wǎng)!

? ????? ??
? ?? ??? ????? ???? ??? ??????, ???? ?????? ????. ? ???? ?? ???? ?? ??? ?? ????. ???? ??? ???? ???? ??? ?? admin@php.cn?? ?????.

? AI ??

Undresser.AI Undress

Undresser.AI Undress

???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover

AI Clothes Remover

???? ?? ???? ??? AI ?????.

Video Face Swap

Video Face Swap

??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

???

??? ??

???++7.3.1

???++7.3.1

???? ?? ?? ?? ???

SublimeText3 ??? ??

SublimeText3 ??? ??

??? ??, ???? ?? ????.

???? 13.0.1 ???

???? 13.0.1 ???

??? PHP ?? ?? ??

???? CS6

???? CS6

??? ? ?? ??

SublimeText3 Mac ??

SublimeText3 Mac ??

? ??? ?? ?? ?????(SublimeText3)

???

??? ??

??? ????
1601
29
PHP ????
1502
276
???