C#开发微信公众号——网页开发之微信网页授权
首先咱们先看下公众号的文档里面的介绍
上述图片的文字描述就是讲述了网页授权有什么用,就是为了获取微信用户的基本信息;授权回调域名的规范,说到域名回调的事情就不得不提一下设置网页授权域名
最好将这三个域名设置好,以防自己要用的时候忽略的这三个小东西。
好了域名设置好了,之后咱们再来看看网页授权的流程
第一步:咱们先通过接口让用户同意授权获取code
scope=snsapi_base这个时候,就相当于我们默认用户同意授权,但由于不是用户自己确认的授权,所以只能获取用户的openid,不能获取用户的一些基本信息;
第二步:通过code获取access_token
第三步与第四步第五步,是给有需要的使用。因为我们这边是只需要获取到用户的openid即可,也不需要用户的基本信息,所以就不详细讲了。当初由于因为这些接口涉及到跳转页面,所以当初想怎么简单怎么来,就运用aspx的后台可以很快实现这些比较复杂的逻辑。
/// <summary>
/// 通过授权跳转页面
/// </summary>
/// <param name="url"></param>
/// <param name="state"></param>
/// <returns></returns>
public static string GetAuthorize(string url)
{
var state = Guid.NewGuid().ToString().Replace("-", "").ToLower();
HttpContext.Current.Session["weixin_state"] = state;
var urlencode = HttpContext.Current.Server.UrlEncode(url);
return 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"
, _appid, urlencode, state);
} /// <summary>
/// 通过code获取会员登录微信实体
/// </summary>
/// <param name="code"></param>
/// <param name="state"></param>
/// <returns></returns>
public static AccessTokenCallBack GetAccessTokenByCode(string code, string state)
{
AccessTokenCallBack accessTokenCallBack = null;
if (!string.IsNullOrEmpty(code) && !string.IsNullOrEmpty(state) && (HttpContext.Current.Session["weixin_state"] + "") == HttpContext.Current.Server.UrlDecode(state))
{
try
{
var resJson = SendHttpGet(string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", _appid, _secret, HttpContext.Current.Server.UrlDecode(code)));
accessTokenCallBack = JsonConvert.DeserializeObject<AccessTokenCallBack>(resJson);
}
catch (Exception ex)
{
LogHelper.WriteLog(typeof(WeChatHelper), ex, Level.Error);
}
}
return accessTokenCallBack;
} /// <summary>
/// HTTPget请求
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string SendHttpGet(string url)
{
using (WebClient client = new WebClient() { Encoding = System.Text.Encoding.UTF8 })
{
return client.DownloadString(url);
}
}
(现在看起来都想把这些代码重构一下,都不知道自己怎么写成这个样子的。。。)我就忍一下吧,_appid, _secret这两个就是微信开发者所必须保存到配置文件的东西。。。
这样我们就可以通过openid将微信的用户与我们系统里面的会员所关联,但是值得注意的是如果你们后期还有什么微信开放平台微信登录等。这时候就要注意到一个叫UnionID的东西。文档是这样给出的解释:
1、请注意,网页授权获取用户基本信息也遵循UnionID机制。即如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。
2、UnionID机制的作用说明:如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一用户,对同一个微信开放平台下的不同应用(移动应用、网站应用和公众帐号),unionid是相同的。
但是只有在拥有开放平台的账号以及在开放平台上绑定公众号的时候,才会出现UnionID。所以楼主这边只是为了提个醒,以防你们以后用到这个会吹亏(我就是掉过这个坑)。所以大家就留一点心,留个口子就行了(就先加个字段呗,多大点事儿)。
以上就是网页授权一些概述。。。。
最新文章
- 4.6 .net core依赖注入的封装
- Canvas 知识体系简单总结
- Bootstarp: sub_menu 自定义改变nav样式
- 让最新官方编译的 ffmpeg 在 XP 上 跑起来
- linux下获取本机IP
- SQL集合运算参考及案例(二):树形节点数量逐级累计汇总
- linux之mysqlimport的哪些变态事儿
- SAE J1850 VPW PWM, SAE J2411 SWC, ISO 11898 CAN, SAE J1708, Chrysler CCD 接口芯片电路
- Linux课本第一二章
- Java中的DeskTop类
- mysql选择联合索引还是单索引?索引列应该使用哪一个最有效?深入測试探讨
- chapter3:Collaborative Filtering ---------A Programmer&#39;s Guide to Data Mining
- readonly 与 const
- var genreModel =storeDB.Genres.Include(";Albums";).Single(g =>; g.Name == genre);是什么意思?
- 《Programming WPF》翻译 第8章 5.创建动画过程
- OAuth2.0授权机制说明
- Typings实现智能
- JavaScript笔记之第五天
- 安卓开发:UI组件-布局管理器和文本显示
- 用CMD打开chrome并导航到百度(golang)
热门文章
- 【转】jmeter定时调度,持续并发,使用简介
- koji
- STL源码分析之迭代器
- 51nod 1002 数塔取数问题【dp】
- Windows环境下flask+Apache+mod_wsgi部署及爬坑
- hdu2003 求绝对值【C++】
- web开发如何使用高德地图API(三)点击热点打开信息窗体
- [网络流24题#9] [cogs734] 方格取数 [网络流,最大流最小割]
- N天学习一个Linux命令之hostnamectl
- HDU 2348