公眾號開發入門:查詢用戶是否已經關注公眾號?


背景

最近,小明在參與app改版時,有一個業務場景是:用戶完成指定的任務,判斷當前登錄用戶是否已經關注指定的官方微信公眾號,如果關注會獲得相應的獎勵,為了彌補語言的匱乏,小明偷偷給大家上張圖:

app截圖

眾所周知,我們程序員第一次接收到之前沒做過的需求時,第一步肯定離不開搜查資料(我覺得國內的產品,百度就夠用),小明也不例外,花了大概五分鍾,一切就了然於胸,由此可見,程序員的搜商很重要 😂。ok,廢話少說,翠花,上菜!。

必備條件

  • 微信公眾平台-開發-基本配置-成為開發者,得到 appIdappSecret(注意:appSecret只展示一次,需保存下來,否則需要重置獲取),
  • 添加ip白名單,這個是為了提高公眾平台開發者接口調用的安全性,避免一旦開發者ID和密碼泄露后給帳號造成損失。對調用“獲取access_token”接口增加IP白名單校驗:只有將IP地址設置為公眾號的IP白名單,才能成功調用該接口。
  • 微信認證通過,擁有獲取用戶基本信息的權限(注意:如果帳號主體為個人,是無法開通微信認證的);

詳細步驟

獲取access_token

https請求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

參數說明

參數 是否必須 說明
grant_type 獲取access_token填寫client_credential
appid 第三方用戶唯一憑證
secret 第三方用戶唯一憑證密鑰,即appsecret

返回說明

正常情況下,微信會返回下述JSON數據包給公眾號:

{"access_token":"ACCESS_TOKEN","expires_in":7200}

參數說明

參數 說明
access_token 獲取到的憑證
expires_in 憑證有效時間,單位:秒

錯誤時微信會返回錯誤碼等信息,JSON數據包示例如下(該示例為AppID無效錯誤):

{"errcode":40013,"errmsg":"invalid appid"}

返回碼說明

返回碼 說明
-1 系統繁忙,此時請開發者稍候再試
0 請求成功
40001 AppSecret錯誤或者AppSecret不屬於這個公眾號,請開發者確認AppSecret的正確性
40002 請確保grant_type字段值為client_credential
40164 調用接口的IP地址不在白名單中,請在接口IP白名單中進行設置。(小程序及小游戲調用不要求IP地址在白名單內。)

詳情查看官方文檔-獲取access_token: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

獲取用戶openId或者unionId

在關注者與公眾號產生消息交互后,公眾號可獲得關注者的OpenID(說明:OpenID就是加密后的微信號,每個用戶對每個公眾號的OpenID是唯一的。對於不同公眾號,同一用戶的openid不同)。特別需要注意的是,如果開發者擁有多個移動應用、網站應用和公眾帳號,可通過獲取用戶基本信息中的unionid來區分用戶的唯一性,因為只要是同一個微信開放平台帳號下的移動應用、網站應用和公眾帳號,用戶的unionid是唯一的。換句話說,同一用戶,對同一個微信開放平台下的不同應用,unionid是相同的。因此,如果要判斷當前登陸app的微信用戶是否關注官方微信公眾號,我們要使用的是unionId。需要前往微信開放平台(open.weixin.qq.com)綁定公眾號后,才可利用UnionID機制來滿足上述需求。

根據前兩個步驟獲得的信息(access_token和openId或者unionId),調用微信接口獲取用戶基本信息

完整的用戶基本信息包括昵稱、頭像、性別、所在城市、語言和關注時間等。
接口調用請求說明:

https請求方式: GET
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

參數說明

參數 是否必須 說明
access_token 調用接口憑證
openid 普通用戶的標識,對當前公眾號唯一
lang 返回國家地區語言版本,zh_CN 簡體,zh_TW 繁體,en 英語

返回說明

正常情況下,微信會返回下述JSON數據包給公眾號:

{
    "subscribe": 1, //這就是我們想要的值哈,解釋如下表格
    "openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M", 
    "nickname": "Band", 
    "sex": 1, 
    "language": "zh_CN", 
    "city": "廣州", 
    "province": "廣東", 
    "country": "中國", 
    "headimgurl":"http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
    "subscribe_time": 1382694957,
    "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
    "remark": "",
    "groupid": 0,
    "tagid_list":[128,2],
    "subscribe_scene": "ADD_SCENE_QR_CODE",
    "qr_scene": 98765,
    "qr_scene_str": ""
}

參數說明

參數 說明
subscribe 用戶是否訂閱該公眾號標識,值為0時,代表此用戶沒有關注該公眾號,拉取不到其余信息。
openid 用戶的標識,對當前公眾號唯一
nickname 用戶的昵稱
sex 用戶的性別,值為1時是男性,值為2時是女性,值為0時是未知
city 用戶所在城市

……

錯誤時微信會返回錯誤碼等信息,JSON數據包示例如下(該示例為AppID無效錯誤):

{"errcode":40013,"errmsg":"invalid appid"}

詳情查看官方文檔-獲取用戶基本信息 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839

好了,以上就是今天小明整理給大家的有關公眾號開發的文檔。歡迎大家多多交流學習。

歡迎關注微信公眾號,獲取更多資源

程序員小明


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM