| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- const {
- ERROR
- } = require('../../common/error')
- const {
- initWeixin
- } = require('../../lib/third-party/index')
- const {
- saveWeixinUserKey,
- saveSecureNetworkCache
- } = require('../../lib/utils/weixin')
- const loginByWeixin = require('../login/login-by-weixin')
- /**
- * 微信安全网络握手
- * @tutorial https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#set-push-cid
- * @param {object} params
- * @param {string} params.code 微信登录返回的code
- * @param {boolean} params.callLoginByWeixin 是否同时调用一次微信登录
- * @returns
- */
- module.exports = async function (params = {}) {
- const schema = {
- code: 'string',
- callLoginByWeixin: {
- type: 'boolean',
- required: false
- }
- }
- this.middleware.validate(params, schema)
- let platform = this.clientPlatform
- if (platform !== 'mp-weixin') {
- throw new Error(`[secureNetworkHandshake] platform ${platform} is not supported`)
- }
- const {
- code,
- callLoginByWeixin = false
- } = params
- if (callLoginByWeixin) {
- return loginByWeixin.call(this, {
- code,
- secureNetworkCache: true
- })
- }
-
- const weixinApi = initWeixin.call(this)
- let getWeixinAccountResult
- try {
- getWeixinAccountResult = await weixinApi.code2Session(code)
- } catch (error) {
- console.error(error)
- throw {
- errCode: ERROR.GET_THIRD_PARTY_ACCOUNT_FAILED
- }
- }
- const {
- openid,
- unionid,
- sessionKey // 微信小程序用户sessionKey
- } = getWeixinAccountResult
- await saveSecureNetworkCache.call(this, {
- code,
- openid,
- unionid,
- sessionKey
- })
- await saveWeixinUserKey.call(this, {
- openid,
- sessionKey
- })
-
- return {
- errCode: 0
- }
- }
|