UNPKG

mtl-js-sdk

Version:

ynf-fw-mtl-api

115 lines (101 loc) 4.5 kB
/* * @Author: liucongw * @Date: 2023-12-13 15:53:17 * @LastEditors: wangyingliang wangyingliang@yonyou.com * @LastEditTime: 2025-09-02 20:31:48 * @FilePath: /mtl-api-project/src/platforms/dingtalk/dd.proxy.js * @Description: */ import permission from '../../common/permission' const ddGetticketUrl = `${location.origin}/iuap-yonbuilder-mobile/rest/v2/mobile/dingtalk/signature` /** * @description: 钉钉平台 JSSDK 鉴权 * @param {String} url - getTicket 接口地址 * @param {String} pageUrl - 待授权网页 url * @param {String} agentId - 企业内部应用 AgentId 必传 * @param {String} corpId - 企业 ID 必传 * @param {String} appId - 企业内部应用的 Client ID 必传 * @param {String} secret - 企业内部应用的 Client Secret 必传 * @param {String[]} apiList - 待授权 api 列表 * @param {Function} success - 鉴权成功执行 * @param {Function} fail - 鉴权失败执行 */ function configPermission(params) { const defaultApiList = [ // 默认授权 api 列表 "device.base.getUUID", "biz.util.chooseImage", "device.geolocation.get", "biz.map.view", "device.audio.startRecord", "device.audio.stopRecord", "device.audio.onRecordEnd", "device.audio.play", "device.audio.pause", "device.audio.resume", "device.audio.stop", "device.audio.onPlayEnd" ] // 增加从 localstorage 和 url 中获取鉴权参数的逻辑 const localParams = permission.getConfigParams() // 获取 ticket 地址 let serverUrl = params?.url || localParams?.url || ddGetticketUrl // 调用config接口的当前网页url let url = encodeURIComponent(window.location.href.split("#")[0]) if ((params?.pageUrl && params?.pageUrl !== "") || (localParams?.pageUrl && localParams?.pageUrl !== "")) { url = encodeURIComponent(params?.pageUrl || localParams?.pageUrl) } const appId = params?.appId || params?.appid || params?.aKey || localParams?.appId || localParams?.appid || localParams?.aKey if (!appId || appId === "") { params?.fail && params?.fail({ code: -1, msg: "appId is null!" }) return } const agentId = params?.agentId || localParams?.agentId const sKey = params?.secret || params?.sKey || localParams?.secret || localParams?.sKey const corpId = params?.corpId || localParams?.corpId // 处理参数 serverUrl = `${serverUrl}?url=${url}&appId=${agentId}&appKey=${appId}&appSecret=${sKey}` // 第三方平台私有化场景下, 需要指定第三方平台部署域名 const domain = params?.domain || localParams?.domain if (domain && domain !== "") { serverUrl = `${serverUrl}&domain=${domain}` } let apiList = defaultApiList if (params?.apiList) { apiList = [...new Set([...apiList, ...defaultApiList])] } console.log("Authorized API List is ", apiList) fetch(serverUrl).then((response) => response.json().then((res) => { console.log("getTicket res: ", res) if (res?.result?.appid) { const { appid, noncestr, timestamp, signature } = res?.result window.dd?.config({ agentId: appid, // 必填,微应用ID corpId, // 必填,企业ID timeStamp: timestamp, // 必填,生成签名的时间戳 nonceStr: noncestr, // 必填,自定义固定字符串。 signature, // 必填,签名 type: 0, // 选填。0表示微应用的jsapi,1表示服务窗的jsapi;不填默认为0。该参数从dingtalk.js的0.8.3版本开始支持 jsApiList: apiList // 必填,需要使用的jsapi列表,注意:不要带dd。 }) window.dd?.error((err) => { console.log("config failed: ", err) params?.fail && params?.fail(err) }) // 该方法必须带上,用来捕获鉴权出现的异常信息,否则不方便排查出现的问题 window.dd?.ready(() => { console.log("config ready") params?.success && params?.success() }) } else { console.log("ticket failed: ", res) params?.fail && params?.fail(res) } })).catch((err) => { console.log("getTicket failed: ", err) params?.fail && params?.fail(err) }) } export default { configPermission }