程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 微信企業號 獲取用戶信息,微信獲取用戶信息

微信企業號 獲取用戶信息,微信獲取用戶信息

編輯:關於.NET

微信企業號 獲取用戶信息,微信獲取用戶信息


業務操作最基礎的一個功能是獲取訪客的身份,傳統的獲取方式是提供一個登錄頁面用以訪客登錄。

在微信企業號中,用戶在微信中訪問頁面時,可以根據相關API獲取此用戶的微信賬號信息,以此來匹配業務服務器存儲的相關用戶信息。

目錄

1.  介紹

2.  代碼示例

 

1. 介紹

1.1 說明

企業號的網頁開發,說白了就是移動端web開發,特殊點在於如何獲取微信用戶的身份信息。

在企業號中可以進行如下步驟獲取微信用戶信息:

訪問一個業務頁面時,可通過OAuth驗證接口獲取此用戶信息 → 根據code獲取userId → 根據userId獲取微信信息。

 

1.2 詳細流程

① 獲取code

API:http://qydev.weixin.qq.com/wiki/index.php?title=OAuth%E9%AA%8C%E8%AF%81%E6%8E%A5%E5%8F%A3#.E4.BC.81.E4.B8.9A.E8.8E.B7.E5.8F.96code

說明:網頁經過OAuth2.0驗證後,重定向到原來網頁並在url後面添加code信息。

:http://akmsg.com/a.html => OAhth2.0 => http://akmsg.com/a.html?code=CODE&state=STATE

② 根據code獲取userId

API:http://qydev.weixin.qq.com/wiki/index.php?title=OAuth%E9%AA%8C%E8%AF%81%E6%8E%A5%E5%8F%A3#.E6.A0.B9.E6.8D.AEcode.E8.8E.B7.E5.8F.96.E6.88.90.E5.91.98.E4.BF.A1.E6.81.AF

說明:調用此接口後將會獲得 userId;注:userId為加密後的微信賬號。

③ 根據userId獲取微信信息

API:http://qydev.weixin.qq.com/wiki/index.php?title=%E7%AE%A1%E7%90%86%E6%88%90%E5%91%98#.E8.8E.B7.E5.8F.96.E6.88.90.E5.91.98

說明:調用此接口後將會獲得此訪問者在企業號登記的具體信息;如:姓名、微信號、手機號、郵箱、職位等等。

④ 根據微信信息獲取邏輯用戶信息

說明:從上一步驟獲取的微信信息,可以用來跟業務邏輯進行匹配獲取此用戶在業務層中的用戶信息。

 

1.3 流程圖

 

2. 代碼示例

2.1 代碼(C#)

邏輯:Asp.net對客戶端發送的請求進行判斷,符合微信企業號頁面規則的將進行微信企業號用戶身份認證操作。

此功能對訪問請求的三種情況進行分別判斷:

1.第一次訪問,沒code :進行OAuth驗證

2.有code,沒cookie :獲取code對應的信息

3.有code,有cookie :驗證cookie

/// <summary>
/// 驗證微信訪問
/// </summary>
public static void Auth(HttpContext webContext)
{

    string requestURL = webContext.Request.Url.AbsoluteUri;

    try
    {
        // 用戶訪問微信頁面有3種情況:
        // 1.第一次訪問,沒code
        // 2.有code,沒cookie;
        // 3.有code,有cookie

        // 1.第一次訪問,沒code,沒cookie:跳轉到Oauth2.0認證
        if (string.IsNullOrEmpty(webContext.Request["code"]))
        {
            string url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect", CORPID, webContext.Server.UrlEncode(requestURL));
            webContext.Response.Redirect(url, false);
        }
        else if (!string.IsNullOrEmpty(webContext.Request["code"]) && string.IsNullOrEmpty(CookieHelper.GetCookie("WXToken")))
        {
            // 2.有code,沒cookie:根據code獲取userID
            string code = webContext.Request["code"];
            string userId = "";
            string userInfo = "";

            #region 1)根據code獲取userId

            string url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={0}&code={1}", GetAccessToken(), code);
            string responseText = HttpHelper.Instance.get(url);
            /*
                API:http://qydev.weixin.qq.com/wiki/index.php?title=OAuth%E9%AA%8C%E8%AF%81%E6%8E%A5%E5%8F%A3#.E6.A0.B9.E6.8D.AEcode.E8.8E.B7.E5.8F.96.E6.88.90.E5.91.98.E4.BF.A1.E6.81.AF
                正確的Json返回示例:
                {
                   "UserId":"USERID",
                   "DeviceId":"DEVICEID"
                }
                未關注企業號時返回:
                {
                   "OpenId":"OPENID",
                   "DeviceId":"DEVICEID"
                }
                錯誤的Json返回示例:
                {
                   "errcode": "40029",
                   "errmsg": "invalid code"
                }
            */
            WeChatUserCodeEntity codeEn = JsonHelper.GetEntity<WeChatUserCodeEntity>(responseText);
            if (codeEn.errcode > 0)
            {
                throw new Exception(codeEn.errmsg);
            }
            else if (string.IsNullOrEmpty(codeEn.UserId))
            {
                throw new Exception("請先關注企業號!");
            }
            userId = codeEn.UserId;


            #endregion

            #region 2)根據userId獲取用戶信息

            url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token={0}&userid={1}", GetAccessToken(), userId);
            responseText = HttpHelper.Instance.get(url);
            /*
                API:http://qydev.weixin.qq.com/wiki/index.php?title=%E7%AE%A1%E7%90%86%E6%88%90%E5%91%98#.E8.8E.B7.E5.8F.96.E6.88.90.E5.91.98
                正確的Json返回示例:
                {
                   "errcode": 0,
                   "errmsg": "ok",
                   "userid": "zhangsan",
                   "name": "李四",
                   "department": [1, 2],
                   "position": "後台工程師",
                   "mobile": "15913215421",
                   "gender": "1",
                   "email": "[email protected]",
                   "weixinid": "lisifordev",  
                   "avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0",
                   "status": 1,
                   "extattr": {"attrs":[{"name":"愛好","value":"旅游"},{"name":"卡號","value":"1234567234"}]}
                }
                錯誤的Json返回示例:
                {
                   "errcode": "40029",
                   "errmsg": "invalid code"
                }
            */
            WeChatUserInfoEntity userInfoEn = JsonHelper.GetEntity<WeChatUserInfoEntity>(responseText);
            if (userInfoEn.errcode > 0)
            {
                throw new Exception(userInfoEn.errmsg);
            }
            userInfo = responseText;

            #endregion

            // 3.把userInfo傳入到cookie裡
            CookieHelper.SetCookie("WXToken", userInfo, -1);
        }
        else if (!string.IsNullOrEmpty(webContext.Request["code"]) && !string.IsNullOrEmpty(CookieHelper.GetCookie("WXToken")))
        {
            #region 3.有code,有cookie:校驗cookie
            // TODO:在上面進行存入cookie時可采用AES加密,在這部進行解密校驗
            // CookieHelper.SetCookie("WXToken", "", -1);
            #endregion
        }
        else
        {
            throw new Exception("非授權訪問!");
        }

    }
    catch (Exception ex)
    {
        throw ex;
    }
}

  

2.2 運行圖

1) 用戶已關注訪問時

 

2) 用戶不屬於企業通訊錄訪問時

  

2.3 Dmeo下載(C#)

下載地址:http://files.cnblogs.com/files/polk6/Wechat.QYH.zip

 

==================================系列文章==========================================

本篇文章:1.3 微信企業號 獲取用戶信息

微信開發文章導航

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved