zoukankan      html  css  js  c++  java
  • .net core 实现微信登陆

         
     public const string appId = "";//申请的微信给的appId
            public const string appSecret = "";//申请的微信给的appsecret
            public const string redirecturl = "";//申请的微信的回调地址
       #region 微信登陆
            /// <summary>
            /// 微信授权页面
            /// </summary>
            /// <returns></returns>
            public virtual IActionResult WechatAuthorize()
            {
                var url = $"https://open.weixin.qq.com/connect/qrconnect?appid={appId}&redirect_uri={redirecturl}&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect";
                return new RedirectResult(url);
            }
            /// <summary>
            /// 微信回调方法
            /// </summary>
            /// <returns></returns>
            public virtual IActionResult WechatLogin()
            {
                var code = Request.Query["code"];
                var dis = GetAuthorityWechatAccessToken(code);
                if (!dis.ContainsKey("openid") || !dis.ContainsKey("access_token"))
                    return null;
                var userinfo = GetWechatUserInfo(dis["access_token"], dis["openid"]);
                return null;
            }
    
            /// <summary>
            /// 微信比QQ在获取Token的时候返回了OpenId和UnionId。
            /// </summary>
            /// <param name="code"></param>
            /// <returns></returns>
            public virtual Dictionary<string,string> GetAuthorityWechatAccessToken(string code)
            {
                if (string.IsNullOrEmpty(code))
                    return null;
                var url =
                    string.Format(
                        "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code",
                        appId, appSecret, code);
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                var json = WebRequestHelper.GetResponse(request, "utf-8");
                if (string.IsNullOrEmpty(json))
                    return null;
                if (!json.Contains("access_token"))
                {
                    return null;
                }
                var dis = json.DeserializeJson<Dictionary<string, string>>();
                return dis;
            }
    
            /// <summary>
            /// 获取微信用户信息
            /// </summary>
            /// <param name="token"></param>
            /// <param name="openid"></param>
            /// <returns></returns>
            public virtual  Dictionary<string,object>GetWechatUserInfo(string token,string openid)
            {
                var url = $"https://api.weixin.qq.com/sns/userinfo?access_token={token}&openid={openid}";
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                var json = WebRequestHelper.GetResponse(request, "utf-8");
                var dis = json.DeserializeJson<Dictionary<string, object>>();
                if (dis == null || dis.ContainsKey("errcode"))
                    return null;
                return dis;
            }
    
            #endregion
    View Code
    //请求接口方法   
    public static string GetResponse(WebRequest request, string encoding)
            {
                using (WebResponse response = request.GetResponse())
                {
                    var stream = response.GetResponseStream();
                    if (stream == null) return null;
                    using (var reader = new StreamReader(stream, Encoding.GetEncoding(encoding)))
                    {
                        return reader.ReadToEnd();
                    }
                }
            }
    View Code

    这个没有测试登陆,因为看文档和QQ登陆大同小异,连代码都是差不多的。所以就没有测试了。

    望参考的游客,还仅供参考。

  • 相关阅读:
    chrome安装HostAdmin app
    Python编码问题
    Elasticsearch利用scroll查询获取所有数据
    oracle不小心更新了数据库中的所有内容后的恢复
    git误提交了项目文件和配置文件的恢复方法
    生成banner的网站
    去除字符串中的emoji字符
    爬虫从网页中去取的数据中包含&nbsp;空格
    高版本的jdk编译过的项目移到低版本的JDK的eclipse中出错的问题
    java爬虫爬取的html内容中空格(&nbsp;)变为问号“?”的解决方法
  • 原文地址:https://www.cnblogs.com/CnnBlog/p/11451374.html
Copyright © 2011-2022 走看看