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。所以楼主这边只是为了提个醒,以防你们以后用到这个会吹亏(我就是掉过这个坑)。所以大家就留一点心,留个口子就行了(就先加个字段呗,多大点事儿)。
以上就是网页授权一些概述。。。。
C#开发微信公众号——网页开发之微信网页授权的更多相关文章
- C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取
一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...
- 微信公众号支付开发全过程 --JAVA
按照惯例,开头总得写点感想 ------------------------------------------------------------------ 业务流程 这个微信官网说的还是很详细的 ...
- 到处是坑的微信公众号支付开发(java)
之前公司项目开发中支付是用阿里的支付做的,那叫一个简单,随意:悲催的是,现在公司开发了微信公众号,所以我步入了全是坑的微信支付开发中... ------------------------------ ...
- PHP微信公众号后台开发(Yii2实现)
本文内容较多,包括微信接入.获取微信用户信息.微信支付.JSSDK配置参数获取等部分.如果读者对微信开发没有一个主观上的认识,那么建议读者先研读微信公众平台开发者文档,然后再阅读本文,效果更佳!另外本 ...
- C#/ASP.NET MVC微信公众号接口开发之从零开发(四) 微信自定义菜单(附源码)
C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...
- C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)
文章导读: C#微信公众号接口开发之从零开发(一) 接入微信公众平台 微信接入之后,微信通过我们接入的地址进行通信,其中的原理是微信用户发送消息给微信公众账号,微信服务器将消息以xml的形式发送到我们 ...
- C#/ASP.NET MVC微信公众号接口开发之从零开发(三)回复消息 (附源码)
C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...
- Java开发微信公众号(五)---微信开发中如何获取access_token以及缓存access_token
获取access_token是微信api最重要的一个部分,因为调用其他api很多都需要用到access_token.比如自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等在请求的时候 ...
- Java开发微信公众号(四)---微信服务器post消息体的接收及消息的处理
在前几节文章中我们讲述了微信公众号环境的搭建.如何接入微信公众平台.以及微信服务器请求消息,响应消息,事件消息以及工具处理类的封装:接下来我们重点说一下-微信服务器post消息体的接收及消息的处理,这 ...
- Java开发微信公众号(三)---微信服务器请求消息,响应消息,事件消息以及工具处理类的封装
在前面几篇文章我们讲了微信公众号环境的配置 和微信公众号服务的接入,接下来我们来说一下微信服务器请求消息,响应消息以及事件消息的相关内容,首先我们来分析一下消息类型和返回xml格式及实体类的封装. ( ...
随机推荐
- 多目标跟踪笔记二:Efficient Algorithms for Finding the K Best Paths Through a Trellis
Abstract 本文提出了一种新的方法来寻找不相交k最优路径.最坏情况下计算复杂度为N3log(N).该方法比WVD算法(https://www.cnblogs.com/walker-lin/p/1 ...
- 详解proxy_pass、upstream与resolver
详解proxy_pass.upstream与resolver boldcautious 关注 2018.06.04 10:48 字数 1204 阅读 1434评论 0喜欢 2 应用场景 这里列举几个应 ...
- 【剑指Offer】65、矩阵中的路径
题目描述: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经 ...
- 文本框、评论框原生js
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- 51nod1006 -最长公共子序列Lcs【动态规划】
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最 ...
- 一、Scrapy入门教程
本文转载自以下链接:https://scrapy-chs.readthedocs.io/zh_CN/latest/intro/tutorial.html 在本篇教程中,我们假定您已经安装好Scrapy ...
- Linux - redis发布|订阅
目录 Linux - redis发布|订阅 发布|订阅 基本命令 发布和订阅实例 正则方式订阅一个或者多个符合模式的频道 Linux - redis发布|订阅 发布: publish 订阅: subs ...
- [bzoj1251]序列终结者_splay
序列终结者 bzoj-1251 题目大意:给定一个长度为n的正整数序列,支持区间加,区间反转,查询区间最大值.所有元素开始都是0. 注释:$1\le n\le 5\cdot 10^4$,操作个数不多于 ...
- php表单常用正则表达式
<?php /** * @description: 正则表达式匹配 */ class Regex { /** * @手机号 */ public static function Phone($su ...
- MySQL终端(Terminal)命令基本操作(转)
注意:MySQL数据库命令不区分大小写.但在MAC的终端,如果你想使用tab自动补全命令,那么你就必须使用大写,这样MAC的终端才会帮你补全命令,否则你按N遍tab都不会有响应. 1.数据库(data ...