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 }

复制代码

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 {
3
4 // GET: /ApplyVIP/
5
6 public ActionResult Index(string url)
7 {
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 WeiXin.appid,
10 url,//回调页URL
11 Guid.NewGuid().ToString(“N”));
12 return Redirect(_url);//这里微信会自动取出回调页URL,并且跳转到该url所属的页面
13 }

复制代码

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

   //controller

public string GetOpenId() {
string code = requset.querystring[“code”];
string openid = “”;
string json = “”;
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
, WeiXin.appid, WeiXin.aseret, code);
HttpQuery.Get(url, null, msg => {
json = msg;
});
JObject job = (JObject)JsonConvert.DeserializeObject(json);
openid = job[“openid”].ToString();
return openid;
}

复制代码

4.请求获取Openid的httpquery.get()方法
复制代码

public class HttpQuery {
    private static readonly string DefaultUserAgent =
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";

    public static void Get(string url, object data, Action<string> callback) {
        IDictionary<string, string> parameters = Getparameters(data);

        if (!(parameters == null || parameters.Count == 0)) {
            url += "?";
            foreach (var item in parameters) {
                url += item.Key + "=" + item.Value + "&";
            }
        }
        CreateGetHttpResponse(url, null, null, null, callback);
    }
    /// <summary>  
    /// 创建GET方式的HTTP请求  
    /// </summary>  
    /// <param name="url">请求的URL</param>  
    /// <param name="timeout">请求的超时时间</param>  
    /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>  
    /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>  
    /// <returns></returns>  
    private static HttpWebResponse CreateGetHttpResponse(string url, int? timeout, string userAgent,
        CookieCollection cookies, Action<string> callback, string encoding = "utf-8") {
        if (string.IsNullOrEmpty(url)) {
            return null;
            //throw new ArgumentNullException("url");
        }
        try {
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            request.Method = "GET";
            request.UserAgent = DefaultUserAgent;
            if (!string.IsNullOrEmpty(userAgent)) {
                request.UserAgent = userAgent;
            }
            if (timeout.HasValue) {
                request.Timeout = timeout.Value;
            }
            if (cookies != null) {
                request.CookieContainer = new CookieContainer();
                request.CookieContainer.Add(cookies);
            }

            HttpWebResponse httpWebResponse = request.GetResponse() as HttpWebResponse;

            StreamReader reader = new StreamReader(httpWebResponse.GetResponseStream(),
                System.Text.Encoding.GetEncoding(encoding));

            string html = "";
            //获取请求到的数据
            html = reader.ReadToEnd();
            //关闭
            httpWebResponse.Close();
            reader.Close();

                callback(html);
                return httpWebResponse;
            }
        } catch {
            callback(null);
        }
        return null;
    }

}

MVC是一种软件架构模式,它将一个应用程序划分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。微信扫登录是一种通过扫描微信登录二维码,实现用户登录的功能。 首先,我们需要将MVC模式应用于微信扫登录的实现中。将模型、视图和控制器分别对应微信扫登录的数据处理、展示和逻辑控制功能。 模型是处理数据方面的核心部分,负责与微信登录API进行通信,验证用户身份。它会处理微信登录二维码的生成与传递,以及接收微信服务器的响应。通过与微信服务器进行交互,模型能够获取用户微信信息,例如openid等。 视图则负责展示界面,包括扫描二维码的界面和登录成功后的界面。当用户扫描微信登录二维码时,视图将展示一个包含二维码的界面,用于让用户扫描。在登录成功后,视图将展示一个登录成功的提示信息界面,或跳转到其他需要登录的页面。 控制器是整个流程的协调者,负责接收用户的操作,并根据用户的操作来控制模型和视图的交互。当用户扫描二维码后,控制器会将扫描的结果传递给模型进行验证。验证成功后,控制器会通知视图展示登录成功的界面。 综上所述,MVC模式可以很好地实现微信扫登录功能。模型、视图和控制器各司其职,通过协同工作,完成微信扫登录的流程。模型负责与微信服务器通信获取用户信息,视图展示界面,控制器协调模型和视图的交互。这样的架构模式可以使代码更加结构化,便于维护和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值