zoukankan      html  css  js  c++  java
  • C#微信公众号开发--网页授权(oauth2.0)获取用户基本信息一

    前言

         微信网页授权共分为两种方式:snsapi_base、snsapi_userinfo。 snsapi_base需要关注公众号,获取用户信息时不弹出用户授权界面。 snsapi_userinfo是在用户未关注公众号的情况下浏览页面,会先弹出一个用户授权界面,用户授权后才能拿到用户信息。这一篇我们先看snsapi_base实现。

    踩坑注意     

    • 刚开始我调试时snsapi_base方式,点击页面地址时提示地址链接不可用,网页授权需要先在公众号里设置网页授权基本信息,也就是设置域名。
    • 区分清楚全局access_token和网页授权access_token

       

    这里注意只填写到域名

    看效果

           这里看我们通过oauth  snsapi_base已经拿到用户的基本信息,对于一般咨询类的开发也就够用了。

    看思路

    1、通过回掉地址先拿到code。

    2、通过code拿到openid。

    3、通过appid和appsecret拿到全局access_token(这一点区别于snsapi_userinfo)。

    4、通过全局access_token和openid拿到用户信息。

    看代码

         到这里也就简单了,主要是get方式调微信接口,同时准备好你的get和post请求方式,返回参数用json转化成实体类。

    public ActionResult OAuthSnsApiBase()
     {
          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));
    
                        string accesstoken = string.Empty;
                        AccessToken token = HttpUtility.Get<AccessToken>(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}",appID,appsecret));
    
                        if (token != null && !string.IsNullOrEmpty(token.access_token))
                        {
                            accesstoken = token.access_token;
                        }
                        
                        if (oauthToken != null && !string.IsNullOrEmpty(oauthToken.openid))
                        {
                            
                            OAuthUserInfo userInfo = HttpUtility.Get<OAuthUserInfo>(string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN", accesstoken, 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_base&state=123456#wechat_redirect", appID,"http://"+Request.Url.Host + Url.Action("OAuthSnsApiBase")));
                    }
                }
                catch (Exception ex)
                {         
                    ViewData["errmsg"] = ex.Message;
                }
                
                return View();
            }
    
     public class OAuthToken
        {
            public string access_token { get; set; }
            public int expires_in { get; set; }
            public string refresh_token { get; set; }
            public string openid { get; set; }
            public string scope { get; set; }
    
        }
    
     public class AccessToken
        {
            public string access_token { get; set; }
            public int expires_in { get; set; }
        }
    
    public class OAuthUserInfo
        {
            public string openid { get; set; }
            public string nickname { get; set; }
            public int sex { get; set; }
            public string province { get; set; }
            public string city { get; set; }
            public string country { get; set; }
            public string headimgurl { get; set; }
            public string privilege { get; set; }
            public string unionid { get; set; }
            
        }
    

      

    总结

         这里获取用户信息的接口是https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN。和网页授权二获取用户接口是不一样的。

        代码全部上传到github里:https://github.com/garfieldzf8/WeChat

    参考

    http://www.cnblogs.com/txw1958/p/weixin76-user-info.html

     

  • 相关阅读:
    javascript——表单校验工具代码
    java工具类——字符串类型的时间格式转换为Timestamp类型
    log4j:WARN Please initialize the log4j system properly
    CentOS 网络配置
    linux-vim 快捷键
    2020年7月29日 数组操作练习
    2020年7月28日数组的声明,静态、动态初始化,遍历,内存分析
    2020年7月27日 练习题4、5、6、7、8、9、12
    2020年7月24日 100以内猜数字,统计次数
    2020年7月24日 编写FooBizBaz.java
  • 原文地址:https://www.cnblogs.com/sword-successful/p/6262278.html
Copyright © 2011-2022 走看看