zoukankan      html  css  js  c++  java
  • MVC 微信开发获取用户OpenID

    第一次开发微信版网页,对最重要的获取微信OpenId,特此记录下来

    1.首先得有appid和appsecret

     1 1.    public class WeiXin {
     2 
     3         public static string appid {
     4             get {
     5                 string _appid = "wx3xxxxxxxxxxxxxxx";
     6                 return _appid;
     7             }
     8         }
     9         public static string aseret {
    10             get {
    11                 string appsecret = "b6719276d539796d94bxxxxxxxxxxxxxxx";
    12                 return appsecret;
    13             }
    14         }
    15 
    16 }
    准备AppId和Appsecret

    2.只获取用户的openID,,在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面,以snsapi_base为scope发起的网页授权,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(下面代码中的url参数就是回调页,静态的可以写成:string url = https://wx.baidu.com/controller/GetOpenId,注意URL需要进行HttpUtility.UrlEncode(url)编码,还有回调页的域名需要和微信公众号里面设置的回调域名相同)

     1 public class ApplyVIPController : Controller
     2  2     {
     3  3 
     4  4         // GET: /ApplyVIP/     
     5  5 
     6  6         public ActionResult Index(string url)
     7  7         {
     8  8             string _url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state={2}#wechat_redirect",
     9  9                 WeiXin.appid,
    10 10                 url,//回调页URL
    11 11                 Guid.NewGuid().ToString("N"));
    12 12             return Redirect(_url);//这里微信会自动取出回调页URL,并且跳转到该url所属的页面
    13 13         }
    静默授权并且跳转回调页

    3.获取code,并且通过code获取Openid,正确时返回的JSON数据包如下:{ "access_token":"ACCESS_TOKEN",    "expires_in":7200,   "refresh_token":"REFRESH_TOKEN",     "openid":"OPENID",    "scope":"SCOPE" },这里面就包含了所需要的OPENID

     1  //controller
     2  public string GetOpenId() {
     3             string code = requset.querystring["code"];
     4             string openid = "";
     5             string json = "";
     6             string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code "//通过appid,appaseret,code
     7     , WeiXin.appid, WeiXin.aseret, code);
     8             HttpQuery.Get(url, null, msg => {
     9                 json = msg;
    10             });
    11             JObject job = (JObject)JsonConvert.DeserializeObject(json);
    12             openid = job["openid"].ToString();
    13             return openid;
    14         }
    获取到openID

    4.请求获取Openid的httpquery.get()方法

     1 public class HttpQuery {
     2         private static readonly string DefaultUserAgent =
     3             "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
     4 
     5         public static void Get(string url, object data, Action<string> callback) {
     6             IDictionary<string, string> parameters = Getparameters(data);
     7 
     8             if (!(parameters == null || parameters.Count == 0)) {
     9                 url += "?";
    10                 foreach (var item in parameters) {
    11                     url += item.Key + "=" + item.Value + "&";
    12                 }
    13             }
    14             CreateGetHttpResponse(url, null, null, null, callback);
    15         }
    16         /// <summary>  
    17         /// 创建GET方式的HTTP请求  
    18         /// </summary>  
    19         /// <param name="url">请求的URL</param>  
    20         /// <param name="timeout">请求的超时时间</param>  
    21         /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>  
    22         /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>  
    23         /// <returns></returns>  
    24         private static HttpWebResponse CreateGetHttpResponse(string url, int? timeout, string userAgent,
    25             CookieCollection cookies, Action<string> callback, string encoding = "utf-8") {
    26             if (string.IsNullOrEmpty(url)) {
    27                 return null;
    28                 //throw new ArgumentNullException("url");
    29             }
    30             try {
    31                 HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
    32                 request.Method = "GET";
    33                 request.UserAgent = DefaultUserAgent;
    34                 if (!string.IsNullOrEmpty(userAgent)) {
    35                     request.UserAgent = userAgent;
    36                 }
    37                 if (timeout.HasValue) {
    38                     request.Timeout = timeout.Value;
    39                 }
    40                 if (cookies != null) {
    41                     request.CookieContainer = new CookieContainer();
    42                     request.CookieContainer.Add(cookies);
    43                 }
    44 
    45                 HttpWebResponse httpWebResponse = request.GetResponse() as HttpWebResponse;
    46 
    47                 StreamReader reader = new StreamReader(httpWebResponse.GetResponseStream(),
    48                     System.Text.Encoding.GetEncoding(encoding));
    49 
    50                 string html = "";
    51                 //获取请求到的数据
    52                 html = reader.ReadToEnd();
    53                 //关闭
    54                 httpWebResponse.Close();
    55                 reader.Close();
    56       
    57                     callback(html);
    58                     return httpWebResponse;
    59                 }
    60             } catch {
    61                 callback(null);
    62             }
    63             return null;
    64         }
    65 
    66 }
    Http GET请求
  • 相关阅读:
    java语言基础001
    Linux 使用硬盘
    Linux 系统运行命令 > 查看系统信息
    Linux rm 命令
    Linux 操作系统目录结构
    JavaScript || 事件基础
    My SQL随记 003 数据表基础操作语法
    My SQL随记 002 登陆
    My SQL随记 001 常用名词/结构化语言
    linux命令学习
  • 原文地址:https://www.cnblogs.com/ldyblogs/p/getOpenId.html
Copyright © 2011-2022 走看看