前言:?
在開發微信相關的服務(如小程序,公眾號,微信開放平臺等)時,很多人都會接觸到幾個看起來相似但實際用途不同的額ID: AppiD, OpenID,UnionID. 搞清楚這三者的區別,是微信生態開發中的基本功,本文將從開發者視角觸發,深入淺出地解釋它們的關系,區別以及實際應用場景
一.什么是AppID?
AppID(應用ID)是微信平臺分配給每一個應用的唯一身份標識?
常見類型包括:?
- 公眾號AppID: 服務號 / 訂閱號
- 小程序AppID?
- 開放平臺AppID:用于網站登錄,第三方平臺
每個AppID都代表一個"應用實例",開發者在調用微信相關接口時(如登錄授權,支付,模版消息等),都需要提供對應的AppID和AppSecret
舉個例子: 你做了一個公眾號 + 一個小程序,它們就分別有自己的AppID,互相獨立
AppSecret
51b6e0bcc165904f6a232b3b3db62286
微信小程序的AppSecret(小程序秘鑰)是微信開放平臺提供給開發者的一種安全機制,用于保護小程序的數據安全和驗證開發者身份
具體可以進行: 身份驗證,獲取 access_token,數據加密,服務器簡通信,數據安全等?
二、什么是OpenID?
OpenID是微信為用戶在某個"AppID"下生成的唯一標識
特點:
- 同一個用戶,在不同AppID(比如你的公眾號和你的小程序)下的OpenID是不同的
- 也就是說,OpenID是針對 AppID的唯一標識
舉例:?
假設一個用戶的微信號是 wx_user001:
平臺 | AppID | 用戶 OpenID |
---|---|---|
你的小程序 | wx_appid_123 | openid_abc123 |
你的公眾號 | wx_appid_456 | openid_def456 |
?他們代表的是同一個人,但OpenID不一樣,這是微信用來隔離用戶數據的設計?
三. UnionID又是啥?
unionID 是在你注冊了"微信開放平臺"之后,微信為同一個用戶在多個AppID下提供的統一身份標識
獲取條件:?
- 你的小程序/公眾號綁定到了同一個開發平臺賬號
- 用戶必須通過授權接口獲取(比如 getUserInfo返回中才可能帶上)
特點:?
- 同一個用戶,只要在你名下的任意AppID下登錄過,就可以拿到相同的 UnionID
- 前提是這寫AppID都綁定到了同一個微信開放賬號?
舉例:
你有一個小程序+一個公眾號+一個網頁掃碼登錄(開放平臺)
如果這三個都綁定了同一個微信開放平臺賬號,并且用戶都登陸過,
你就可以通過unionId確定是"同一個人"
4.三者關系總結圖
? ? ? ? ?+--------------------------+
| ? ? ? 微信開放平臺 ? ? ? ?|
|(綁定多個 AppID 實例) ? ? |
+--------------------------+
|
+----------------------------+
| ? ? ?同一用戶的 UnionID ? ? |
+----------------------------+
/ ? ? ? ? ? | ? ? ? ? \
+--------+ ? +---------+ ?+----------+
| 小程序A | ? | 公眾號B ?| ?| 網頁登錄C |
+--------+ ? +---------+ ?+----------+
| ? ? ? ? ? ? ?| ? ? ? ? ? ? ?|
OpenID_a ? ? ?OpenID_b ? ? ?OpenID_c
五. 實際開發中的應用場景
場景 | 推薦使用的 ID | 原因說明 |
---|---|---|
小程序中識別用戶 | OpenID | 唯一且直接可獲取 |
公眾號內用戶識別 | OpenID | 同上 |
跨平臺整合用戶數據(公眾號+小程序) | UnionID | 多平臺用戶打通 |
后端統一用戶表的主鍵 | 自定義 user_id + UnionID | 避免 ID 沖突,可擴展 |
六、常見坑和注意事項
1. unionID 獲取不到?
- 用戶沒有授權 getUserInfo?
- 沒綁定開放平臺賬號
- 用戶沒關注公眾號(老接口)
- 沒有綁定郵箱驗證的開放平臺賬號
2.為什么同一個人有兩個OpenID?
- 因為OpenDI是針對AppID的,換個小程序/公眾號就變了
3.如果只有一個平臺,用不用關心 UnionID?
- 不需要, OpenID 就足夠了
七、總結一句話:?
AppID是應用的身份,OpenID是用戶在某個應用下的身份,UnionID是同一用戶在多個應用下的統一身份?