ЦИТК-616 - "Интеграция с ЭДО ДИАДОК": поддержка возможности указания нескольких ключей разработчика (diadic_config.js/SDDAUTH_API_CLIENT_ID) для разных организаций и юридических лиц

This commit is contained in:
Mikhail Chechnev 2023-02-20 13:48:38 +03:00
parent 474a2adf96
commit d5dd010f33
2 changed files with 62 additions and 16 deletions

View File

@ -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
}
};

View File

@ -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 = "";