From 0146702e1c8f085adada4dc81b4184f4adaabafe Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Tue, 14 Jun 2022 17:38:10 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-495=20=D0=A0=D0=B0?= =?UTF-8?q?=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D0=B5=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=A1=D0=91=D0=98=D0=A1":=20=D1=81?= =?UTF-8?q?=D0=BE=D0=BA=D1=80=D0=B0=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2?= =?UTF-8?q?=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=B8=20=D0=BE=D0=B6=D0=B8=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=B4=D0=B3=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B4=D0=BE=D0=BA?= =?UTF-8?q?=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=BE=D0=B2=20=D0=B7=D0=B0=20?= =?UTF-8?q?=D1=81=D1=87=D1=91=D1=82=20=D0=BF=D0=BE=D0=B2=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=BE?= =?UTF-8?q?=D0=B2=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20=D1=81=D0=B5=D1=80?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B9,=20=D0=B0=20=D0=BD=D0=B5=20=D1=87=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B7=20"=D0=9F=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D1=81=D0=BA=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/sbis.js | 60 +++++++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/modules/sbis.js b/modules/sbis.js index 431dd96..d10671f 100644 --- a/modules/sbis.js +++ b/modules/sbis.js @@ -9,23 +9,14 @@ const xml2js = require("xml2js"); //Конвертация XML в JSON и JSON в XML const _ = require("lodash"); //Работа с коллекциями и объектами +const rqp = require("request-promise"); //Работа с HTTP/HTTPS запросами //--------------------- // Глобальные константы //--------------------- // Список тегов которые должны содержать массив -const tag = [ - "Вложение", - "Редакция", - "ДокументОснование", - "ДокументСледствие", - "Подпись", - "Событие", - "Этап", - "Действие", - "Сертификат" -]; +const tag = ["Вложение", "Редакция", "ДокументОснование", "ДокументСледствие", "Подпись", "Событие", "Этап", "Действие", "Сертификат"]; //------------ // Тело модуля @@ -125,9 +116,7 @@ const afterConnect = async prms => { dCtxExp: addHours(new Date(), 23) }; } else { - throw new Error( - `Сервер ЭДО "СБИС" вернул ошибку: ${resp.error.message ? resp.error.message : "Неожиданная ошибка"}` - ); + throw new Error(`Сервер ЭДО "СБИС" вернул ошибку: ${resp.error.message ? resp.error.message : "Неожиданная ошибка"}`); } }; @@ -208,16 +197,43 @@ const beforeAttParse = async prms => { //Обработчик "После" отправки запроса на загрузку вложения const afterAttParse = async prms => { - let resu = null; if (prms.queue.blResp) { - try { - resu = JSON.parse(prms.queue.blResp.toString()); - } catch (e) { + if (prms.optionsResp.statusCode == 200) { return; - } - if (resu.error.hasOwnProperty("message")) { - //Возврат результата - throw new Error(`Неожиданный ответ сервера ЭДО "СБИС": ${resu.error.message}`); + } else { + let iterable = [1, 2, 3, 4, 5]; + //Если не превышает лимита запросов + for (let value of iterable) { + if (prms.optionsResp.statusCode != 200) { + //Выполним повторный запрос + await new Promise(resolve => setTimeout(resolve, 2000)); + let serverResp = await rqp(prms.options); + //Сохраняем полученный ответ + prms.queue.blResp = Buffer.from(serverResp.body || ""); + prms.optionsResp.statusCode = serverResp.statusCode; + //Если пришел ответ + if (prms.queue.blResp && serverResp.statusCode == 200) { + //Вернем загруженный документ + return { + blResp: prms.queue.blResp + }; + } + } + } + //Если был ответ от сервера с ошибкой (иначе мы сюда не попадём) + if (prms.queue.blResp) { + //Разберем сообщение об ошибке + let resu = null; + try { + resu = JSON.parse(prms.queue.blResp.toString()); + } catch (e) { + throw new Error(`Неожиданный ответ сервера ЭДО "СБИС": ${prms.queue.blResp.toString()}`); + } + throw new Error(`Сервер ЭДО "СБИС" вернул ошибку: ${resu?.error?.message}`); + } else { + //Возврат результата + throw new Error('Сервер ЭДО "СБИС" не вернул ответ'); + } } } else { throw new Error('Сервер ЭДО "СБИС" не вернул ответ');