wxapp django for wafer
name: wxapp
name: wafer function: save wxapp login session info
AppInfo 保存会话服务所需要的配置项。
| Field | Type | Null | key | Extra |
|---|---|---|---|---|
| title | varchar(30) | NO | NO | 小程序名称 |
| appid | varchar(200) | NO | 申请微信小程序开发者时,微信分配的 appId | |
| secret | varchar(300) | NO | 申请微信小程序开发者时,微信分配的 appSecret | |
| login_duration | int(11) | NO | 登录过期时间,单位为天,默认 30 天 | |
| session_duration | int(11) | NO | 会话过期时间,单位为秒,默认为 2592000 秒(即30天) |
会话记录 SessionInfo 保存每个会话的数据。
| Field | Type | Null | key | Extra |
|---|---|---|---|---|
| uuid | varchar(100) | NO | 会话 uuid | |
| skey | varchar(100) | NO | 会话 Skey | |
| create_time | datetime | NO | 会话创建时间,用于判断会话对应的 open_id 和 session_key 是否过期(是否超过 `cAppInfo` 表中字段 `login_duration` 配置的天数) | |
| last_visit_time | datetime | NO | 最近访问时间,用于判断会话是否过期(是否超过 `cAppInfo` 表中字段 `session_duration` 的配置的秒数) | |
| open_id | varchar(100) | NO | MUL | 微信服务端返回的 `open_id` 值 |
| session_key | varchar(100) | NO | 微信服务端返回的 `session_key` 值 | |
| user_info | varchar(2048) | YES | 已解密的用户数据 |
会话服务器提供 HTTP 接口来实现会话管理,下面是协议说明。
- 协议类型:
HTTP - 传输方式:
POST - 编码类型:
UTF-8 - 编码格式:
JSON
请求示例:
mina/login 处理用户登录请求。
请求数据:
code- 微信小程序客户端获取的codeencrypt_data- 微信小程序客户端获取的encryptedData,可为空iv- 微信小程序客户端获取的解密iv,可为空app_id- 所属小程序的id(数据库中存储的主键id)
使用示例:
function login_server(loginResult, userResult) { var app = getApp(); wx.request({ url: config.s_url+'login', data: {code: loginResult.code, encrypt_data: userResult.encryptedData, iv: userResult.iv, app_id:app.globalData.app_id}, method: 'POST', success: function(res){ if(res.data.ok=='success') { wx.setStorageSync('skey', res.data.data.skey); wx.setStorageSync('uuid', res.data.data.uuid) console.log(res.data.msg||'成功获取授权数据'); } else { login(); } }, fail: function() { console.log('get skey error'); } }); } function login() { wx.login({ success: function (loginResult) { wx.getUserInfo({ success: function (userResult) { //app.globalData.userInfo = userResult.userInfo; login_server(loginResult, userResult); }, fail: function () { console.log('用户未同意授权'); var userResult = {encrypt_data:'', iv:''}; login_server(loginResult, userResult); } }) }, fail: function() { tip('微信用户未登录,部分功能无法使用!'); } }); }
响应数据:
ok- 请求成功(success)或失败(fail)msg- 成功提示或失败原因data- {uuid,skey,user_info,duration}
使用 mina/auth 接口检查用户登录状态。
请求数据:
uuid- 微信小程序客户端Storage[uuid]skey- 微信小程序客户端Storage[skey]app_id- 所属小程序的id(数据库中存储的主键id)
使用示例:
(每次业务操作均验证skey、uuid,建议在业务服务中向mina/auth发起请求)
load_fan: function () { var that = this; var app_id= app.globalData.app_id; var skey = wx.getStorageSync('skey'); var uuid = wx.getStorageSync('uuid'); wx.request({ url: config.base_url+'fan', data: {app_id: app_id, skey: skey, uuid: uuid}, method: 'POST', success: function(res){ if (res.data.ok == 'success') { var f = res.data.f; that.setData({user:f}); console.log(res.data.msg||'成功获取用户信息'); } }, fail: function() { util.tip('load user name and mobile fail'); } }); }
响应数据:
ok- 请求成功(success)或失败(fail)msg- 成功提示或失败原因data- {user_info}