MVC 微信支付取得用户OpenID

图片 1

 

 

首先次开发微信版网页,对最要害的拿到微信OpenId,特此记录下来

1.首先得有appid和appsecret

图片 2图片 3

 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)编码,还有回调页的域名需要和微信公众号里面设置的回调域名相同)

图片 4图片 5

 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

图片 6图片 7

 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()方法

图片 8图片 9

 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请求

 

相关文章