• 效果
  • 第一步 请求CODE
  • 第二步 CODE 换取 Token
  • 第三步Token 调取接口我调用的是获取个人信息接口
  • 代码

效果



官方开发指南(指南已经说的很清楚了)

官方流程图:


第一步 请求CODE

第三方使用网站应用授权登录前请注意已获取相应网页授权作用域(scope=snsapi_login),则可以通过在PC端打开以下链接:
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
若提示“该链接无法访问”,请检查参数是否填写错误,如redirect_uri的域名与审核时填写的授权域名不一致或scope不为snsapi_login



请求示例

登录一号店网站应用
https://passport.yhd.com/wechat/login.do
打开后,一号店会生成state参数,跳转到
https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https%3A%2F%2Fpassport.yhd.com%2Fwechat%2Fcallback.do&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect
微信用户使用微信扫描二维码并且确认登录后,PC端会跳转到
https://passport.yhd.com/wechat/callback.do?code=CODE&state=3d6be0a4035d839573b04816624a415e


第二步 CODE 换取 Token

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code


第三步(Token 调取接口,我调用的是获取个人信息接口)

获取用户个人信息(UnionID机制)
接口说明
此接口用于获取用户个人信息。开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。请注意,在用户修改微信头像后,旧的微信头像URL将会失效,因此开发者应该自己在获取用户信息后,将头像图片保存下来,避免微信头像URL失效后的异常情况。
请求说明
http请求方式: GET
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID


代码

/// <summary>
/// 转到微信二维码登录窗口,拼接URL 进行请求
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public partial class redirectPage : System.Web.UI.Page
{string state = WxPayApi.GenerateNonceStr();Session["validState"] = state;//=======【微信开放平台应用基本信息设置】/* 微信登录信息配置* L_APPID:微信开放平台应用的APPID   xxxxxxxx* L_QRCONNECTION :请求code 地址      https://open.weixin.qq.com/connect/qrconnect?* L_REDIRECTURL :重定向地址(必须进行UrlEncode) wxLoginRedirectURL.aspx*/StringBuilder sb = new StringBuilder();sb.Append(WxPayConfig.L_QRCONNECTION);sb.Append("appid=");sb.Append(WxPayConfig.L_APPID);sb.Append("&redirect_uri=");sb.Append(HttpUtility.UrlEncode(WxPayConfig.L_REDIRECTURL));sb.Append("&response_type=code&scope=snsapi_login&state=");sb.Append(state);sb.Append("#wechat_redirect");string wxLoginPage=sb.ToString();Response.Redirect(wxLoginPage);
}

用户进行扫码后,重定向到配置的redirect_uri 页面,此页面代码:

    public partial class wxLoginRedirectURL : System.Web.UI.Page{private static JavaScriptSerializer jss = null;private static BLL.User user = null;private static Model.UserEntity uentity = null;protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){string code = Request.QueryString["code"] ?? "";if (!string.IsNullOrEmpty(code)){string state = Request.QueryString["state"] ?? "";//微信回发的上一步设置的stateif (!string.IsNullOrEmpty(Session["validState"].ToString()) && !string.IsNullOrEmpty(state)){if (Equals(Session["validState"].ToString(), state))// 校验是否相等{//域名所属人IDstring duserid = 1;//测试用户id//拼接获取access_token的URL(通过code获取access_token)string getTokenUrl = WxPayConfig.L_ACCESSTOKEN + "appid=" + WxPayConfig.L_APPID + "&secret=" + WxPayConfig.L_APPSECRET + "&code=" + code + "&grant_type=authorization_code";string tokenResult = HttpService.Get(getTokenUrl);//开始请求jss = new JavaScriptSerializer();// 反序列化token 信息TokenResult obj = jss.Deserialize<TokenResult>(tokenResult);if (string.IsNullOrEmpty(obj.errcode)){user = new BLL.User();//拼接获取用户信息的接口,通过access_token调用接口(获取用户个人信息接口(/sns/userinfo))string wxUserInfoUrl = WxPayConfig.L_SNSUSERINFO + "access_token=" + obj.access_token + "&openid=" + obj.openid;string userInfoResult = HttpService.Get(wxUserInfoUrl);// 反序列化用户信息UserInfoResult uobj = jss.Deserialize<UserInfoResult>(userInfoResult);//检查是否数据库中存在Model.UserEntity IsExistEntity = user.SelectByUserName(uobj.unionid);if (IsExistEntity != null){//用户存在Session["uid"] = IsExistEntity.Id;//  Log.Info("用户存在=", "!=null");Model.UserEntity pentity = user.Select(Convert.ToInt32(duserid));Response.Redirect(pentity.DomainLevel);}else{//用户不存在// 存储数据库uentity = new Model.UserEntity();uentity.Name = uobj.nickname;uentity.UserName = uobj.unionid;uentity.Description = uobj.headimgurl;if (!string.IsNullOrEmpty(duserid)){uentity.ParentId = Convert.ToInt32(duserid);}int uid = user.Save(uentity);if (uid > 0){//存储sessionSession["uid"] = uid;//根据Session["pid"] 获取hostModel.UserEntity pentity = user.Select(Convert.ToInt32(duserid));if (pentity != null){Response.Redirect("pentity.DomainLevel");}else{Log.Info("pentity=", "null");Response.Redirect("~/custompage/err.htm");}}}}else{// 失败Log.Info("反序列化openid", obj.errcode + ":" + obj.errmsg);// 转走Response.Redirect("~/custompage/err.htm");}}else{//校验失败Response.Redirect("~/custompage/err.htm");}}else{//state 或Session["validState"] 为null/空Log.Info("session[validstate]", Session["validState"].ToString());}}else{ //用户禁止授权Response.Redirect("~/main.aspx");}}}}
    #region定义的序列化类 /// <summary>/// 获取微信用户信息/// </summary>public class UserInfoResult : PubClass{public string nickname { get; set; }public string province { get; set; }public string city { get; set; }public string country { get; set; }public string headimgurl { get; set; }public Array[] privilege { get; set; }public string language { get; set; }public int sex { get; set; }}/// <summary>/// access_token /// </summary>public class TokenResult : PubClass{public string access_token { get; set; }public string expires_in { get; set; }public string refresh_token { get; set; }public string scope { get; set; }public string errcode { get; set; }public string errmsg { get; set; }}/// <summary>/// 公有字段/// </summary>public class PubClass{public string unionid { get; set; }public string openid { get; set; }}#endregion

微信登录(网站应用)ASP.NET相关推荐

  1. 网站微信登录授权 ASP.NET

    最新做一些项目都有微信登录注册什么的,今天就把自己整理的demo提供给大家 微信认证流程(我自己简称三次握手): 1.用户同意授权,获取code 2.通过code换取网页授权access_token, ...

  2. asp网站微信登录源码

    <% '================================== '=类 名 称:微信登录 '=功 能:微信登录 For ASP '=作 者:79657181 '=微 信: 1861 ...

  3. 微信开放平台开发(2) 网站应用微信登录

    关键字:微信公众平台 微信开放平台 微信登录 微信扫码登录 使用微信账号登录网站 作者:方倍工作室  原文:http://www.cnblogs.com/txw1958/p/weixin-qrlogi ...

  4. 在哪里能收到python实例代码-python实现网站微信登录的示例代码

    最近微信登录开放公测,为了方便微信用户使用,我们的产品也决定加上微信登录功能,然后就有了这篇笔记. 根据需求选择相应的登录方式 python实现网站微信登录的示例代码 微信现在提供两种登录接入方式 移 ...

  5. 微信开放平台开发 微信登录

    在这篇微信公众平台开发教程中,我们将介绍如何使用微信开放平台接口实现微信扫码登录的功能. 准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信O ...

  6. python实现网页微信登录_网站微信登录-python 实现

    最近微信登录开放公测,为了方便微信用户使用,我们的产品也决定加上微信登录功能,然后就有了这篇笔记. 根据需求选择相应的登录方式 微信现在提供两种登录接入方式 移动应用微信登录 网站应用微信登录 这里我 ...

  7. python实现微信登录破解版_网站微信登录-python 实现

    下载好向圈APP可以快速联系圈友 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 最近我们的网站要加微信登录功能,找了python sdk 感觉都不满意,然后就参考instagram pyth ...

  8. 微信公众号授权登录(asp.net + angular)

    微信是时下最火的,上面有数以亿计的用户,如果能接入微信将大大减低注册门槛,当然,接入微信登录是有门槛的.微信登录一般有两个,一个是微信开放平台授权登录,一个是微信公众号授权登录,两者都需要认证才可以继 ...

  9. asp微信登陆源码,实现asp网站授权微信登录(获取用户信息,微信名头像openid等)

    一个同学的网站想实现asp微信登陆,获取到微信用户资料信息,微信昵称,微信头像,微信openid等信息保存到数据库,我给他了一份asp微信登录授权(获取用户信息)源码,他说不会用,让我帮忙写好入库,并 ...

最新文章

  1. Mac OS X 使用命令sed替换tab
  2. 一个星期+4轮面试终拿下offer,极致干货
  3. Spring系列之集成MongoDB的2种方法,你知道嘛?
  4. 详细分析TCP数据的传输过程
  5. java 获取 邮箱联系人_在android中读取联系人信息的程序,包括读取联系人姓名、手机号码和邮箱...
  6. 计算机二级基础知识 文库,计算机二级公共基础知识(全)
  7. git开发之查看修改账户邮箱命令
  8. 图的储存方式,链式前向星最简单实现方式 (边集数组)
  9. powermock模拟对象_使用PowerMock模拟构造函数
  10. 网易北京:全员核酸检测为阴性 园区环境检测为阴性
  11. SQL Server 服务器硬件配置
  12. 基于.net开发chrome核心浏览器【五】
  13. 看 设计模式之策略模式探讨初步 有感,并摘取部份内容,学习之
  14. 一种支持多种流媒体协议的播放内核
  15. 同名文件替换怎么恢复_U盘里被替换的文件怎么恢复?方法选对,其实很简单...
  16. Linux查看网卡是千兆还是万兆网卡
  17. unc0ver 越狱工具来袭,支持iOS11.0~iOS14.8稳定越狱 更新至V8.0.2 支持 A7-A14
  18. DeepLog:基于系统日志使用深度学习方法做异常检测和诊断
  19. 【Python机器学习】回归模型:推土机售价预测
  20. eclipse字体大小

热门文章

  1. 别开玩笑了!特种兵式旅游,胆小勿进!
  2. 中企通信如何下好“东数西算”这盘棋?
  3. 基于android停车管理app,基于Android的城市智能停车APP设计与研究
  4. 程序猿关注的微信公众号和网站--小结
  5. 会咬人的蚊子都是雌性的吗?
  6. 什么是 “数字孪生”
  7. 重庆大学计算机学院刘然,刘然-重庆大学微电子与通信工程学院
  8. 谷歌浏览器使用_第三篇 书签导出
  9. aspose-pdf 去除水印以及处理的页数限制
  10. vue前端页面转PDF