這一篇實現snsapi_userinfo,寫這篇時其實我是有疑惑的,由於我並無調試成功,可是我反覆檢查程序和思路是沒有問題的,由於我使用的測試公衆號,羣裏一個夥計說他以前調試時用的也是測試公衆號也遇到了和我同樣的問題,而後換上正式公衆號就行了。並且我再三檢查了微信開發文檔裏,snsapi_userinfo的方式是要比snsapi_base簡單的,也很好理解。html
我先描述下問題吧,snsapi_userinfo的方式是不須要咱們關注公衆號的,因此我就在未關注的情下點擊頁面地址跳轉後提示我未關注測試公衆號。 api
有了上一篇網頁受權獲取用戶基本信息一的基礎,再實現snsapi_userinfo就更快了,一路調接口。 緩存
一、先獲取code微信
二、根據code獲取網頁受權access_token和openid。看了其餘人寫的博客有的提到了網頁受權access_token天天的上限是12次,也就是每兩個小時調用一次要本身緩存起來(大多數demo裏用Session)。我查了下微信開發文檔接口頻率限制,正式公衆號和測試公衆號網頁受權access_token和refresh_token調用都是沒有上限的。附微信接口限制說明微信開發
三、根據access_token和openid獲取用戶信息。app
public ActionResult OAuthSnsApiUserInfo() { string code = Request.QueryString["code"]; try { if (!string.IsNullOrEmpty(code)) { OAuthToken oauthToken = HttpUtility.Get<OAuthToken>(string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appID, appsecret, code)); if (oauthToken != null && !string.IsNullOrEmpty(oauthToken.openid) && !string.IsNullOrEmpty(oauthToken.access_token)) { OAuthUserInfo userInfo = Get<OAuthUserInfo>(string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN", oauthToken.access_token, oauthToken.openid)); if (userInfo != null) { ViewData["headImage"] = userInfo.headimgurl; ViewData["openid"] = userInfo.openid; ViewData["nickName"] = userInfo.nickname; if (userInfo.sex == 0) { ViewData["sex"] = "未知"; } else if (userInfo.sex == 1) { ViewData["sex"] = "男"; } else { ViewData["sex"] = "女"; } ViewData["province"] = userInfo.province; ViewData["city"] = userInfo.city; } else { } } else { } } else { return Redirect(string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_userinfo&state=123456#wechat_redirect", appID,Server.UrlEncode("http://" + Request.Url.Host + Url.Action("OAuthSnsApiUserInfo")))); } } catch (Exception ex) { ViewData["errmsg"] = ex.Message; } return View(); }
網頁受權二里獲取用戶信息的接口是:https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN。測試