週末無聊在家折騰點小技術,順便也用用昨晚在微信羣裏聽的creator教學是否好用。做了一個小小的小遊戲demo,然後想自己搭建服務器,把用戶基本信息和有效數據保存起來。執行到這裏的時候就去找相關文檔和博客瞭解詳情,但是不找不知道,一找嚇一跳,說得技術好像都有點老套,故此結合我今天實踐的東西寫一點點小結:
目前的狀態,最最最高級別可用的是openid和unionid,對於小遊戲而言只關注openid即可。微信有一套自己的用戶隱私保護規則,通過openid無論如何都無法獲取到微信號,這裏特此說明下。
那麼如何一步一步獲得openid呢?我簡化成以下三步驟:
1、獲得登錄code:
wx.login({
success:function(res){
console.log(res);
}
這裏無論如何都可以獲取到一個code參數,這個臨時變量要保存一下,後面會用到,實際返回結果如下:
{errMsg: "login:ok", code: "011XVuNa2ElJUJ09tBLa2FZFNa2XVuNQ"}
注意這裏的code返回結果是動態變化的,我們要隨時更新。
2、根據code獲取session_key和openid:
獲取到的code要給你自己搭建的小遊戲服務器發一條消息,服務器再把客戶端帶上來的code發送給微信小程序官網請求session_key和openid,http請求格式如下:
https://api.weixin.qq.com/sns/jscode2session?appid=你的小程序appid&secret=小程序祕鑰&js_code=微信登錄時的code&grant_type=authorization_code
執行正確之後會返回一個json表格,大概如下:
{"session_key":"mF\/qMjVt01swYfbZOfgchg==","openid":"os3x85UNxmJbi02tNB36L5L0PJcc"}
這裏的session_key也是動態變化的,唯有openid爲唯一數據,我們數據庫可以把這個openid作爲唯一id用(不考慮遷移情況)
3、根據session_key和小遊戲客戶端的wx.getUserInfo執行返回的encryptedData和iv 以及你自己的小遊戲appId解析出來實際用戶信息,解析正確結果大致如下:
// 解密後的數據爲
data = {
"nickName": "Band",
"gender": 1,
"language": "zh_CN",
"city": "Guangzhou",
"province": "Guangdong",
"country": "CN",
"avatarUrl": "http://wx.qlogo.cn/mmopen/vi_32/aSKcBBPpibyKNicHNTMM0qJVh8Kjgiak2AHWr8MHM4WgMEm7GFhsf8OYrySdbvAMvTsw3mo8ibKicsnfN5pRjl1p8HQ/0",
"unionId": "ocMvos6NjeKLIBqg5Mr9QjxrP1FA",
"watermark": {
"timestamp": 1477314187,
"appid": "wx4f4bc4dec97d474b"
}
}
通過一上三步驟可以獲取用戶基礎數據,對於小遊戲來說基本夠用。
點擊下載解析demo:多語言解密算法下載
微信小遊戲登錄流程可參考:Cocos creator微信小遊戲登錄以及獲取授權信息
小遊戲中openid具體使用方式還沒完善,後續有空再加上,今天先到這裏。
歡迎探討有關微信小遊戲的製作和運營~。