在进行微信生态相关的开发的时候,经常会遇到一个术语:openID。openID 在微信生态下几乎无处不在:你想要识别用户身份?需要 openID

你需要给用户推送消息?需要 openID

除了 openID 以外,在开发时,还会有另外一个术语:unionID,当你思考多个微信生态下的应用互相协作之时,就会遇到 unionID。

此外,我们自己开发的业务系统中,还会有一个自己业务系统中的 ID,那如何理解这三个 ID 呢?

业务系统中的 ID

一般来说,我们会在自己的业务系统中存储一份用户信息,在存储用户信息的时候,用户信息会在数据库中有一个名为 ID 的主键,后续我们在进行各项开发的时候,都会使用这个 ID 来指代对应的用户。从而在开发过程中,随时可以获取到用户的一些信息。

我们会在这个 ID 对应的数据库记录中存储一些用户的数据,比如用户名、用户的头像、用户的昵称、用户的备注等等。

openID 微信应用中的用户唯一 ID

openID 是微信应用中的唯一 ID, 这里的微信应用指的是微信生态下的应用,不仅仅是小程序,也表示公众号、小商店等应用。

每一个用户在访问了某一个小程序后,就会获得自己在这个小程序中的唯一 ID。这个唯一 ID 和两个因素有关:是哪个小程序?是哪个用户?

也正是因为这两个因素,导致同一个用户在不同的小程序中的 openID 不同,所以说,openID 是微信应用中的用户唯一 ID,也仅在这个场景中有用。你在小程序拿到一个用户的 openID,意味着它只能在这个小程序中用于定位某个用户,你把这个 openID 拿到另外一个小程序/公众号中去使用,就无法定位到当前的用户。

unionID 微信应用群中的用户唯一 ID

微信生态下除了小程序,还有订阅号、服务号。你肯定希望自己的订阅号、服务号、小程序可以共用一套用户系统,这样用户在进入这三处地方,就可以获得一致的体验,比如订阅号的用户在进入小程序后,可以看到自己在订阅号中做过的事情。

这个时候,你就需要借助微信应用群中的用户唯一 ID —— unionID。

这里需要注意关键词「微信应用群」。你的公众号和你的小程序并不是天然成为一个微信应用群的。想要达成一个微信应用群,你需要在微信开放平台将你的公众号和小程序之间进行关联。在完成关联以后,微信就会在符合要求的情况下,给予每次请求赋予一个 unionID 的属性。

具体的要求如下:调用接口 wx.getUserInfo,从解密数据中获取 UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。

如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户再次授权。

如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过 wx.login + code2Session 获取到该用户 UnionID ,无须用户再次授权。

用户在小程序(暂不支持小游戏)中支付完成后,开发者可以直接通过getPaidUnionId接口获取该用户的 UnionID,无需用户授权。注意:本接口仅在用户支付完成后的5分钟内有效,请开发者妥善处理。

小程序端调用云函数时,如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号,可在云函数中通过 cloud.getWXContext 获取 UnionID。

小程序端调用云函数时,如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用,也可在云函数中通过 cloud.getWXContext 获取 UnionID。

如何使用 openID、unionID 和 ID

如果你希望你的业务可以实现,在 A 中的操作,可以在 B 中看到,那么你就需要借助于 unionID,将不同的用户关联起来,在数据库设计方面,你可以在用户表中设定几个属性: application_a_openid 、application_b_openid 和 unionid。

在执行查询的时候,判断是否存在对应 unionId 的用户,并进行关联。

总结

微信开发生态中有不少的 ID,看似纷乱,但如果你可以把他们以某一个特定的场景来思考,就会更好理解。

微信openid 服务器备案,微信生态中的 openId、unionID和业务系统中的ID相关推荐

  1. linux中600是什么权限,linux系统中文件的权限

    查看文件权限的语句: 在终端输入: ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些: -rw-rw-r-- 一共有10位数 其中: 最前面那个 - 代表 ...

  2. 如何将USBKey中的证书注册到Windows系统中、分享一个 证书 C++安装

    USBKey 是一种 USB 接口的硬件设备.如坚石诚信的 ET199Auto ,内置 16 位国外进口高性能智能卡芯片,有一定的存储空间,可以存储用户的私钥以及数字证书,利用 USBKey内置的RS ...

  3. CSP开发基础--如何将USBkey中的证书注册到Windows系统中

    本文转自和讯博客坚实诚金 http://zyf860825.blog.hexun.com/61812512_d.html USBKey是一种USB接口的硬件设备.如坚石诚信的ET199Auto,内置1 ...

  4. 业务系统中的Word文档如何转成pdf

    在业务系统中Word文档转pdf是常见的需求,Word文档格式用于业务文档的编辑过程,Pdf文档格式用于流转分发的过程,通过zOffice的Open API可以方便的把Word文档转成Pdf,同时可以 ...

  5. 微信分身服务器,苹果微信分身版

    苹果微信分身版 定制技巧一.怎样去做做seo?出现seo,一看就知道.seo如同天上掉馅饼,做到专注优化,那么就是正确的seo,后面的会做出***好的seo. 打造微信中的自我推广.商业协同等.微信公 ...

  6. 怎样打开微信定位服务器地址,微信位置服务功能,能知道对方位置,你们知道怎么用吗!...

    我们是经常使用微信了,实际微信隐藏着一个位置的一个功能,不管在什么地方,都可以实时知道对方的位置信息,尤其是家里的老人和孩子,一定要学会该怎么操作呢?带大家一起来看一下.微信究竟隐藏着哪些实用的功能呢 ...

  7. 在业务系统中寻求技术含量

    从进入互联网公司开始工作起,每个人都在问自己,CRUD 到底有什么技术含量? 别觉得 CRUD 只是业务工程师的问题,无论你在写什么程序,基本上都是在和数据打交道,除了读就是写.只不过读写的时候还会附 ...

  8. simulink中mpc模块怎么使用_Controllogix系统中ILX34MBS485模块使用

    本文主要介绍ILX34-MBS485模块在罗克韦尔Controllogix系统中的使用.此模块属于第三方产品,可接入Controllogix系统中,实现Modbus RTU协议的串行通信. 场景:在C ...

  9. linux中profile文件作用,解析Linux系统中bashrc和profile文件的作用区别

    使用终端ssh登录Linux操作系统的控制台后,会出现一个提示符号(例如:#或~),在这个提示符号之后可以输入命令,Linux根据输入的命令会做回应,这一连串的动作是由一个所谓的Shell来做处理. ...

最新文章

  1. HDU4081(次小生成树)
  2. CAS Tomcat配置
  3. 使用ASP.NET Abstractions增强ASP.NET应用程序的可测试性
  4. boost::function_types::is_member_function_pointer的用法测试程序
  5. Python 3.X 要使用urllib.request 来抓取网络资源。转
  6. 函数计算助力闲鱼构建云端一体化变成模式
  7. Centos5.5安装使用Xen
  8. 2017一季度JAVA面试题锦集
  9. 如何使用FF的Firebug组件中的net工具查看页面元素加载消耗时间
  10. Linux Shell中有三种引号的用法
  11. 春运公益片“情满回家路”上线 顺风车等出行方式再被呼吁
  12. 区块链和数据科学:如果同时应用这两种技术,将会实现什么?
  13. 前端测试框架Jest系列教程 -- 简介
  14. swift 图片压缩
  15. R语言对数据进行非参数检验
  16. OrCAD DSN文件无故消失解决办法
  17. 简单处理点击EditText外部区域关闭软键盘
  18. iOS中 断点下载详解 韩俊强的博客
  19. 大话数据结构——烂笔头
  20. 计算机硬盘分区win7,win7如何磁盘分区 教您win7磁盘分区

热门文章

  1. GDPR条例的12项重点分析
  2. Spark RDD distinct 算子
  3. vue3.0在线编辑器codemirror开发
  4. CVF2020邻域自适应/语义分割:FDA: Fourier Domain Adaptation for Semantic SegmentationFDA:用于语义分割的傅立叶域自适应算法
  5. web上传图片到七牛云服务器
  6. 如何三平台win/安卓/ios同步日历日程
  7. 7-6 程序员买西瓜 (5分)
  8. 乐观锁和悲观锁区别以及使用场景
  9. c++函数模板--(函数模板的定义)
  10. poi 读取excel合并单元格两种方式