php 获取企业号用户,微信企业号 获取用户信息(示例代码)
業務操作最基礎的一個功能是獲取訪客的身份,傳統的獲取方式是提供一個登錄頁面用以訪客登錄。
在微信企業號中,用戶在微信中訪問頁面時,可以根據相關API獲取此用戶的微信賬號信息,以此來匹配業務服務器存儲的相關用戶信息。
目錄
1. 獲取步驟
1.1 介紹
企業號的網頁開發,說白了就是移動端web開發,特殊點在于如何獲取微信用戶的身份信息。
在企業號中可以進行如下步驟獲取微信用戶信息:
訪問一個業務頁面時,可通過OAuth驗證接口獲取此用戶信息 → 根據code獲取userId → 根據userId獲取微信信息。
1.2 詳細流程
① 獲取code
說明:網頁經過OAuth2.0驗證后,重定向到原來網頁并在url后面添加code信息。
如:http://akmsg.com/a.html => OAhth2.0 =>?http://akmsg.com/a.html?code=CODE&state=STATE
② 根據code獲取userId
說明:調用此接口后將會獲得 userId;注:userId為加密后的微信賬號。
③ 根據userId獲取微信信息
說明:調用此接口后將會獲得此訪問者在企業號登記的具體信息;如:姓名、微信號、手機號、郵箱、職位等等。
④ 根據微信信息獲取邏輯用戶信息
說明:從上一步驟獲取的微信信息,可以用來跟業務邏輯進行匹配獲取此用戶在業務層中的用戶信息。
1.3 流程圖
2. 代碼示例
2.1 代碼(C#)
邏輯:Asp.net對客戶端發送的請求進行判斷,符合微信企業號頁面規則的將進行微信企業號用戶身份認證操作。
此功能對訪問請求的三種情況進行分別判斷:
1.第一次訪問,沒code :進行OAuth驗證
2.有code,沒cookie :獲取code對應的信息
3.有code,有cookie :驗證cookie
///
/// 驗證微信訪問
///
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(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(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#)
==================================系列文章==========================================
本篇文章:1.3?微信企業號 獲取用戶信息
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的php 获取企业号用户,微信企业号 获取用户信息(示例代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php+icu+库是什么意思,如何从PH
- 下一篇: matlab泰勒图,matlab画泰勒图