.Net-mvc微信公众号和网站微信授权登录的实现

  最近一段时间一直在做关于微信方面的网站应用开发,这段时间也收获的不少关于微信开发方面的开发技能,接触的比较多的主要有微信公众号和微信网站登录授权,以及微信会员卡,优惠券和扫描二位码的功能,今天我主要想要总结的是微信公众号登录和网站微信授权登录这两者之间的区别于关联。

  首先我们必须区别开来微信公众平台开发是指微信公众号进行业务开发(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432),为网站微信登录授权是需要在微信开发平台中创建网站应用来使用的(https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN)。但是要想把微信公众号于微信网站授权登录获取到的Oppenid关联起来的话我们可以通过UnionID关联起来。

微信开发平台公众账号关联的如下图:

步骤:登录进入微信开发平台----进行微信公众号绑定



UnionID机制说明:

开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。

获取用户基本信息(包括UnionID机制)

开发者可通过OpenID来获取用户基本信息。请使用https协议。

接口调用请求说明
http请求方式: GET
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN 

微信公众号微信登录配置:

一、在基本配置中获取微信公众号的appid和appsecrect(一定是要自己公众号的),白名单是你在本地调试的微信项目的时候需要添加的你本地的ip地址,不然获取不到你想要的accsee_token

二、配置服务器地址(url):这里是你的项目与微信服务器通讯的地方,一定不能填错,Token是你项目中的,将其复制到这里即可,消息加密解密密钥是微信端随机生成的

三、在微信公众号设置设置对应业务域名,js接口安全域名,以及网页授权域名

好了基本上的配置也配置好了,下面就开始上代码了!!!!!!!!!

无论是微信公众号微信登录还是微信网站登录授权都是分为以下四步走战略:

1 第一步:用户同意授权,获取code

2 第二步:通过code换取网页授权access_token

3 第三步:刷新access_token(如果需要)

4 第四步:拉取用户信息(需scope为 snsapi_userinfo)

微信公众号用户同意授权获取code的api:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_rediret 若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。

微信网站用户同意授权获取code的api:

第三方使用网站应用授权登录前请注意已获取相应网页授权作用域(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。

第一步:用户同意授权获取对应的授权码code(注意:我这里使用的是微信公众号的登录授权,假如你需要做网站授权的换一个api即可下面两步都是一样)

//授权入口
public ActionResult WxLogin()
{
//异步跳转地址
var loginUrl = "http://" + Request.Url.Authority + Url.Action("WxRegisterAndLogin") ;
return Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + Url.Encode(loginUrl) + "&response_type=code&scope=snsapi_userinfo&state=state#wechat_redirect");
}

第二步和第三步:通过通过code获取网页授权access_token和用户唯一标示oppenid

 1 /// <summary>
 2 /// 微信登录注册
 3 /// </summary>
 4 /// <param name="code">获取用户凭证换取用户网页授权</param>
 5 /// <param name="ReturnUrl">跳转地址</param>
 6 /// <returns></returns>
 7 public async Task<ActionResult> WxRegisterAndLogin(string code, string ReturnUrl = "")
 8 {
 9
10 try
11 {
12
13 //登录成功后跳转的地址
14
15 string url=ReturnUrl;
16 //通过Code以及微信appscrect和wxappid换取网页授权access_token和用户oppenid
17 HttpClient webClient = new HttpClient();
18 //获取用户微信信息
19 jsonString = await (await webClient.GetAsync("https://api.weixin.qq.com/sns/oauth2/access_token?appid=" +公众号appid+ "&secret=" + 公众号AppSecret + "&code=" + code + "&grant_type=authorization_code")).Content.ReadAsStringAsync();
20
21 //异步获取的用户oppenid和access_token
22 jsonOAuthorObj = JsonConvert.DeserializeObject(jsonString, new { access_token = "", openid = "" }.GetType());
23
24 if (jsonOAuthorObj.openid == null)
25 {
26 return Content(jsonString + "出现错误请重试");
27 }
28
29 var myuser = new user { WxOpenId = jsonOAuthorObj.openid }.SelectObject();
30
31 //注册成功后直接登录,授权会判断是否有账户
32 if (myuser == null)
33 {
34 //拉取用户信息(需scope为 snsapi_userinfo)
35 jsonString = await (await webClient.GetAsync("https://api.weixin.qq.com/sns/userinfo?access_token=" + jsonOAuthorObj.access_token + "&openid=" + jsonOAuthorObj.openid + "&lang=zh_CN")).Content.ReadAsStringAsync();
36 dynamic jsonObj = JsonConvert.DeserializeObject(jsonString, new { nickname = "", headimgurl = "", sex = "", openid = "", country = "", province = "", city = "" }.GetType());
37
38 //创建用户
39 int cUserId = new user { Wximage= jsonObj.headimgurl, WxNickName = jsonObj.nickname, WxOpenId = jsonObj.openid, Sex = Convert.ToInt32(jsonObj.sex), Country = jsonObj.country, Province = jsonObj.province, City = jsonObj.city }.Create();
40
41 return RedirectToAction("WxRegister", "Login", new { ReturnUrl = url });
42
43 }
44 else
45 {
46 //存在用户信息直接登录
47 return Redirect(url);
48 }
49 }
50 catch (Exception e)
51 {
52 return View("MessageInfo", "", e.ToString());
53 }
54 }

我的总结到这里结束了,我在这里要感谢我身边的那些大佬教会了我很多思考的方法,很多东西只要自己亲身经历过了才会更加的了解,这是小菜今天的总结,有不足的请各位大神指教,同时也希望大家多提提意见,.Net的学习方向该侧重于哪一方面,谢谢!

原文地址:https://www.cnblogs.com/Can-daydayup/p/9368844.html

时间: 2024-10-01 01:28:31

.Net-mvc微信公众号和网站微信授权登录的实现的相关文章

微信公众号开发之网页授权登录及code been used 解决!

首先微信公众号开发网页授权登录使用环境: 开发工具:eclipse:服务器:tomcat8,开发语言:JAVA. 我写的网页授权登录时用开发者模式自定义view类型按钮点击跳转链接的. 微信网页授权登录首先以官方微信开发文档为准,大体共分为4步: 先说第一步获取code: code说明:code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5扽这未被使用自动过期. 微信公众开发文档给的有获取code的链接,建议直接复制来用,然后替换其中相应的参

ASP.NET MVC 微信公众号支付,微信公众平台配置

微信公众号支付,首先要登录微信公众号进行配置: 第一步:配置网页授权域名 点击上图的修改则出现下面截图:进行修改(配置)网页授权的域名 第二步:配置支付授权目录 注意:支付授权目录的配置: 假设域名为:www.linjie.com 1.如果支付的页面在网站的根目录下,则配置格式为: http://域名/    例子:http://www.linjie.com/ 2.如果支付页面在网站的某个文件夹下,需要精确到文件夹:配置格式为:http://域名/文件夹名称/   例子支付页面在order文件下

微信公众号开发系列-网页授权获取用户基本信息

OAuth2.0网页授权这个也是在做微信公众平台用到最多的,可以利用授权接口对自己平台内用户进行绑定,实现用户扫描码和微信分享.微信签到.微信商城购物等: 1.高级接口OAuth2.0网页授权设置 a.进入高级接口列表-OAuth2.0-点击修改设置授权域名,域名可以上一级域名和二级域名 b.填写要设置授权域名,我这里用的的是二级域名 体授权Url规则见下面详细描述,主要摘自微信公众平台开发文档,点击进入 2.网页授权获取用户基本信息说明 如果用户在微信中(Web微信除外)访问公众号的第三方网页

C#微信公众号开发之网页授权oauth2.0获取用户基本信息(二)

C#微信公众号开发之网页授权oauth2.0获取用户基本信息(一) 中讲解了如果通过微信授权2.0snsapi_base获取已经关注用户的基本信息,然而很多情况下我们经常需要获取非关注用户的信息,方法如下: 第一步和之前讲的一样:获取code,但是scope使用方法是snsapi_userinfo; 第二步,根据code获取openid和access_token(此处的access_token是通过网页授权code换取的不是我们之前讲的全局的票据),代码: 1 /// <summary> 2

仿微信公众号文章实现微信营销活动推广页面的方法

精仿公众号文章不是传统意义上的微信防封系统了,这是一款营销推广系统.因为对比普通网页和微信公众号文章,微信公众号文章的可信度.认知度的优势明显,于是仿公众号文章系统可以解决广大广告业主和公众号运营者在活动推广.营销推广上的问题.并且精仿公众号文章系统可实现所有内容皆可自定义和随时修改.阅读数.点赞数.留言内容等所有数据可随意设置,在灵活性上大大超越了公众号文章.   演示地址:http://www.188tool.cn/copy-articel 适用场景:分享活动,展销会活动,微信H5页面文章等

做了一个淘宝内部优惠券分享平台支持微信公众号以及网站

关注微信公众号大家自己可以输入信息搜索淘宝内部优惠券 或者电脑访问 http://www.imaimaimai.cn 如果有企业需要提供相关技术也可以联系我哈

[Python爬虫] 之十五:Selenium +phantomjs根据微信公众号抓取微信文章

借助搜索微信搜索引擎进行抓取 抓取过程 1.首先在搜狗的微信搜索页面测试一下,这样能够让我们的思路更加清晰 在搜索引擎上使用微信公众号英文名进行“搜公众号”操作(因为公众号英文名是公众号唯一的,而中文名可能会有重复,同时公众号名字一定要完全正确,不然可能搜到很多东西,这样我们可以减少数据的筛选工作, 只要找到这个唯一英文名对应的那条数据即可),即发送请求到'http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&_sug_=n&

微信公众号与APP微信第三方登录账号打通

一个项目同时开发了APP和微信服务号,需要做到APP和微信服务号的账号互通同步,也就是说一个账号在2个地方都可以用,当然这个前提是保证你公司自己的服务器的数据库用的是同一套. 为保证用户数据的唯一性,打通app与公众号的数据,需要做如下工作: 1.申请appid, 在-登录微信开放平台--申请账号(如果没有,就去注册,不能使用公众号登录或注册)--开发者资质认证(账号中心,认证时需提交很多资料:等待认证结果)--认证通过之后,创建应用(管理中心,创建你要开发的app,等待审核):以上是app需要

微信公众号开发之网页授权(获取用户信息)

这次暑假留在学校参与工作室的项目,对微信公众号比较感兴趣,所以参与这方面的学习研究. 昨天完成了关于网页授权,获取用户信息方面的功能,所以乘热打铁,写上一篇.实现本篇涉及的 功能,还需要完成一些基础.在写完这篇博客后,我会尽快补上. -------------------------废话不多说直入正题 需要的工具: 微信公众号(可以申请,但做开发的,可以申请测试号,申请详细不多说了) 服务器(可以自行购买,我使用的是新浪的sae.) 编辑器(随意,不做推荐) 微信公众号开发文档(地址) ----