微信小程式之登入,模板訊息,服務通知
阿新 • • 發佈:2019-01-04
1.登入流程圖
1).前端呼叫wx.login()獲取code
2).前端呼叫wx.request()傳送code給後端
(會話金鑰)後,生成自己自定義的使用者登入標識:my_session_key,並儲存到Mongo中 在後面的使用者檢驗中,均使用my_session_key進行驗證
2.獲取使用者資訊流程:
前端呼叫wx.getUserInfo
流程:先申請許可權,再獲取資訊,所以開始要進行是否擁有許可權的判斷
1).my_session_key,rawData,signature全部非空
1).使用者點選按鈕,觸發前端呼叫後端getwake介面,提供my_session_key,formid(表單id),id(商品id),callback
2).後端進行處理後返回給前端處理結果
根據my_session_key 獲取mongo,增加detail_id,form_id後,將資料寫入資料庫.並將是否成功的結果返回給前端
5. 服務通知
1).前端請求介面,引數為refresh,callback(可空)
2).後端處理請求
得到access_token
設定請求url
得到資料庫中,尚未提醒過的事件的資訊,
提醒規則: 根據商品id獲得商品資訊,判斷商品秒殺開始時間與現在的時間差是否小於3分鐘,若是,則提醒,不是則跳過
得到符合提醒規則的事件,根據取得的商品資訊填寫模板資訊,封裝成引數進行post請求
根據響應引數判斷是否成功提醒,成功後更新資料庫資訊
1).前端呼叫wx.login()獲取code
2).前端呼叫wx.request()傳送code給後端
3).後端根據appid(後臺取得)+appsecret(後臺取得)+code(前端傳送)傳送到微信介面,得到session_key+openid等
介面地址:https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
4).後端接收openid(使用者唯一標識,私密)與session_key2.獲取使用者資訊流程:
前端呼叫wx.getUserInfo
流程:先申請許可權,再獲取資訊,所以開始要進行是否擁有許可權的判斷
// 登入 wx.login({ success: res => { // 傳送 res.code 到後臺換取 openId, sessionKey, unionId } }) // wx.openSetting({ // }) // 獲取使用者資訊 wx.getSetting({ success: res => { if (res.authSetting['scope.userInfo']) { // 已經授權,可以直接呼叫 getUserInfo 獲取頭像暱稱,不會彈框 wx.getUserInfo({ success: res => { //console.log(112233); // 可以將 res 傳送給後臺解碼出 unionId this.globalData.userInfo = res.userInfo // 由於 getUserInfo 是網路請求,可能會在 Page.onLoad 之後才返回 // 所以此處加入 callback 以防止這種情況 if (this.userInfoReadyCallback) { this.userInfoReadyCallback(res) } } }) }else{ wx.authorize({ scope: 'scope.userInfo', success: res => { console.log(111111); wx.getUserInfo({ success: res => { // 可以將 res 傳送給後臺解碼出 unionId this.globalData.userInfo = res.userInfo // 由於 getUserInfo 是網路請求,可能會在 Page.onLoad 之後才返回 // 所以此處加入 callback 以防止這種情況 if (this.userInfoReadyCallback) { this.userInfoReadyCallback(res) } } }) }, fail:function(res){ console.log(222); } }) } } })
3. 身份校驗
提供my_session_key,rawData,signature,callback 後端進行校驗
後端校驗:1).my_session_key,rawData,signature全部非空
2).根絕my_session_key,從Mongo中查詢是否存在,存在則使用者已登入,傳送success狀態碼,失敗則使用者未登入或登入過期,傳送fault狀態碼
4. 提醒我1).使用者點選按鈕,觸發前端呼叫後端getwake介面,提供my_session_key,formid(表單id),id(商品id),callback
2).後端進行處理後返回給前端處理結果
根據my_session_key 獲取mongo,增加detail_id,form_id後,將資料寫入資料庫.並將是否成功的結果返回給前端
3).計劃任務定時輪詢,將符合要求的提醒事件傳送服務通知.(伺服器定時任務)
1).前端請求介面,引數為refresh,callback(可空)
2).後端處理請求
得到access_token
設定請求url
得到資料庫中,尚未提醒過的事件的資訊,
提醒規則: 根據商品id獲得商品資訊,判斷商品秒殺開始時間與現在的時間差是否小於3分鐘,若是,則提醒,不是則跳過
得到符合提醒規則的事件,根據取得的商品資訊填寫模板資訊,封裝成引數進行post請求
根據響應引數判斷是否成功提醒,成功後更新資料庫資訊