• C# 微信公众号


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Configuration;
    using System.Net;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;namespace Web
    {
        public partial class Test : System.Web.UI.Page
        {
            //用户id
            public string openid = "";
    
            //公众号信息部分
            public string appid = ConfigurationManager.AppSettings["AppId"];
            public string appsecret = ConfigurationManager.AppSettings["AppSecret"];
    
            public string redirect_uri = HttpUtility.UrlEncode("需返回的URL");
    
            #region 显示页面
            public string accesstoken;
            public string nickname;
            public string sex;
            public string headimgurl;
            public string province;
            public string country;
            public string language;
            public string city;
    
            public string privilege = "";
    
            public string errorMsg = "";
            public string errorUrl = "";
            #endregion
    
            protected void Page_Load(object sender, EventArgs e)
            {
                // 微信官方文档
                // https://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
                // /* *微信认证获取openid部分: *临时认证code */
                string code = Request["code"];
                if (string.IsNullOrEmpty(code))
                {
                    //判断session不存在
                    if (Session["openid"] == null)
                    {
                        //认证第一步:重定向跳转至认证网址
                        // 1.snsapi_base 不弹出授权页面,直接跳转,只能获取用户openid
                        string urlbase = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=123#wechat_redirect", appid, redirect_uri);
                        // 2.snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)
                        string usrinfo = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect", appid, redirect_uri);
    
                        Response.Redirect(urlbase);
                    }
                    //判断session存在
                    else
                    {
                        //跳转到前端页面.aspx
                        Response.Redirect(Request.Url.ToString());
                    }
                    return;
                }
                //第三步 获得openid
                string 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);
                string result = HttpHelper.GetResponse(url);
                Log.Instance.SaveLog(result);
                JObject outputObj = JObject.Parse(result);
                if (outputObj["errmsg"] != null)
                {
                    errorMsg = outputObj["errmsg"].ToString();
                    errorUrl = url;
                    return;
                }
                accesstoken = outputObj["access_token"].ToString();
                openid = outputObj["openid"].ToString();
    
                GetUserInfo(openid);//通过基础接口获取数据, 不弹出授权页面
                GetUserInfo(accesstoken, openid);//通过授权页面获取信息, 会弹出确认页面,需要第一步传入userinfo
            }
    
            /// <summary>
            /// 通过基础接口获取用户信息
            /// </summary>
            public void GetUserInfo( string openid )
            {
                //第一步 获取基础支持access_token
                string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, appsecret);
                string result = HttpHelper.GetResponse(url);
                Log.Instance.SaveLog(result);
                JObject outputObj = JObject.Parse(result);
                if (outputObj["errmsg"] != null)
                {
                    errorMsg = outputObj["errmsg"].ToString();
                    errorUrl = url;
                    return;
                }
                string token = outputObj["access_token"].ToString();
    
                //第二步 获取用户基本信息
                url = string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}", token, openid);
                result = HttpHelper.GetResponse(url);
                Log.Instance.SaveLog(result);
                outputObj = JObject.Parse(result);
                if (outputObj["errmsg"] != null)
                {
                    errorMsg = outputObj["errmsg"].ToString();
                    errorUrl = url;
                    return;
                }
    
                //以下是第四步获得的信息: 
                nickname = outputObj["nickname"].ToString(); //昵称
                sex = outputObj["sex"].ToString()=="1"?"":""; //性别什么的
                headimgurl = outputObj["headimgurl"].ToString(); //头像url
                province = outputObj["province"].ToString();
                country = outputObj["country"].ToString(); ;
                language = outputObj["language"].ToString(); ;
                city = outputObj["city"].ToString(); ;
                //将获得的用户信息填入到session中
                Session["openid"] = outputObj["openid"];            
            }
    
            /// <summary>
            /// 通过网页授权方式获取用户信息
            /// </summary>
            public void GetUserInfo(string token, string openid)
            {
                //微信认证部分:第四步 获得更多信息
                string url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN", accesstoken, openid);
                string result = HttpHelper.GetResponse(url);
                Log.Instance.SaveLog(result);
                JObject outputObj = JObject.Parse(result);//将json转为数组
    
                if (outputObj["errmsg"] != null)
                {
                    errorMsg = outputObj["errmsg"].ToString();
                    errorUrl = url;
                    return;
                }
    
                //以下是第四步获得的信息: 
                nickname = outputObj["nickname"].ToString(); //昵称
                sex = outputObj["sex"].ToString(); //性别什么的
                headimgurl = outputObj["headimgurl"].ToString(); //头像url
                province = outputObj["province"].ToString(); ;
                country = outputObj["country"].ToString(); ;
                language = outputObj["language"].ToString(); ;
                city = outputObj["city"].ToString(); ;
                //将获得的用户信息填入到session中
                Session["openid"] = outputObj["openid"];
                //转向回入口
                //OpenAccess();
            }
    
        }
    
    }
  • 相关阅读:
    Python3 实现一个简单的TCP 客户端
    Mac 下 安装 和 使用 Go 框架 Beego
    Go 操作文件及文件夹 os.Mkdir及os.MkdirAll两者的区别
    Go gin 之 Air 实现实时加载
    Mac os 配置常用alias
    Mac 下 MAMP配置虚拟主机
    Thinkphp5 项目部署至linux服务器报403错误
    Linux 安装最新版 node.js 之坑
    Mac item2如何使用rz sz 上传下载命令
    Mac 使用 iTerm2 快捷登录远程服务器
  • 原文地址:https://www.cnblogs.com/hanf/p/6018960.html
Copyright © 2020-2023  润新知