From d5dd010f33b44800700748be36e8d5bbc03e867e Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Mon, 20 Feb 2023 13:48:38 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-616=20-=20"=D0=98?= =?UTF-8?q?=D0=BD=D1=82=D0=B5=D0=B3=D1=80=D0=B0=D1=86=D0=B8=D1=8F=20=D1=81?= =?UTF-8?q?=20=D0=AD=D0=94=D0=9E=20=D0=94=D0=98=D0=90=D0=94=D0=9E=D0=9A":?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8=20=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BD=D0=B5=D1=81=D0=BA=D0=BE=D0=BB=D1=8C=D0=BA=D0=B8=D1=85=20?= =?UTF-8?q?=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=B9=20=D1=80=D0=B0=D0=B7=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D1=87=D0=B8=D0=BA=D0=B0=20(diadic=5Fco?= =?UTF-8?q?nfig.js/SDDAUTH=5FAPI=5FCLIENT=5FID)=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=BD=D1=8B=D1=85=20=D0=BE=D1=80=D0=B3=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B9=20=D0=B8=20=D1=8E?= =?UTF-8?q?=D1=80=D0=B8=D0=B4=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D1=85=20?= =?UTF-8?q?=D0=BB=D0=B8=D1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/diadoc.js | 63 ++++++++++++++++++++++++++++++---------- modules/diadoc_config.js | 15 +++++++++- 2 files changed, 62 insertions(+), 16 deletions(-) diff --git a/modules/diadoc.js b/modules/diadoc.js index 394e6e7..c4a5de9 100644 --- a/modules/diadoc.js +++ b/modules/diadoc.js @@ -76,6 +76,27 @@ const addHours = (dDate, nHours) => { return new Date(dDate); }; +//Получение ключа разработчика по организации/принадлежности +const getAPIClientId = (nCompany, nJurPers = null) => { + //Ключи в diadoc_conf.js заданы + if (SDDAUTH_API_CLIENT_ID) { + //И это массив + if (Array.isArray(SDDAUTH_API_CLIENT_ID)) { + //Найдем значение в массиве + let keyFound = SDDAUTH_API_CLIENT_ID.find(keyItem => keyItem.nCompany === nCompany && keyItem.nJurPers === nJurPers); + //Найдено совпадение в массиве + if (keyFound) return keyFound.sAPIClientId; + else { + //Ищем с принадлежностью по умолчанию + keyFound = SDDAUTH_API_CLIENT_ID.find(keyItem => keyItem.nCompany === nCompany && !keyItem.nJurPers); + //Найдено совпадение в массиве + if (keyFound) return keyFound.sAPIClientId; + else return null; + } + } else return SDDAUTH_API_CLIENT_ID; + } else return null; +}; + //Проверка ключа разработчика const checkAPIClientId = sAPIClientId => { if (!sAPIClientId) { @@ -97,12 +118,14 @@ const beforeConnect = async prms => { const passAtribute = "password"; let surl = prms.options.url; surl = surl + "?" + "type=password"; + //Получим ключ разработчика + let sAPIClientId = getAPIClientId(prms.options.nCompany, prms.options.nJurPers); //Проверим ключ разработчика - checkAPIClientId(SDDAUTH_API_CLIENT_ID); + checkAPIClientId(sAPIClientId); //Сформируем запрос на аутентификацию return { options: { - headers: buildHeaders(SDDAUTH_API_CLIENT_ID), + headers: buildHeaders(sAPIClientId), url: surl, body: JSON.stringify({ [loginAtribute]: prms.service.sSrvUser, @@ -130,8 +153,10 @@ const afterConnect = async prms => { //Обработчик "До" отправки запроса на экспорт документа к сервису "ДИАДОК" const beforeMessagePost = async prms => { + //Получим ключ разработчика + let sAPIClientId = getAPIClientId(prms.options.nCompany, prms.options.nJurPers); //Проверим ключ разработчика - checkAPIClientId(SDDAUTH_API_CLIENT_ID); + checkAPIClientId(sAPIClientId); //Формируем запрос try { //Считаем токен доступа из контекста сервиса @@ -146,7 +171,7 @@ const beforeMessagePost = async prms => { //Формируем запрос для получения FromBoxId let rqpoptions = { uri: "https://diadoc-api.kontur.ru/GetMyOrganizations", - headers: buildHeaders(SDDAUTH_API_CLIENT_ID, sToken), + headers: buildHeaders(sAPIClientId, sToken), json: true }; let serverResp; @@ -179,7 +204,7 @@ const beforeMessagePost = async prms => { inn: prms.options.inn_cs, kpp: prms.options.kpp_cs }, - headers: buildHeaders(SDDAUTH_API_CLIENT_ID, sToken), + headers: buildHeaders(sAPIClientId, sToken), json: true }; try { @@ -204,7 +229,7 @@ const beforeMessagePost = async prms => { //Собираем и отдаём общий результат работы return { options: { - headers: buildHeaders(SDDAUTH_API_CLIENT_ID, sToken), + headers: buildHeaders(sAPIClientId, sToken), simple: false }, blMsg: Buffer.from(JSON.stringify(obj)) @@ -241,8 +266,10 @@ const afterMessagePost = async prms => { //Обработчик "До" отправки запроса на экспорт патча документа к сервису "ДИАДОК" const beforeMessagePatchPost = async prms => { + //Получим ключ разработчика + let sAPIClientId = getAPIClientId(prms.options.nCompany, prms.options.nJurPers); //Проверим ключ разработчика - checkAPIClientId(SDDAUTH_API_CLIENT_ID); + checkAPIClientId(sAPIClientId); //Формируем запрос try { //Считаем токен доступа из контекста сервиса @@ -257,7 +284,7 @@ const beforeMessagePatchPost = async prms => { //Собираем и отдаём общий результат работы return { options: { - headers: buildHeaders(SDDAUTH_API_CLIENT_ID, sToken), + headers: buildHeaders(sAPIClientId, sToken), simple: false }, blMsg: Buffer.from(JSON.stringify(obj)) @@ -294,8 +321,10 @@ const afterMessagePatchPost = async prms => { //Обработчик "До" отправки запроса на получение новых событий к сервису "ДИАДОК" const beforeEvent = async prms => { + //Получим ключ разработчика + let sAPIClientId = getAPIClientId(prms.options.nCompany, prms.options.nJurPers); //Проверим ключ разработчика - checkAPIClientId(SDDAUTH_API_CLIENT_ID); + checkAPIClientId(sAPIClientId); //Формируем запрос try { let sToken = null; //Токен доступа @@ -314,7 +343,7 @@ const beforeEvent = async prms => { //Формируем запрос для получения BoxId let rqpoptions = { uri: "https://diadoc-api.kontur.ru/GetMyOrganizations", - headers: buildHeaders(SDDAUTH_API_CLIENT_ID, sToken), + headers: buildHeaders(sAPIClientId, sToken), json: true }; try { @@ -379,7 +408,7 @@ const beforeEvent = async prms => { //Собираем и отдаём общий результат работы return { options: { - headers: buildHeaders(SDDAUTH_API_CLIENT_ID, sToken), + headers: buildHeaders(sAPIClientId, sToken), simple: false, url: surl, boxId: sBoxId @@ -418,8 +447,10 @@ const afterEvent = async prms => { //Обработчик "До" отправки запроса на загрузку вложения const beforeDocLoad = async prms => { + //Получим ключ разработчика + let sAPIClientId = getAPIClientId(prms.options.nCompany, prms.options.nJurPers); //Проверим ключ разработчика - checkAPIClientId(SDDAUTH_API_CLIENT_ID); + checkAPIClientId(sAPIClientId); //Формируем запрос try { //Считаем токен доступа из контекста сервиса @@ -484,7 +515,7 @@ const beforeDocLoad = async prms => { documentVersion: prms.options.documentVersion, titleIndex: prms.options.titleIndex }, - headers: buildHeaders(SDDAUTH_API_CLIENT_ID, sToken), + headers: buildHeaders(sAPIClientId, sToken), url: surl, simple: false }, @@ -544,8 +575,10 @@ const afterDocLoad = async prms => { //Обработчик "До" отправки запроса на удаление документа к сервису "ДИАДОК" const beforeDocDelete = async prms => { + //Получим ключ разработчика + let sAPIClientId = getAPIClientId(prms.options.nCompany, prms.options.nJurPers); //Проверим ключ разработчика - checkAPIClientId(SDDAUTH_API_CLIENT_ID); + checkAPIClientId(sAPIClientId); //Формируем запрос try { //Считаем токен доступа из контекста сервиса @@ -558,7 +591,7 @@ const beforeDocDelete = async prms => { //Собираем и отдаём общий результат работы return { options: { - headers: buildHeaders(SDDAUTH_API_CLIENT_ID, sToken), + headers: buildHeaders(sAPIClientId, sToken), simple: false } }; diff --git a/modules/diadoc_config.js b/modules/diadoc_config.js index 2148b74..460dc20 100644 --- a/modules/diadoc_config.js +++ b/modules/diadoc_config.js @@ -6,4 +6,17 @@ //----------------- // Интерфейс модуля //----------------- -exports.SDDAUTH_API_CLIENT_ID = ""; //Ключ разработчика (необходимо запросить у поставщика услуг ЭДО "ДИАДОК": "https://www.diadoc.ru/integrations/api") + +//Ключ разработчика (запрашивается у поставщика услуг ЭДО "ДИАДОК": "https://www.diadoc.ru/integrations/api") +//Если необходимо задать несколько ключей для разных организаций/юридических принадлежностей: +//SDDAUTH_API_CLIENT_ID = [ +// { nCompany: <Рег. номер организации 1>, +// nJurPers: <Рег. номер принадлежности 1 (null - для ключа по умолчанию для организации)>, +// sAPIClientId: "<Ключ разработчика 1>" }, +// { nCompany: <Рег. номер организации 2>, +// nJurPers: <Рег. номер принадлежности 2 (null - для ключа по умолчанию для организации)>, +// sAPIClientId: "<Ключ разработчика 2>" }... +//]; +//Если ключ единый для всех организаций: +//SDDAUTH_API_CLIENT_ID = "<Ключ разработчика>"; +exports.SDDAUTH_API_CLIENT_ID = "";