微信订阅号是可以获取openid的,获取方法如下:
1、微信公众号新的验证方式,比之前的安全性高了,所以要获取openid,也不在直接写在url上;
2、配置 《网页授权获取用户基本信息》的回调地址,也是就url的指向地址,;
在修改里写上url ,但是 不要加http等头协议;
3、请求接口 获取code;
redirect_uri 这个是要跳转的地址;
state这个可以根据需要填写参数 但是只能是数字和字母;
4、appid和seceret 这两个参数在后台有,找到填在url上;
scope 可以配置 snsapi_base为 这个只能获取openid 但是可以静默跳转;
snsapi_userinfo 可以获取用户的性别等相关个人信息;
5、填写必要参数,就可以通过这个接口,获取到一个json串,json_decode下 直接对象获取 就可以了;
6、token 和 openid 这些参数 可以作为一种唯一标示在项目实现与微信绑定的相关需求。
一般微信项目只要涉及到用户授权基本都是和 用户唯一标识 OpenID 和用户在微信开发平台账号下的 唯一标识 UnionID 有关,只要项目中需要管理、区分、建立小程序内的用户体系就必须要获取 OpenID 、 UnionID 。
OpenID : 是微信生态 用户唯一标识 ,开发者通过微信小程序(微信公众号)提供的静默授权拿到当前用户的 OpenID ,小程序和公众号的 OpenID 是独立的。
UnionID : 是微信生态 用户在微信开放平台帐号下的唯一标识UnionID(若当前小程序已绑定到微信开放平台帐号) ,开发者可以通过 UnionID 来对不同微信项目下的用户进行关联。如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用, UnionID 是相同的。。
不弹出授权页面,在用户无感中的情况下,获取到用户唯一标识,通过这个唯一标识映射到我们系统的userId就可以建立用户体系管理用户。
流程:
注意事项:
需要弹出选项需要用户选择才能完成的授权操作,一般是为了获得用户手机号和用户信息等。
获取用户信息授权
获取用户手机号授权
中文翻译为:微信_联盟
微信开放平台下的UnionID
同一个开放平台账号下,如果有若干个不同App应用,不同Web应用,不同公众平台号,只要是同一个用户,那么他的UnionID相同;
如果开放平台不同,那么不同开放平台下同一个微信用户的UnionID不同,比如用户A 在开放平台 AA和BB下他们各自UnionID不同。
总结:UnionID简单理解为
UnionID =加密(微信用户 Wechat UID + 开放平台 AppID)
OpenID =加密(微信用户 Wechat UID + 微信公众号 AppID)
UnionID机制,官方的解释是:“通过获取用户基本信息接口,开发者可通过OpenID来获取用户基本信息,而如果开发者拥有多个公众号,可使用以下办法通过UnionID机制来在多公众号之间进行用户账/号互通。只要是同一个微信开放平台账号下的公众号,用户的UnionID是唯一的。
1、appid: 微信小程序/公众号的唯一凭证,即 AppID。
获取途径:可在「微信公众平台 - 设置 - 开发设置」页中获得。(需要已经成为开发者,且帐号没有异常状态)
用途:小程序的 AppID 相当于小程序平台的一个身份证,会在很多场景中使用,比如小程序的登录、授权等
2、openID: openID 是微信生态下 应用的唯一标识 , ,即同一个用户在不同的小程序下的openid是不同的。
获取途径:调用 authcode2Session 接口,通过code(登录凭证,调用wxlogin获取)+appid+appsecret(小程序密钥,获取方式和appid一样)可以换取openid,即 静默授权。
用途:用于在开发者系统中标识用户信息
3、UnionID:UnionID 是微信生态下 用户的唯一标识 ,换句话说,同一用户,对同一个微信开放平台下的不同应用,UnionID是相同的。
获取途径:绑定了开发者帐号的小程序,可以通过以下途径获取 UnionID。
1)开发者可以直接通过 wxlogin + code2Session 获取到该用户 UnionID,无须用户授权。
2)小程序端调用云函数时,可在云函数中通过 CloudgetWXContext 获取 UnionID。
用途:标识同一个微信开放平台下的用户,可用于去重判断
也就是我们常用的微信移动端/PC端之间的扫码登录,PC端用微信扫码登录,微信移动端确认授权登录后,应用可以从微信拿到用户的open id或union id,将微信获取的用户信息与自己账户体系中的用户身份进行关联;
需要用户确认登录,这样可以通过用户的个人确认,获取用户全面的信息,无论是否关注相关微信公众号等都可以获取。
1、静默授权不需要用户确认,只需要用户访问某个网页,属于嵌套在普通网页里的授权形式,但是只能获取到用户的唯一标示openid和union id,无法拿到用户的微信头像、微信名称等个人信息,对于用户的简单认证还是很有用的。
2、静默授权的过程:
1)调用 wxlogin() 获取 临时登录凭证code
2)调用 authcode2Session 接口,换取用户唯一标识 openID
3)调用本地后台服务,将 openID 映射到本地的 userId
微信开发文档-小程序登录流程
参考文章:
1、 微信小程序用户授权登录
2、 微信第三方登录(静默授权和非静默授权)
3、 openid会变吗?微信小程序开发中的appid、openid、unionid使用总结
在小程序后台进行相互之间的关联即可。
微信小程序与公众号进行绑定后,在小程序调用wxlogin方法后会自动获取unionid,公众号根据官方文档在获取用户基本信息后会拿到相同的unionid,openid,nickname等相关信息。将小程序拿到的unionid进行数据库的更新操作,公众号拿到的unionid等信息,新建数据库表A进行存储,在这一步,因为我们公司的原因,我们的公众号之前就有人关注了,那么在这之前,我通过公众号获取关注用户列表获取openid的列表,进行循环openid列表,在调用公众号获取用户基本信息列表进行储存数据库表A,循环结束后之前关注的人的信息就储存在数据库A,然后在进行,这一步的操作。通过公众号关注/取关的事件相应,来进行数据库表A的增删操作,维护数据的新鲜度。进行关联查询,到这一步我们会发现,通过unionid进行表的关联后我们已经实现数据的互通了。
微信小程序,小程序的一种,英文名WechatMiniProgram,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。全面开放申请后,主体类型为企业、政府、媒体、其他组织或个人的开发者,均可申请注册小程序。微信小程序、微信订阅号、微信服务号、微信企业号是并行的体系。微信小程序是一种不用下载就能使用的应用,也是一项创新,经过将近两年的发展,已经构造了新的微信小程序开发环境和开发者生态。微信小程序也是这么多年来中国IT行业里一个真正能够影响到普通程序员的创新成果,已经有超过150万的开发者加入到了微信小程序的开发,与我们一起共同发力推动微信小程序的发展,微信小程序应用数量超过了一百万,覆盖200多个细分的行业,日活用户达到两个亿,微信小程序还在许多城市实现了支持地铁、公交服务。微信小程序发展带来更多的就业机会,2017年小程序带动就业104万人,社会效应不断提升。2017年1月9日,张小龙在2017微信公开课Pro上发布的微信小程序正式上线。2018年2月,微信官方发布公告称:已对涉及假货高仿、色情低俗和违规“现金贷”等超过2000个微信小程序,进行永久封禁处理。2019年8月9日,微信向开发者发布新能力公测与更新公告,微信PC版新版本中,支持打开聊天中分享的微信小程序。
公司业务开展,最近完成了一个微信小程序的开发。场景是这样,同一微信开放平台下拥有相同主体的APP和微信小程序来完成同样的业务,用户进入app或者微信小程序时必须获取用户的unionid来确认当前的用户身份,完成登录。小程序“获取用户信息”api(getUserInfo)的调用方式和之前相比有了较大更新,优雅的实现用户授权和登录非常重要,以下是我在微信小程序授权登录相关流程在开发时候的实现思路和总结,分享如下。
说明:
你可以简单的理解为
如果开发者在多个移动应用、网站应用和公众帐号之间有统一用户账号的需求,需要前往微信开放平台(openweixinqqcom)绑定公众号后,便可利用UnionID机制来满足上述需求。
用户在开放平台的唯一标识符
你可以简单的理解为:
微信针对不同的用户在不同的应用下都有唯一的一个openId, 但是要想确定用户是不是同一个用户,就需要靠unionid来区分。一般自己的后台都会有自己的一个用户表,每个用户有不同的userid。也就是说同一个用户在同一个微信开放平台下的相同主体的应用对应着相同的userid,unionid以及不同的openid。所以在用户登录进来的时候,我们只能靠微信返回给我们的unionid去判断是不是同一个用户,在去关联我们的用户表,拿到对应的userid。
绑定了开发者帐号的小程序,可以通过下面3种途径获取UnionID。
当用户满足条件2和3时,开发者可以直接通过wxlogin获取到该用户的unionid, 否则必须调用接口 wxgetUserInfo ,额外需要注意的事就是妥善处理用户拒绝授权的情况。
在真实的业务场景中,我们希望,用户进入小程序时,未登录情况下可以正常浏览商品,对小程序有个基本的认知,不要直接弹出框要求用户授权,否则会干扰用户,导致新用户的流失,当用户需要使用一些高级功能和场景,这个时候再去要求用户授权,这样用户授权的几率会大大提高。
将登录的逻辑封装ajax
流程:
封装的意义
不再关注当前接口是否需要登录,用户是否已授权,所有请求直接调用 ajax() ,在必要的时候完成一切登录以及授权流程。小程序入口页面增加,业务拓展的时候,你只需要专注于业务实现。
参考资料
openid 是什么 ,一个微信号与一个公众号对应一个固定不变的 openid 。所以一个微信号在一个公众号下的 openid 是不变的,如果换了一个对应的公众号,那就是另一个 openid 了。且只有在微信自带浏览器中打开的项目才可获取到。
UnionID 是什么 ,如果开发者拥有多个移动应用,网站应用,公众号和小程序,可以通过UnionID来区分用户的唯一性,因为只要是同一个微信开发平台账号下的移动应用,网站应用,公众号和小程序,用户的UnionID是唯一的。换句话说,同一个用户,对同一个微信开发平台的不同应用,UnionID是唯一的。
准备条件, 一个公众号、一个外网可访问的域名、该公众号的 AppID 和 AppSecret 、设置网页授权域名(登陆公众平台 设置----->公众号设置------>功能设置----->网页授权域名 按步骤操作并设置就好),这个域名就是你获取openid的web项目发布的域名,这里注意服务器请一定跑在80端口。
参数解释:
注意事项:
参数解释:
注意事项:
返回结果:
access_token 是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用 access_token 。开发者需要进行妥善保存。 access_token 的存储至少要保留512个字符空间。 access_token 的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的 access_token 失效。
接口说明
参数说明
返回结果
参数解释:
https://mpweixinqqcom/wikit=resource/res_main&id=mp1421140839
https://mpweixinqqcom/wikit=resource/res_main&id=mp1421140183