基本流程
首先需要登录微信公众号管理后台,配置允许跳转的域名。该域名必须是2级域名,不支持1级域名。所以数量有限,需要规划好。比如配置了a.exmaple.com为跳转域名,就无法再跳转到b.example.com了。如果这里配置错误的话,用户在跳转时,会得到一个语焉不详的错误提示“redirect_uri参数错误”,如果看到这个提示的话,多半就是OAuth配置的问题
配置之后,就可以使用微信的OAuth机制了,域名以a.example.com为例,假设实际的地址是a.example.com/abc.html,那么要配置成:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=http%3a%2f%2fa.example.com%2fabc.html&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
然后用户在微信中打开访问此地址,微信就会提示用户鉴权,如果用户同意的话,则会跳转到redirect_uri指定的实际地址:
http://a.example.com/abc.html?code=CODE&state=STATE
然后:
1. 将code发到自己的服务器上
2. 通过code可以换到access_token和open_id
3. 用access_token和open_id,可以查到用户的基本信息
这里有几点容易产生误解:
- 试图从前台页面通过ajax来换取access_token和open_id不可行,跨域问题
- 这里虽然也叫access_token,但是与后台通过app_id和app_secret换到的access_token完全不是一个东西,不要搞混
- 后台的API,也有获取用户基本信息的接口,但那个需要用户关注了公众号才能调用;而这个OAuth接口,只要用户同意授权,即使没有关注也可以调用,所以更加灵活
最后调用成功后,可以得到以下响应:
{
"openid": "OPENID",
"nickname": NICKNAME,
"sex": "1",
"province": "PROVINCE"
"city": "CITY",
"country": "COUNTRY",
"headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
"privilege":[
"PRIVILEGE1"
"PRIVILEGE2"
],
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
订阅号如何使用OAuth服务
当前微信限制了只有服务号才能使用OAuth。如果是订阅号的话,可以“借用”服务号来部分满足需求。虽然服务号得到的open_id并不是订阅号的open_id,但是可以用来区分是否是“同一个”用户。比如一个网页需要计数,可以通过这种方式标识出当前访问的用户
另外,如果订阅号和服务号已经在微信开放平台绑定到同一账号,那么union_id是一样的。不过现在大部分接口还是需要以open_id为参数,所以如果只知道union_id而不知道open_id,并没有太大用
union_id机制
如果一个产品同时有订阅号、服务号、APP,又需要打通用户数据,识别出是同一个人,就需要用到union_id机制。在这种情况下,同一个用户相对订阅号、服务号、APP分别会有一个open_id,但是union_id是一样的,于是可以利用union_id建立关联关系。
id
union_id
dingyue_open_id
service_open_id
app_open_id
user_id
比如用上面这张表,无论用哪一个open_id,都能找到对应的其他open_id,以及业务系统中的user_id
静默授权
如果OAuth url串中,设置scope=snsapi_userinfo,则微信会提示用户授权,如下图
只有用户同意授权,跳转回来的链接才会携带code参数,后续才能获得用户的基本信息。某些特殊场景,可以使用“静默授权”,用户的体验是立刻跳转到业务页面,不会看到授权页面:
1. 设置scope=snsapi_base,用户无感知,但是仅能获取到用户的open_id,无法获取其他信息
2. 对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是scope为snsapi_userinfo,也是静默授权,用户无感知
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
基于ThinkPHP3.2.3的微信OAuth2.0微信网页授权 基于ThinkPHP3.2.3的微信OAuth2.0微信网页授权
自用系统中分离出来的代码,ASP微信Oauth2.0登录接口+微信支付接口
微信OAuth2.0网页授权接口PHP版用法示例,测试前请先申请一个公众号供测试,微信提供测试用的公众账号,此帐号只能添加100个关注者且只有__已关注__的用户才可以进行OAuth2.0受权。 1.开通后将```appID```、```app...
关注者点击微信底部菜单 可以绑定关注者信息与业务系统之间的信息
使用方法 1、设置好跳转链接。 2、配置好 APPID和 SECRET 放置回调域名下面即可。
微信OAuth2.0网页授权接口 微信OAuth2.0网页授权接口的thinkphp实现版本,主要实现了oauth网页受权,以及部分其他接口。 使用方法 为什么用OAuth2.0受权? 通过OAuth2.0受权的网页将会获取到打开者的微信信息,...
微信OAuth2网页授权登陆接口,微信OAuth2网页授权登陆接口,在你的网站上放上可以扫码登陆,会不会吸引更多用户去注册,现在你只需要简单的配制一下...将上述目录在微信中打开,就可以体验微信的OAuth2.0网页授权过程。
C# 微信oauth2.0 网页授权源码 适应于微信二次开发中微信直接登录第三方系统的要求。
微信OAuth2网页授权登陆接口,微信登陆获取头像,获取openid,独立代码编程一幕了然,会点php代码就能看懂!
微信OAuth认证高级接口,获取AccessToken,创建菜单,获取openid
通过点击viewbutton获取用户openid,实现方式oauth2.0认证
基于ThinkPHP3.2.3的微信OAuth2.0微信网页授权 的sql
IDE:IntelliJ IDEA 2020.1.3 x64 (找度娘破解) 微信开发者工具 (官网去下载) jdk版本 :1.8 natapp:NATAPP-内网穿透 基于ngrok的国内高速内网映射工具 (阿里的) 此篇文章献开发使用,具体线上部署等更新。。。
java 微信OAuth2.0网页授权登陆源码,亲测有效,网上有很多都是忽悠人的,这是我修改后的,现在跟分享出来
Odoo 企业微信(企业号)应用对接模块,实现Oauth2网页授权登录,自定义odoo业务消息推送。 for odoo10, odoo11 特性 oauth登录与odoo用户登陆互不影响。 无需安装额外python模块依赖,开箱即用。 一键同步企业微信...
string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appid, appsecret, code); LogHelper.Debug(url); string ...
刚开始写的时候找了很多的代码,结果总是出错,后来总算是把功能整合在一起,在MyEclipse环境下可直接运行。不过,Appid,Secret需要替换。