`

微信OAuth总结

 
阅读更多

基本流程

首先需要登录微信公众号管理后台,配置允许跳转的域名。该域名必须是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,可以查到用户的基本信息

这里有几点容易产生误解:

  1. 试图从前台页面通过ajax来换取access_token和open_id不可行,跨域问题
  2. 这里虽然也叫access_token,但是与后台通过app_id和app_secret换到的access_token完全不是一个东西,不要搞混
  3. 后台的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,则微信会提示用户授权,如下图
wx oauth

只有用户同意授权,跳转回来的链接才会携带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>

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    微信 oauth2 授权流程 业务衔接

    ### 微信OAuth2授权流程解析 #### 一、引言 随着移动互联网技术的快速发展,第三方应用和服务的集成已成为趋势。微信作为一个重要的社交平台,提供了丰富的API接口供开发者使用,其中OAuth2授权机制是实现第三方...

    java 微信OAuth2.0网页授权登陆源码

    总结,这个Java微信OAuth2.0网页授权登录源码提供了从用户授权到获取和使用微信用户信息的完整流程,对于开发微信相关的Web应用非常有价值。通过深入研究和实践,你可以有效地将微信登录功能整合到自己的项目中,...

    java对微信的OAuth2.0网页授权进行访问授权

    总结,Java实现微信OAuth2.0网页授权涉及多个步骤,需要理解OAuth2.0协议,掌握HTTP请求的发送与处理,以及JSON数据的解析。在实际开发中,还需要考虑错误处理和安全性问题,确保服务的稳定性和用户数据的安全。通过...

    微信企业号OAuth2验证接口的2种实例(使用SpringMVC)

    总结,微信企业号OAuth2验证接口的实现主要涉及客户端配置、授权回调处理、用户信息获取以及会话管理。SpringMVC提供了便捷的注解支持和自定义过滤器/拦截器机制,使得开发者能灵活地集成和实现OAuth2认证流程。在...

    laravel5实现微信第三方登录功能

    在进行微信OAuth2.在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。 总结下来就是...

    归档_微信跳转_跳转PHP_跳转_

    总结起来,这个压缩包中的文件和标签所代表的知识点包括:微信OAuth2.0授权、微信内嵌浏览器的跳转机制、PHP服务器端编程以及错误处理策略。这些知识对于开发微信相关的网页应用,特别是需要从微信环境跳转到外部...

    微信获取用户信息demo

    总结,"微信获取用户信息demo"是一个便捷的JAVA实现,涵盖了微信OAuth2.0授权、用户信息获取以及消息推送等功能。对于开发者来说,这提供了一个快速入门微信API开发的实例,有助于节省开发时间和提高效率。在使用...

    2020年最新PHP微信朋友圈广告植入源码.zip

    1. **微信OAuth2.0授权**:用户在访问应用时,通过微信OAuth2.0协议获取用户的微信授权,这样可以获取到用户的基本信息,以便进行个性化广告推送。 2. **广告素材管理**:源码中可能会包含一个广告素材管理模块,...

    php获取微信code.openid.名字和头像

    这些信息对于构建微信...总结起来,通过微信OAuth2.0授权,PHP开发者可以方便地获取微信用户的code、openid、名字和头像,实现微信登录和用户授权功能。在实际开发中,要遵循最佳实践,确保数据的安全性和系统稳定性。

    网页微信PHP登录的实现.zip

    这个库通常包含了处理微信OAuth2.0授权流程的类和方法,包括生成二维码、获取Access Token、获取用户信息等功能。开发者可以通过阅读源码学习具体的实现细节,或者直接在自己的项目中引用这个库来快速搭建微信登录...

    Liferay微信登录自动登录

    Liferay微信登录的核心是利用微信OAuth2.0协议进行授权。用户点击微信登录按钮后,Liferay会重定向到微信的授权页面,用户确认授权后,微信会返回一个授权码。Liferay接收到授权码后,向微信服务器请求用户信息,...

    第三方实现微信登录(微信授权登录和微信网页扫码登录)

    在互联网应用中,微信...总结,第三方实现微信登录涉及的技术主要包括OAuth2.0授权协议、微信API调用、二维码生成及解析,以及安全策略。开发者需要理解这些概念,并结合实际业务需求,实现流畅、安全的微信登录功能。

    简单化thinkphp5的微信登录,QQ支付

    `Wxlogin.php`文件可能是用来处理微信OAuth2.0授权的。微信开放平台提供了OAuth2.0授权机制,允许第三方应用引导用户授权后获取用户的微信基本资料。开发者需要在微信开放平台注册并创建应用,获取AppID和AppSecret...

    微信的第三方登录

    在本文中,我们将深入探讨微信第三方登录的实现过程,以及如何利用ShareSDK这一强大的社交分享工具进行集成...通过理解并掌握微信OAuth2.0授权机制和ShareSDK的使用,开发者可以轻松地在自己的应用中实现微信登录功能。

    微信授权登陆源码

    总结,微信授权登录为开发者提供了一种便捷的用户认证方式,通过理解其背后的OAuth2.0机制和微信API,我们可以构建安全高效的登录系统。"ICORE_MAMS"中的源码应该涵盖了整个授权过程的各个步骤,对于学习和实践微信...

    微信H5大转盘抽奖小程序

    2. 微信OAuth2.0授权:用于获取用户的基本信息,确保抽奖活动的合法性和安全性。 三、大转盘抽奖逻辑 1. 转动效果:利用CSS3的transform属性和animation实现转盘的旋转动画,通过JavaScript控制旋转的角度和速度,...

    微信接口实现及调用方法源码

    这个库可能包含了对微信OAuth认证、消息模型处理、事件处理等基础接口的实现,是进行微信开发不可或缺的部分。 总结来说,这个压缩包提供了一整套微信接口的实现,包括了完整的解决方案、源码阅读指南以及具体的...

    基于微信小程序的培训机构客户管理系统的设计.zip

    微信登录授权:通过微信OAuth 2.0协议实现用户身份认证,简化用户注册流程,提高用户体验。 功能概述: 学员管理:允许机构录入和管理学员基本信息,包括姓名、联系方式、学习进度等。 课程安排:提供课程发布、...

    java微信登录授权demo

    总结,Java微信登录授权涉及到OAuth2.0授权流程、微信API的调用以及数据的处理。通过理解并实践这些步骤,你可以有效地在你的应用中集成这一功能,提供便捷的微信登录体验。同时,对"chapter-06"中的代码进行深入...

    基于 Feign 实现的企业微信 JAVA SDK, 覆盖 企业微信 所有API,spring-boot-start.zip

    总结来说,"基于 Feign 实现的企业微信 JAVA SDK, 覆盖 企业微信 所有API,spring-boot-start.zip" 提供了一个强大的工具,用于简化企业微信 API 的集成工作,让开发者能够高效地构建与企业微信交互的应用程序。...

Global site tag (gtag.js) - Google Analytics