背景
最近,小明在參與app改版時,有一個業務場景是:用戶完成指定的任務,判斷當前登錄用戶是否已經關注指定的官方微信公眾號,如果關注會獲得相應的獎勵,為了彌補語言的匱乏,小明偷偷給大家上張圖:
眾所周知,我們程序員第一次接收到之前沒做過的需求時,第一步肯定離不開搜查資料(我覺得國內的產品,百度就夠用),小明也不例外,花了大概五分鍾,一切就了然於胸,由此可見,程序員的搜商很重要 😂。ok,廢話少說,翠花,上菜!。
必備條件
- 微信公眾平台-開發-基本配置-成為開發者,得到
appId
和appSecret
(注意: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
好了,以上就是今天小明整理給大家的有關公眾號開發的文檔。歡迎大家多多交流學習。