1. 程式人生 > >小程式 登入流程

小程式 登入流程

一、前言

自從小程式橫空出世,公司的很多 app、pc 產品,都有了一個“體驗版” —— 小程式。
小程式的後臺,和其他端的基本一致,有如下幾點不同:
① 使用 HTTPS 協議
② 登入多瞭解密流程

二、具體操作

1、小程式前端呼叫wx.login()方法,得到code、encryptedData、iv。將這三個傳送後端。

2、後端執行兩步:

(1)使用code、appid、appsecret呼叫微信api:
https://api.weixin.qq.com/sns/jscode2session?appid=&secret=&js_code=&grant_type=authorization_code

得到openid、session_key、unionid

(2)使用session_key和encryptedData解密得到使用者資訊

其中,encryptedData是Base64加密過的使用者資訊、session_key是金鑰、iv是偏移量。

解密方法,如:

https://www.jb51.net/article/117352.html
https://www.cnblogs.com/itliucheng/p/5065619.html

3、將資料插入資料庫,並返回給前端

三、幾點說明:

1、session_key的處理:
openid就是微信使用者id,可以用這個id來區分不同的微信使用者
session_key則是微信伺服器給開發者伺服器頒發的身份憑證,開發者可以用session_key請求微信伺服器其他介面來獲取一些其他資訊,由此可以看到,session_key不應該洩露或者下發到小程式前端。
redis中記錄: openid、session_key鍵值對,當需要請求微信服務時,再通過session_key去請求。

2、UnionID機制說明
如果開發者擁有多個移動應用、網站應用、和公眾帳號(包括小程式),可通過unionid來區分使用者的唯一性,因為只要是同一個微信開放平臺帳號下的移動應用、網站應用和公眾帳號(包括小程式),使用者的unionid是唯一的。換句話說,同一使用者,對同一個微信開放平臺下的不同應用,unionid是相同的。

3、獲取使用者資訊 正常返回值內容如下:

{
    openId: "oGZUI0egBJY1zhBYw2KhdUfwVJJE",
    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" } }

如果返回欄位中沒有返回 unionId,需要將小程式和公眾號繫結到同一開放平臺才可以獲取到

為保證同一個使用者在APP/小程式等登入得到的資訊一致,使用uuid作為微信平臺的使用者標識id