From 8bb3416f60f1b0a44d38a2c15e0265bdab065a6e Mon Sep 17 00:00:00 2001 From: wangyaqi Date: Wed, 27 Jul 2022 16:27:14 +0800 Subject: [PATCH] feat: getH5WeixinConfig --- .../cloudfunctions/uni-id-co/common/utils.js | 11 +++- .../cloudfunctions/uni-id-co/index.obj.js | 11 +++- .../module/dev/get-supported-login-type.js | 2 +- .../uni-id-co/module/login/login-by-weixin.js | 2 +- .../module/utils/get-h5-weixin-config.js | 52 +++++++++++++++++++ .../uni-id-co/module/utils/index.js | 3 +- 6 files changed, 75 insertions(+), 6 deletions(-) create mode 100644 uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/utils/get-h5-weixin-config.js diff --git a/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/common/utils.js b/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/common/utils.js index 4d4d6dd..432404b 100644 --- a/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/common/utils.js +++ b/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/common/utils.js @@ -163,6 +163,14 @@ function coverMobile (mobile) { return mobile.slice(0, 3) + '****' + mobile.slice(7) } +function getNonceStr (length = 16) { + let str = '' + while (str.length < length) { + str += Math.random().toString(32).substring(2) + } + return str.substring(0, length) +} + module.exports = { getType, isValidString, @@ -177,5 +185,6 @@ module.exports = { snake2camelJson, getExtension, getVerifyCode, - coverMobile + coverMobile, + getNonceStr } diff --git a/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/index.obj.js b/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/index.obj.js index 8e0de2e..d8119f5 100644 --- a/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/index.obj.js +++ b/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/index.obj.js @@ -54,7 +54,8 @@ const { } = require('./module/verify/index') const { refreshToken, - setPushCid + setPushCid, + getH5WeixinConfig } = require('./module/utils/index') const { getInvitedUser, @@ -480,5 +481,11 @@ module.exports = { * @tutorial https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#get-supported-login-type * @returns */ - getSupportedLoginType + getSupportedLoginType, + /** + * 获取微信公众号config参数 + * @tutorial https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#get-h5-weixin-config + * @returns + */ + getH5WeixinConfig } diff --git a/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/dev/get-supported-login-type.js b/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/dev/get-supported-login-type.js index 62fc166..476e234 100644 --- a/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/dev/get-supported-login-type.js +++ b/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/dev/get-supported-login-type.js @@ -50,7 +50,7 @@ const loginTypeTester = { * @tutorial https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#get-supported-login-type * @returns */ -module.exports = function () { +module.exports = async function () { const supportedLoginType = [ 'username-password', 'mobile-password', diff --git a/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/login/login-by-weixin.js b/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/login/login-by-weixin.js index e1739a2..c57827c 100644 --- a/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/login/login-by-weixin.js +++ b/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/login/login-by-weixin.js @@ -88,7 +88,7 @@ module.exports = async function (params = {}) { wx_unionid: unionid } }) - const extraData = {} + const extraData = { } if (type === 'register' && weixinPlatform !== 'mp') { const { nickname, diff --git a/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/utils/get-h5-weixin-config.js b/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/utils/get-h5-weixin-config.js new file mode 100644 index 0000000..67182c1 --- /dev/null +++ b/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/utils/get-h5-weixin-config.js @@ -0,0 +1,52 @@ +const { + getWeixinPlatform +} = require('../../lib/utils/weixin') +const { + getNonceStr +} = require('../../common/utils') +const { + createHash +} = require('crypto') + +/** + * 获取微信公众号config参数 + * @tutorial https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#get-h5-weixin-config + * @returns + */ +module.exports = async function (params) { + const schema = { + url: 'string' + } + this.middleware.validate(params, schema) + const { + url + } = params + const oauthConfig = this.configUtils.getOauthConfig({ + provider: 'weixin' + }) + const bridge = require('uni-open-bridge-common') + const { + appId + } = this.getClientInfo() + const weixinPlatform = getWeixinPlatform.call(this) + const ticket = await bridge.getWeixinTicket({ + appId, + platform: weixinPlatform + }) + const signContent = { + jsapi_ticket: ticket, + noncestr: getNonceStr(), + timestamp: Math.floor(Date.now() / 1000) + '', + url: url.split('#')[0] + } + const signStr = Object.keys(signContent).sort().reduce(function (str, key) { + return str + key + '=' + signContent[key] + '&' + }, '').replace(/&$/, '') + const signature = createHash('sha1').update(signStr, 'utf8').digest('hex') + return { + appId: oauthConfig.appid, // 公众号的唯一标识 + timestamp: signContent.timestamp, // 生成签名的时间戳 + nonceStr: signContent.noncestr, // 生成签名的随机串 + signature // 签名 + } +} diff --git a/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/utils/index.js b/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/utils/index.js index 11729f6..90f9fd7 100644 --- a/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/utils/index.js +++ b/uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/utils/index.js @@ -1,4 +1,5 @@ module.exports = { refreshToken: require('./refresh-token'), - setPushCid: require('./set-push-cid') + setPushCid: require('./set-push-cid'), + getH5WeixinConfig: require('./get-h5-weixin-config') } -- GitLab