微信公众号与APP微信第三方登录账号打通
一个项目同时开发了APP和微信服务号,需要做到APP和微信服务号的账号互通同步,也就是说一个账号在2个地方都可以用,当然这个前提是保证你公司自己的服务器的数据库用的是同一套。
为保证用户数据的唯一性,打通app与公众号的数据,需要做如下工作:
1.申请appid,
在-登录微信开放平台--申请账号(如果没有,就去注册,不能使用公众号登录或注册)--开发者资质认证(账号中心,认证时需提交很多资料;等待认证结果)--认证通过之后,创建应用(管理中心,创建你要开发的app,等待审核);以上是app需要做的。(如果app与公众号共用一个用户数据库,则继续以下步骤:--绑定公众账号(管理中心--公众账号,有几个公众账号,就绑定几个));
注意:公众号的数据和app的数据,一定要保证放在同一个服务端,不同的话,需要登录公众号,在网页授权的功能里,把授权的服务器地址改成与app的一样(很重要这一步)
2.app上第三方登录,
配置开发,网上有很多资料,可自查;主要在授权登录成功以后,将获取到的微信用户数据传送给后台(openid和unionid最主要,不同的公众号登录openid不同,但unionid是唯一的)
3.后台方面很重要
当用户进行公众号登录时,要根据获取的openid和access_token再获取详情信息(主要是unionid),当app客户端传过来的unionid,进行判断,unionid相同就跟新此用户,不同就录入数据库;(不同的微信公众号登录,分别获取数据再获取unionid,最后再统一判断唯一性)
下面跟大家来聊聊微信的openid和unionid 。
无论是产品经理、还是H5前端工程师、客户端前端开发人员、后端开发人员,只要进行微信开发就会跟openid和unionid打交道。
openid 对当前开发者帐号唯一,openid的机制是同一个区域唯一,比如一个公众号里,你的openid是唯一的,在你的APP应用里他是唯一的,但是这2者之间是不通用的。
unionid 用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。unionid 就是微信为了解决同一个开放平台下的账号的不同应用、服务号之间的数据互通的问题而出现的。
1、微信的用户隐私策略:
每个接入微信的应用(公众号、APP)就像一个独立的商店,用户使用这些应用就像逛商店,商场用会员卡识别用户,类似的,我们根据商场名字为每个用户生成了一张专属会员卡(openid),每张会员卡只能在对应的商场才能够使用,你不能拿着沃尔玛的会员卡去华润万家积分。这是一种安全的授权方式,如果没有这个会员卡,直接暴露微信号,就相当于拿着身份证去逛商场,丢失一个会员卡号远比丢失身份证号要安全。那么问题来了,都是一个集团下的门店,A店和B店希望做到会员卡通用。微信在这里做了一个打通机制,对于同一个企业,在用户属性里面加了一个企业属性(UnionID),方便同一个企业在不同的产品中识别到同一个用户。
微信独有的 unionid机制, 用户唯一标识符,同个微信开放平台下的开发账号下的所有应用,如果用户是同一个微信登录,那么unionid是一样的。
这个机制伴随着微信联合登录已经在微信开放平台(open.weixin.qq.com)推出了。获得了开放平台认证的企业,可以绑定10个手机应用、10个网站、10个公众号,他们对应的用户信息也可以互联互通。
2、微信openid和unionid长度是不一样的
openid=28 , unionid=29
3、第三方获取微信openid的两种常见的方式
- 1、)静默授权,用户无感知
用户在你开发的公众号发消息,微信服务器将POST消息的XML数据包到开发者填写的URL上,这时你可以通过程序获取到改用户的openid。
以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
- 2、)用户手动同意授权
通过微信专有网页授权页面获取(如上图的绿色界面),需要用户手动点击确认。
以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
微信网页授权登录大致流程分为四步:
- 引导用户进入授权页面同意授权,获取code
- 通过code换取网页授权access_token(与基础支持中的access_token不同)
- 如果需要,开发者可以刷新网页授权access_token,避免过期
- 通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)
网页授权获取用户基本信息也遵循UnionID机制。
如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。
注意
我们在使用微信网页版本的时候,生成微信二维码用户扫描登录,此时获取的openid和前面我们所说通过微信客户端获取的openid就不是一样的,但是UnionID是一样的,这是因为,网页二维码扫描登录是网站应用,第一种获取openid是公众号,两者属于不同应用,所以是不一样的。
UnionID机制的优势和好处
对于用户来说,用一个微信号就可以同时跨平台登陆公众号、移动应用和PC网站,无需重新注册,方便快捷。
对于开发者来说:
1、可以降低用户注册成本,提高用户留存率,更好的管理用户资料。
2、如果是PC网站,微信登陆就和我们在PC上登陆网页版的微信一样,直接扫描二维码即可,极大的方便了用户,而且保障安全。
3、当同一用户用同一微信同时登陆PC网站、移动应用、公众号,这三方的数据就可统一储存,用户无论在哪一端进行操作,三大平台都会统一修改结果,这将极大方便了对同一用户的数据管理和行为统计。
微信公众号与APP微信第三方登录账号打通的更多相关文章
- 一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app
一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app 转载 作者:jrainlau 链接:https://segmentfault.com/a/1190000005844155 ...
- 在微信框架模块中,基于Vue&Element前端的微信公众号和企业微信的用户绑定
在一个和微信相关的业务管理系统,我们有时候需要和用户的微信账号信息进行绑定,如对公众号.企业微信等账号绑定特定的系统用户,可以进行扫码登录.微信信息发送等操作,用户的绑定主要就是记录公众号用户的ope ...
- ASP.NET MVC 微信公众号支付,微信公众平台配置
微信公众号支付,首先要登录微信公众号进行配置: 第一步:配置网页授权域名
- 微信支付-微信公众号支付,微信H5支付,微信APP支付,微信扫码支付
在支付前,如果使用第三方MVC框架,则使用重写模式,服务器也需要配置该项 if (!-e $request_filename){ rewrite ^/(.*)$ /index.php/$ last; ...
- 微信公众号开发 [05] 微信支付功能开发(网页JSAPI调用)
1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...
- thinkphp.2 thinkphp5微信支付 微信公众号支付 thinkphp 微信扫码支付 thinkphp 微信企业付款5
前面已经跑通了微信支付的流程,接下来吧微信支付和微信企业付款接入到thinkphp中,版本是3.2 把微信支付类.企业付款类整合到一起放到第三方类库,这里我把微信支付帮助类和企业付款类放到同一个文件了 ...
- vue微信公众号、H5微信支付
1.H5微信支付 后台会返回一个URL,前端直接跳转就OK(需要你传给后台一个ip,必须保证在同一域名下) 使用window.location.href =res.data;进行页面跳转到支付界面(r ...
- 用wxpy管理微信公众号,并利用微信获取自己的开源数据。
之前了解到itchat 乃至于 wxpy时 是利用tuling聊天机器人的接口.调用接口并保存双方的问答结果可以作为自己的问答词库的一个数据库累计.这些数据可以用于自己训练. 而最近希望获取一些语音资 ...
- 【微信公众号】将微信公众号消息里的FromUserName即OpenID转成UnionID
最近在调试微信公众号开发者模式,处理公众号消息,收到如下回调消息内容 <xml><ToUserName><![CDATA[gh_29********21]]>< ...
随机推荐
- V-rep学习笔记:视觉传感器1
Vision sensors, which can detect renderable entities(Renderable objects are objects that can be seen ...
- group by 分组
group by 分组:一般情况下group需与统计函数(聚合函数)一起使用才有意义 mysql中的五种统计函数: ()max:求最大值 select max(goods_price) from go ...
- 无法启动此程序,因为计算机中丢失 api-ms-win-crt-stdio-l1-1-0.dll 解决
问题描述 最近用一台Windows Server 2012 R2系统的机器的时候碰到了这个问题. 因为在网上看了很多解决方案,都没有很好的解决.所以记录一下这个问题的解决. 之前使用VS2013编译出 ...
- 转 解决:error: Cannot find libmysqlclient_r under /usr/local/mysql.
配置php的时候出现以下问题解决方案 checking for MySQL support... yeschecking for specified location of the MySQL UNI ...
- 开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)入门学习资源索引
from: http://www.w3c.com.cn/%E5%BC%80%E6%BA%90%E5%88%86%E5%B8%83%E5%BC%8F%E6%90%9C%E7%B4%A2%E5%B9%B ...
- StatefulSet和Deployment的区别
“Deployment用于部署无状态服务,StatefulSet用来部署有状态服务”. 具体的,什么场景需要使用StatefulSet呢?官方给出的建议是,如果你部署的应用满足以下一个或多个部署需求, ...
- (原)torch7中指定可见的GPU
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/7418694.html 参考网址: https://gitter.im/torch/torch7/arc ...
- 禁止logback输出状态信息
一.问题描述 22:18:07,299 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resourc ...
- 转:mvc 当中 [ValidateAntiForgeryToken] 的作用
一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSR ...
- 在Linux上yum安装运行Redis,只能安装2.4.10(主从)
Installing Redis on CentOS 6.4 First, install the epel repo sudo rpm -Uvh http://download.fedoraproj ...