Работа с Меркурием

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
finsoftrz
Ветеран
Сообщения: 830
Зарегистрирован: 06 Ноябрь 2014, 12:48

Работа с Меркурием

Сообщение finsoftrz » 07 Август 2018, 9:52

Глянул сегодня с утра, что за зверь. В общем, обмен xml-файлами с их сервисами. Интерфейс можно делать по разному, в том числе через curl.exe, по аналогии с Егаис. Вот такой пример для получения ответа работает:

Код: Выделить всё

'curl.exe -d @"' & 'req.xml'  & '" -H "Content-Type: text/xml; charset=utf-8" -u ' & 'user' & ':' & 'pswd' & ' https://api2.vetrf.ru:8002/platform/services/2.0/EnterpriseService' & ' -o ' & 'resp.xml'
Файлик req.xml делаем по их документации в зависимости от запроса. Он должен быть в кодировке utf8. В ответ получаем resp.xml (тоже в utf8), который парсим. Его вид тоже описан в документации и зависит от запроса. При наличии опыта работы с Егаис все выглядит очень похоже, объектная обвязка идентичная.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3598
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Работа с Меркурием

Сообщение Игорь Столяров » 07 Август 2018, 13:42

Классно ! :) А я пробовал, где-то пол-года назад, подключиться через LibCurl, но чего-то не задалось …
А можно просить какой-нибудь заведомо правильный req.xml ? Я бы тоже попробовал что-нибудь поиметь с Меркурия. :)
«V» значит Вендетта !

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 830
Зарегистрирован: 06 Ноябрь 2014, 12:48

Работа с Меркурием

Сообщение finsoftrz » 07 Август 2018, 14:02

Запрос 3 первых организаций с фрагментом в названии. Дальше я тоже пока не дошел... :-)

Код: Выделить всё

  fsFileMakerL.AddOutLine('<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://api.vetrf.ru/schema/cdm/registry/ws-definitions/v2" xmlns:bs="http://api.vetrf.ru/schema/cdm/base" xmlns:dt="http://api.vetrf.ru/schema/cdm/dictionary/v2">')
  fsFileMakerL.AddOutLine('   <soapenv:Header/>')
  fsFileMakerL.AddOutLine('   <soapenv:Body>')
  fsFileMakerL.AddOutLine('      <ws:getRussianEnterpriseListRequest>')
  fsFileMakerL.AddOutLine('         <bs:listOptions>')
  fsFileMakerL.AddOutLine('            <bs:count>3</bs:count>')
  fsFileMakerL.AddOutLine('            <bs:offset>0</bs:offset>')
  fsFileMakerL.AddOutLine('         </bs:listOptions>')
  fsFileMakerL.AddOutLine('         <dt:enterprise>')
  fsFileMakerL.AddOutLine('            <dt:name>"ПЕРЕСВЕТ"</dt:name>')
  fsFileMakerL.AddOutLine('         </dt:enterprise>')
  fsFileMakerL.AddOutLine('      </ws:getRussianEnterpriseListRequest>')
  fsFileMakerL.AddOutLine('   </soapenv:Body>')
  fsFileMakerL.AddOutLine('</soapenv:Envelope>')
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3598
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Работа с Меркурием

Сообщение Игорь Столяров » 07 Август 2018, 14:04

Спасибо ! Для теста - подойдёт. :)
Я вот нечто похожее пробовал запихнуть туда сразу через LibCurl ...
«V» значит Вендетта !

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 830
Зарегистрирован: 06 Ноябрь 2014, 12:48

Работа с Меркурием

Сообщение finsoftrz » 07 Август 2018, 15:10

У меня работа с Егаис через curl.exe, поскольку там все примеры в доке на нем. Ну и подумал, зачем зоопарк плодить со всеми этими делами, пусть будет curl.exe. Другие тоже, видимо, после Егаиса его задействуют. Хотя сами меркурианцы рекомендуют soapUI.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3598
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Работа с Меркурием

Сообщение Игорь Столяров » 07 Август 2018, 16:21

finsoftrz писал(а):
07 Август 2018, 15:10
Хотя сами меркурианцы рекомендуют soapUI
Это не беда. Плохо, что они (как я понял) не довели сей чудный сервис до ума и не прикрутили к нему вариант обмена в JSON.
В Clarion JSON более дружелюбен, чем XML ...
«V» значит Вендетта !

Yufil
Ветеран движения
Сообщения: 1011
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

Работа с Меркурием

Сообщение Yufil » 08 Август 2018, 18:53

У себя среди старых программ нашёл фрагмент с загрузкой адресных данных через SOAP, и парсинг результатов, используя SOAPUi и самопальные модули Chttp и Cstr
https://mega.nz/#!0l5mCYaZ!lK3UXugElajL ... pOOcyTm8HU , там рутинка soaprequest ( стр.213) . Если интересно, попробую объяснить, что там творится и найду весь антураж ( классы и всё такое )...

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 830
Зарегистрирован: 06 Ноябрь 2014, 12:48

Работа с Меркурием

Сообщение finsoftrz » 26 Август 2018, 16:42

Вот еще пример запроса всех стран.

Код: Выделить всё

sendRequest_r  routine   !послать запрос
   DATA

lor:queue queue, pre()
lor:name   string(128), name('dt:name')
lor:uuid    string(80), name('bs:uuid')
lor:guid    string(80), name('bs:guid')
  .

lor:err  byte

   CODE

  Loc:NameTmp=GetNameTmp(FsAccess:ActiveUserDir,'xml',0)
  Loc:NameOutTmp=GetNameTmp(FsAccess:ActiveUserDir,'xml',1)

  fsFileMakerL.init(Loc:NameTmp)

  fsFileMakerL.AddOutLine('<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://api.vetrf.ru/schema/cdm/registry/ws-definitions/v2" xmlns:base="http://api.vetrf.ru/schema/cdm/base">')
  fsFileMakerL.AddOutLine('  <soapenv:Header/>')
  fsFileMakerL.AddOutLine('  <soapenv:Body>')
  fsFileMakerL.AddOutLine('    <ws:getAllCountryListRequest>')
  fsFileMakerL.AddOutLine('      <base:listOptions>')
  fsFileMakerL.AddOutLine('        <base:count>10</base:count>')
  fsFileMakerL.AddOutLine('        <base:offset>0</base:offset>')
  fsFileMakerL.AddOutLine('      </base:listOptions>')
  fsFileMakerL.AddOutLine('    </ws:getAllCountryListRequest>')
  fsFileMakerL.AddOutLine('  </soapenv:Body>')
  fsFileMakerL.AddOutLine('</soapenv:Envelope>')

  if fsFileMakerL.MakeFile(1)=0
     fsFileMakerL.kill
     exit
  .
  fsFileMakerL.kill
  if fsCurlL.StartProcess('curl\curl.exe -d @"' & clip(Loc:NameTmp)  & '" -H "Content-Type: text/xml; charset=utf-8" -u ' & clip('peresvet-180801') & ':' & clip('b6WHf9r3') & clip(' https://api2.vetrf.ru:8002/platform/services/2.0/IkarService') & ' -o ' & clip(Loc:NameOutTmp)).

  if ~exists(Loc:NameOutTmp)
     FsMessagePr('Ошибка отправки запроса!')
     exit
  .

  lor:err=0
  Loc:NameTmp=Loc:NameOutTmp
  Loc:NameVbsTmp=GetNameTmp(FsAccess:ActiveUserDir,'vbs',0)
  Loc:NameOutTmp=GetNameTmp(FsAccess:ActiveUserDir,'txt',0)

  !читаем ответ
  fsXmlPar.init(Loc:NameTmp,Loc:NameVbsTmp,Loc:NameOutTmp)
  fsXmlPar.LoadQueue('dt:country','lor:queue',lor:queue)
  fsXmlPar.MakeScript(1)
  if fsXmlPar.ErrorCode<>0
     FsMessagePr('Ошибка! ' & clip(fsXmlPar.ErrorMessage))
     lor:err=1
  .
  fsXmlPar.kill

  if lor:err=0 and records(lor:queue)<>0
     remove(Loc:NameTmp)
     remove(Loc:NameOutTmp)
     fsViewQueue('',lor:queue)
  elsif lor:err=0
     run('notepad.exe ' & Loc:NameTmp)
     run('notepad.exe ' & Loc:NameOutTmp)
  .

  free(lor:queue)
  
Рязань решает.

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 830
Зарегистрирован: 06 Ноябрь 2014, 12:48

Работа с Меркурием

Сообщение finsoftrz » 08 Сентябрь 2018, 13:49

Посмотрел подробнее эту тему. В общем, принципы взаимодействия похожи на Егаис и несколько проще (нет локальной инфраструктуры со всеми вытекающими). Создаем xml нужного вида (копируем образец из вики), применяем в нем идентификаторы и логины, полученные в Россельхознадзоре. Шлем на один из сервисов. Их несколько, в зависимости от типа запроса. В ответ получаем в виде xml либо сразу нужную информацию (например, всякие справочники), либо идентификатор запроса (для более сложных операций). Во втором случае через некоторое время шлем запрос на получение результата, указав в нем идентификатор, присвоенный основному запросу. Получаем результат. Для розницы несложно, там только гасить всд требуется. Для опта и, тем более, производства надо вникать в разные тонкости бизнес-процессов глазами меркурианцев...
Технически в словаре несколько структур (для розницы 4 таблицы насчитал) и dll.
Рязань решает.

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 830
Зарегистрирован: 06 Ноябрь 2014, 12:48

Работа с Меркурием

Сообщение finsoftrz » 25 Сентябрь 2018, 9:16

Попробовал вчера получение всд в рабочем контуре. В общем, система пока явно не справляется с нагрузкой. Запрос проходит с десятой попытки, иначе вываливается отказ по неизвестной причине. Поглядел на форумах, народ стонет, начиная с июля. Большинство используют веб интерфейс, который работает более стабильно. А в шлюз все ставят на автомат и долбят его запросами через определенные промежутки времени, пока запрос наконец не пройдет...
Рязань решает.

Ответить