1. 程式人生 > >靜默獲取使用者基本資訊的一種方法

靜默獲取使用者基本資訊的一種方法

首先我們需要獲取openid,

1.獲取code

這裡寫圖片描述

下面是PHP語言,寫在getcode這個頁面裡

$code = $_GET['code'];//獲取code
$weixin =  file_get_contents("https://api.weixin.qq.com/sns/oauth2/access_token?appid=這裡是你的APPID&secret=這裡是你的SECRET&code=".$code."&grant_type=authorization_code");//通過code換取網頁授權access_token
$jsondecode = json_decode($weixin
); //JSON格式的字串進行編碼 $array = get_object_vars($jsondecode);//轉換成陣列 $openid = $array['openid'];//輸出openid

2.通過token 獲取使用者基本資訊

在關注者與公眾號產生訊息互動後,公眾號可獲得關注者的OpenID(加密後的微訊號,每個使用者對每個公眾號的OpenID是唯一的。對於不同公眾號,同一使用者的openid不同)。公眾號可通過本介面來根據OpenID獲取使用者基本資訊,包括暱稱、頭像、性別、所在城市、語言和關注時間。

請注意,如果開發者有在多個公眾號,或在公眾號、移動應用之間統一使用者帳號的需求,需要前往微信開放平臺(open.weixin.qq.com)繫結公眾號後,才可利用UnionID機制來滿足上述需求。

UnionID機制說明:

開發者可通過OpenID來獲取使用者基本資訊。特別需要注意的是,如果開發者擁有多個移動應用、網站應用和公眾帳號,可通過獲取使用者基本資訊中的unionid來區分使用者的唯一性,因為只要是同一個微信開放平臺帳號下的移動應用、網站應用和公眾帳號,使用者的unionid是唯一的。換句話說,同一使用者,對同一個微信開放平臺下的不同應用,unionid是相同的。
獲取使用者基本資訊(包括UnionID機制)

開發者可通過OpenID來獲取使用者基本資訊。請使用https協議。

介面呼叫請求說明

引數 是否必須 說明
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://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0“,
“subscribe_time”: 1382694957,
“unionid”: ” o6_bmasdasdsad6_2sgVt7hMZOPfL”
“remark”: “”,
“groupid”: 0
}
引數說明

引數 說明
subscribe 使用者是否訂閱該公眾號標識,值為0時,代表此使用者沒有關注該公眾號,拉取不到其餘資訊。
openid 使用者的標識,對當前公眾號唯一
nickname 使用者的暱稱
sex 使用者的性別,值為1時是男性,值為2時是女性,值為0時是未知
city 使用者所在城市
country 使用者所在國家
province 使用者所在省份
language 使用者的語言,簡體中文為zh_CN
headimgurl 使用者頭像,最後一個數值代表正方形頭像大小(有0、46、64、96、132數值可選,0代表640*640正方形頭像),使用者沒有頭像時該項為空。若使用者更換頭像,原有頭像URL將失效。
subscribe_time 使用者關注時間,為時間戳。如果使用者曾多次關注,則取最後關注時間
unionid 只有在使用者將公眾號繫結到微信開放平臺帳號後,才會出現該欄位。詳見:獲取使用者個人資訊(UnionID機制)
remark 公眾號運營者對粉絲的備註,公眾號運營者可在微信公眾平臺使用者管理介面對粉絲新增備註
groupid 使用者所在的分組ID
錯誤時微信會返回錯誤碼等資訊,JSON資料包示例如下(該示例為AppID無效錯誤):

{“errcode”:40013,”errmsg”:”invalid appid”}
全域性返回碼說明

使用網頁除錯工具除錯該介面

批量獲取使用者基本資訊

開發者可通過該介面來批量獲取使用者基本資訊。最多支援一次拉取100條。

介面呼叫請求說明

{
“user_list”: [
{
“openid”: “otvxTs4dckWG7imySrJd6jSi0CWE”,
“lang”: “zh-CN”
},
{
“openid”: “otvxTs_JZ6SEiP0imdhpi50fuSZg”,
“lang”: “zh-CN”
}
]
}
引數說明

引數 是否必須 說明
openid 是 使用者的標識,對當前公眾號唯一
lang 否 國家地區語言版本,zh_CN 簡體,zh_TW 繁體,en 英語,預設為zh-CN
返回說明

正常情況下,微信會返回下述JSON資料包給公眾號(示例中為一次性拉取了2個openid的使用者基本資訊,第一個是已關注的,第二個是未關注的):

{
“user_info_list”: [
{
“subscribe”: 1,
“openid”: “otvxTs4dckWG7imySrJd6jSi0CWE”,
“nickname”: “iWithery”,
“sex”: 1,
“language”: “zh_CN”,
“city”: “Jieyang”,
“province”: “Guangdong”,
“country”: “China”,
“headimgurl”: “http://wx.qlogo.cn/mmopen/xbIQx1GRqdvyqkMMhEaGOX802l1CyqMJNgUzKP8MeAeHFicRDSnZH7FY4XB7p8XHXIf6uJA2SCunTPicGKezDC4saKISzRj3nz/0“,
“subscribe_time”: 1434093047,
“unionid”: “oR5GjjgEhCMJFyzaVZdrxZ2zRRF4”,
“remark”: “”,
“groupid”: 0
},
{
“subscribe”: 0,
“openid”: “otvxTs_JZ6SEiP0imdhpi50fuSZg”,
“unionid”: “oR5GjjjrbqBZbrnPwwmSxFukE41U”,
}
]
}
引數說明

引數 說明
subscribe 使用者是否訂閱該公眾號標識,值為0時,代表此使用者沒有關注該公眾號,拉取不到其餘資訊,只有openid和UnionID(在該公眾號繫結到了微信開放平臺賬號時才有)。
openid 使用者的標識,對當前公眾號唯一
nickname 使用者的暱稱
sex 使用者的性別,值為1時是男性,值為2時是女性,值為0時是未知
city 使用者所在城市
country 使用者所在國家
province 使用者所在省份
language 使用者的語言,簡體中文為zh_CN
headimgurl 使用者頭像,最後一個數值代表正方形頭像大小(有0、46、64、96、132數值可選,0代表640*640正方形頭像),使用者沒有頭像時該項為空。若使用者更換頭像,原有頭像URL將失效。
subscribe_time 使用者關注時間,為時間戳。如果使用者曾多次關注,則取最後關注時間
unionid 只有在使用者將公眾號繫結到微信開放平臺帳號後,才會出現該欄位。詳見:獲取使用者個人資訊(UnionID機制)
remark 公眾號運營者對粉絲的備註,公眾號運營者可在微信公眾平臺使用者管理介面對粉絲新增備註
groupid 使用者所在的分組ID
錯誤時微信會返回錯誤碼等資訊,JSON資料包示例如下(該示例為AppID無效錯誤):

3.token 訪問次數限制處理

微信對於token 每天的訪問限制是 2000 次 ,每個token 過期時間是7200秒 ,我們可以將token 存在
session 或者是 redius 這樣就能解決token 限制問題

memcached 和 redis 的set命令都有expire引數,可以設定key的過期時間。但是redis是一個可以對資料持久化的key-value database,它的key過期策略還是和memcached有所不同的。梳理,整理如下:

redis通過expire命令來設定key的過期時間。
語法:redis.expire(key, expiration)

  1. 在小於2.1.3的redis版本里,只能對key設定一次expire。redis2.1.3和之後的版本里,可以多次對key使用expire命令,更新key的expire time。
    www.186886.top liulei.186886.top