微信登录(网站应用)ASP.NET

news/2024/5/9 10:16:03/文章来源:https://blog.csdn.net/csdn_Info/article/details/72834272

    • 效果
    • 第一步 请求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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_813558.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信分享(网站)ASP.NET

实现的功能&#xff1a; 1、网址生成二维码 2、微信扫描二维码&#xff0c;打开网址 3、微信APP右上角点击弹出菜单分享 4、分享内容可自定义&#xff1a;标题、描述、链接、图片 普通分享显示图&#xff1a; 接口分享显示图 微信公众平台文档地址&#xff1a; 微信网页开…

对《网站非法内容监听系统的构想》的回复——我谈非法内容核查方法

刚才看了谢慧琦(是个MM&#xff1f;&#xff1f;)的《网站非法内容监听系统的构想》一文&#xff0c;觉得其中所述的想法与我之前的设想非常相像&#xff0c;所以我忍不住也想说几句了&#xff0c;嘿嘿&#xff1a; 我原先的设想就是在用户提交时&#xff0c;对提交内容进行危险…

linux怎么操作mysql数据库实例_实例 - Linux下用Perl进行MySQL数据库开发_数据库技术_Linux公社-Linux系统门户网站...

四、perl进行MySQL开发实例上述都安装完后&#xff0c;就可以进行实际开发了。首先在test数据库中新建一个表mysql> create table address (-> id int(5) not null,-> name varchar(40) not null,-> email varchar(50) not null,-> telephone int(12) null);Que…

qq浏览器网页翻译_海淘网站英文页面翻译办法

很多刚刚海淘的朋友&#xff0c;遇到的第一个问题&#xff0c;往往就是&#xff0c;看懂不懂&#xff0c;面对满屏的英文&#xff0c;它认识我&#xff0c;我不认识它&#xff0c;更别提要海淘下单了。接下来&#xff0c;小编分别介绍手机端和电脑端英文页面翻译办法。1、手机端…

wordpress表单数据验证_30分钟搭一个wordpress网站

我是一个着迷于产品和运营的技术人&#xff0c;乐于跨界的终身学习者。欢迎关注我哟&#xff5e;每周五早6点 按时送达&#xff5e;我的第「88」篇原创敬上因为最近工作比较忙&#xff0c;没太多时间思考和写东西。所以今天偷个懒&#xff0c;发一篇实操类文章。这篇文章非常“…

window服务如何通过程序如何打开谷歌浏览器并登陆指定网站_亚马逊如何看listing销量,亚马逊如何看销量排名...

我做跨境电商也有六年的时间了&#xff0c;在电商这个行业也有自己的一些经验。经验也许没有其他大卖家丰富&#xff0c;但会将我知道的都进行分享。如果有不懂得亚马逊问题可以我(V&#xff1a;772024802)。我这里给大家安排一堂直播课&#xff0c;可以系统的帮你解决做亚马逊…

seo扣费系统源码_关键词按天扣费就一定靠谱吗?

最近几年&#xff0c;SEO行业的形势不断变化&#xff0c;各种新出的SEO计费方式和营销模式花样百出。现在大多数SEO公司都打着按天扣费的模式&#xff0c;吸引客户。其实按天扣费模式的猫腻也很多&#xff0c;今天优化君让你们知道一家公司的按天扣费的套路&#xff0c;希望能帮…

python爬虫反爬机制_Python3爬虫学习之应对网站反爬虫机制的方法分析

本文实例讲述了Python3爬虫学习之应对网站反爬虫机制的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 如何应对网站的反爬虫机制 在访问某些网站的时候&#xff0c;网站通常会用判断访问是否带有头文件来鉴别该访问是否为爬虫&#xff0c;用来作为反爬取的一种策…

全面进入HTTPS网站加速新时代,CDN上线免费证书

点击访问折扣活动 点击了解相关专题与HTTPS技术直播 活动推荐 【TechDay】阿里云CDN Tengine开源技术沙龙-上海站&#xff0c;将在8月29日下午阿里虹桥中心展开&#xff0c;多位专家现场探讨CDN QUIC、TLSv1.3、直播、Tengine实践等话题&#xff0c;参与活动即可赢取阿里云定制…

网站服务器停止服务,DDoS攻击是如何让网站停止服务的?

DDoS攻击&#xff0c;是一种耗尽攻击目标的系统资源&#xff0c;导致攻击目标无法响应正常的服务请求的网络攻击方式。虽然&#xff0c;大规模的DDoS攻击占据了大部分的头条新闻&#xff0c;但实际上&#xff0c;较小的DDoS攻击在网络安全环境中更为常见。在没有做好充分的防护…

php实现飘窗,JS实现网站图片飘窗效果,JavaScript悬浮广告(附详细代码)

JS实现网站图片飘窗效果&#xff0c;JavaScript悬浮广告&#xff0c;飘窗效果-丁光辉博客(www.dingguanghui.com)*{margin:0px;padding:0px}#ad{position:absolute;left:0px;top:0px;}//通过ID获取imgaddocument.getElementById("ad");//定义横纵坐标x0;y0;//设置初始…

大型网站技术架构(六)网站的伸缩性架构

2019独角兽企业重金招聘Python工程师标准>>> 网站系统的伸缩性架构最重要的技术手段就是使用服务器集群功能&#xff0c;通过不断地向集群中添加服务器来增强整个集群的处理能力。“伸”即网站的规模和服务器的规模总是在不断扩大。 1、网站架构的伸缩性设计 网站的…

Visual Studio2017 的项目发布与 IIS 网站部署

Visual Studio2017 的项目发布 1.首先打开自己的本地项目&#xff0c;重新生成解决方案必须无报错 2.然后右键选中的项目&#xff0c;点击发布 3.第一次发布需要配置发布的相关信息&#xff0c;如果第N次发布可直接跳过&#xff0c;配置信息如下 3.1 点击连接 发布方法&…

IIS网站部署后,让小伙伴也能查看网站-防火墙配置

前言 上一篇文章讲述了 Visual Studio2017 的项目发布和 IIS 网站的部署&#xff0c;但是部署之后只能在自己的电脑上浏览网站。为了让自己电脑上的网站也能被别人访问&#xff0c;可以对防火墙做一些手&#xff08;配&#xff09;脚&#xff08;置&#xff09;~ 链接&#x…

IIS网站运行报错:无法识别的属性“targetFramework”。请注意属性名称区分大小写。

报错信息如下&#xff1a; IIS网站运行报错&#xff1a;无法识别的属性“targetFramework”。请注意属性名称区分大小写。 报错原因大概是&#xff1a;程序的.netframework版本为4.8&#xff0c;应用池的版本为2.0 &#xff0c;版本不一致所以报错。 修改步骤1&#xff1a;应用…

IIS安装 部署网站

以下是操作文档&#xff0c;均已录制 点此观看bilibili操作视频 第一步&#xff1a;找到位置 控制面板->查看方式选择&#xff1a;类别->卸载程序->启用或关闭windows功能 第二步&#xff1a;勾选 勾选Internet information Services和Internet information Servic…

IIS中的网站访问excel

打开【启用32位应用程序】

IIS部署网站-网站设置起始页

选中网站->默认文档看到有index.html 可以在网站的根目录新建index.html 然后在index.html界面中 设置跳转界面即可 新建index.html 设置跳转 <meta HTTP-EQUIVREFRESH CONTENT"0; URL跳转路径">

icon制作无白色背景_这80个无版权素材网站收好,再来多少视觉XX都不怕!

一张黑洞照片让视觉中国彻底凉凉&#xff0c;虽然社会的版权意识加强是一个好现象&#xff0c;但这种漫天要价的钓鱼执法实在不可取。因此&#xff0c;就看APP为大家整理了80个无版权素材网站&#xff0c;除了图片&#xff0c;还有免费的视频、icon、配色以及矢量图&#xff0c…

到网站进过的服务器 命令,进入服务器命令

进入服务器命令 内容精选换一换如果Windows操作系统云服务器未安装密码重置插件&#xff0c;可以参见本节内容重新设置密码。本节操作介绍的方法仅适用于修改Windows本地账户密码&#xff0c;不能修改域账户密码。Linux操作系统请参见重置Linux云服务器密码(未安装重置密码插件…