module.exports = { /** * 用户登录(微信手机号授权) * @url user/pub/loginByWeixinPhoneNumber 前端调用的url参数地址 * @description 用户登录(微信授权) * data 请求参数 说明 * @param {String} encryptedData * @param {String} iv * @param {String} sessionKey * res 返回参数说明 * @param {Number} code 错误码,0表示成功 * @param {String} msg 详细信息 * @param {String} token 登录成功之后返回的token信息 * @param {String} tokenExpired token过期时间 */ main: async (event) => { let { data = {}, util, originalParam } = event; let { uniID, config, pubFun, vk , db, _ } = util; let { uid } = data; let res = {}; // 业务逻辑开始----------------------------------------------------------- let { nickname, avatar, gender, inviteCode, encryptedData, iv, sessionKey } = data; // 微信登录(未绑定任何账号时,会新建账号) res = await vk.openapi.weixin.decrypt.getPhoneNumber(data); if(res.code === 0){ let { mobile } = res; let code = vk.pubfn.random(6); // 指定操作类型,可选值为login、register,不传此参数时表现为手机号已注册则登录,手机号未注册则进行注册 let type; // 通过手机号登录 await uniID.setVerifyCode({ mobile, code, expiresIn:60, type:"login" }); res = await uniID.loginBySms({ mobile, code, type, inviteCode }); if(res.token){ if(res.type === "register"){ let wx_openid; let wx_unionid; let cacheKey = `sys-weixin-session2openid-${sessionKey}`; let openidCache = await vk.globalDataCache.get(cacheKey); if(vk.pubfn.isNotNull(openidCache)){ wx_openid = {}; wx_openid["mp-weixin"] = openidCache.openid; wx_unionid = openidCache.unionid; await vk.globalDataCache.del(cacheKey); } let mobileStr = mobile.substring(7); res.userInfo = await vk.baseDao.updateById({ dbName:"uni-id-users", id:res.uid, dataJson:{ nickname:nickname || `手机尾号${mobileStr}用户`, avatar, gender, wx_openid, wx_unionid }, getUpdateData:true }); } // 日志服务 const loginLogService = vk.require("service/user/util/login_log"); await loginLogService.add({ type: res.type, login_type: "weixinPhoneNumber", user_id: res.uid, context: originalParam.context },util); } } // 业务逻辑结束----------------------------------------------------------- return res; } }