По протоколу SOAP с помощью сторонних программ - Synerdocs/synerdocs-sdk GitHub Wiki

Содержание

Авторизация в сервисе по логину и паролю

Метод: Authenticate
В полях "syn:login" и "syn:password" указываем свои личные логин и пароль в сервисе Synerdocs.

Запрос

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:syn="http://synerdocs.ru">
   <soapenv:Header/>
   <soapenv:Body>
      <syn:Authenticate>
         <syn:login>testlogin</syn:login>
         <syn:password>testpass</syn:password>
      </syn:Authenticate>
   </soapenv:Body>
</soapenv:Envelope>

Ответ

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <AuthenticateResponse xmlns="http://synerdocs.ru">
         <AuthenticateResult>36739f2b-acbd-47cf-addc-9970aa22e04d</AuthenticateResult>
      </AuthenticateResponse>
   </s:Body>
</s:Envelope>

В ответе должен содержаться токен авторизации в виде GUID (поле "AuthenticateResult").
Ссылка на документацию в справочной системе: https://club.directum.ru/webhelp/synerdocs/index.html?om_authenticate_poluchenie_tokena_pri_avtorizacii_po_parolyu.htm

Получение внутреннего адреса электронной почты организации

Метод: GetBoxes
В поле "syn:authToken" указываем токен авторизации, полученный при авторизации на предыдущем этапе.

Запрос

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:syn="http://synerdocs.ru">
   <soapenv:Header/>
   <soapenv:Body>
      <syn:GetBoxes>
         <syn:authToken>36739f2b-acbd-47cf-addc-9970aa22e04d</syn:authToken>
      </syn:GetBoxes>
   </soapenv:Body>
</soapenv:Envelope>

Ответ

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <GetBoxesResponse xmlns="http://synerdocs.ru">
         <GetBoxesResult xmlns:a="http://schemas.datacontract.org/2004/07/Midway.ObjectModel"
            xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <a:BoxInfo>
               <a:Address>[email protected]</a:Address>
               <a:Inn>7928034598</a:Inn>
               <a:InvoiceReglamentAccepted>true</a:InvoiceReglamentAccepted>
               <a:InvoiceUserReglamentAccepted>true</a:InvoiceUserReglamentAccepted>
               <a:Kpp>817144269</a:Kpp>
               <a:Name>ООО "Уральские моноблоки"</a:Name>
               <a:OrganizationId>6</a:OrganizationId>
               <a:OrganizationName>ООО "Уральские моноблоки"</a:OrganizationName>
               <a:OrganizationType>LegalEntity</a:OrganizationType>
               <a:ServiceReglamentAccepted>true</a:ServiceReglamentAccepted>
               <a:SubscriberId>ca4406e6-cde6-4c52-abe5-1c055b8c49a7</a:SubscriberId>
            </a:BoxInfo>
            <a:BoxInfo>
               <!--......-->
            </a:BoxInfo>
         </GetBoxesResult>
      </GetBoxesResponse>
   </s:Body>
</s:Envelope>

В ответе должен содержаться внутренний адрес электронной почты вашей организации (поле "a:Address").
Возможно, в ответе будет указано несколько организаций, - выберите ту, которая вас интересует по полю "a:OrganizationName".
В примере указаны тестовые данные.
Ссылка на документацию в справочной системе: https://club.directum.ru/webhelp/synerdocs/index.html?om_getboxes_poluchenie_informacii_o_dostupnyh_yaschikah.htm

Получение внутреннего адреса электронной почты контрагента

Метод: GetOrganizationBy
Указываем поля: токен авторизации "syn:authToken", внутренний адрес электронной почты вашей организации "syn:boxId" и ИНН контрагента "mid:Inn".

Запрос

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:syn="http://synerdocs.ru"
   xmlns:mid="http://schemas.datacontract.org/2004/07/Midway.ObjectModel">
   <soapenv:Header/>
   <soapenv:Body>
      <syn:GetOrganizationBy>
         <syn:authToken>36739f2b-acbd-47cf-addc-9970aa22e04d</syn:authToken>
         <syn:boxId>[email protected]</syn:boxId>
         <syn:criteria>ByInnKpp</syn:criteria>
         <syn:values>
            <mid:Inn>9196397883</mid:Inn>
         </syn:values>
      </syn:GetOrganizationBy>
   </soapenv:Body>
</soapenv:Envelope>

Ответ

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <GetOrganizationByResponse xmlns="http://synerdocs.ru">
         <GetOrganizationByResult xmlns:a="http://schemas.datacontract.org/2004/07/Midway.ObjectModel"
            xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <!--......-->
            <a:BoxAddress>[email protected]</a:BoxAddress>
            <!--......-->
            <a:Inn>9196397883</a:Inn>
            <!--......-->
            <a:Kpp>498501941</a:Kpp>
            <!--......-->
            <a:LegalName>ООО "Веселый молочник"</a:LegalName>
            <!--......-->
         </GetOrganizationByResult>
      </GetOrganizationByResponse>
   </s:Body>
</s:Envelope>

Поле "a:BoxAddress" содержит внутренний адрес электронной почты контрагента.
Контрагента можно найти и по другим полям, - смотрите "Критерий для выборки информации об организации" в документации.
Ссылка на документацию в справочной системе: https://club.directum.ru/webhelp/synerdocs/index.html?om_getorganizationby_poluchenie_informacii_ob_organizacii.htm

Получение списка входящих документов

Метод: GetDocumentEntries
В запросе указываем поля: токен авторизации "syn:authToken" и внутренний адрес электронной почты организации "mid:BoxTo".
Вы можете указать удобное значение параметра "mid:Max", но не более 1000.

Запрос

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:syn="http://synerdocs.ru"
   xmlns:mid="http://schemas.datacontract.org/2004/07/Midway.ObjectModel"
   xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
   <soapenv:Header/>
   <soapenv:Body>
      <syn:GetDocumentEntries>
         <syn:authToken>36739f2b-acbd-47cf-addc-9970aa22e04d</syn:authToken>
         <syn:options>
            <mid:BoxTo>[email protected]</mid:BoxTo>
            <mid:First>0</mid:First>
            <mid:Max>100</mid:Max>
         </syn:options>
      </syn:GetDocumentEntries>
   </soapenv:Body>
</soapenv:Envelope>

Если у вас больше документов, чем указано в "mid:Max", то вам придётся организовать в цикле постраничный вывод документов с помощью указания параметра "mid:First". Индекс начинается с 0.

Запрос второй страницы

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:syn="http://synerdocs.ru"
   xmlns:mid="http://schemas.datacontract.org/2004/07/Midway.ObjectModel"
   xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
   <soapenv:Header/>
   <soapenv:Body>
      <syn:GetDocumentEntries>
         <syn:authToken>36739f2b-acbd-47cf-addc-9970aa22e04d</syn:authToken>
         <syn:options>
            <mid:BoxTo>[email protected]</mid:BoxTo>
            <mid:First>100</mid:First>
            <mid:Max>100</mid:Max>
         </syn:options>
      </syn:GetDocumentEntries>
   </soapenv:Body>
</soapenv:Envelope>

Ответ

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <GetDocumentEntriesResponse xmlns="http://synerdocs.ru">
         <GetDocumentEntriesResult xmlns:a="http://schemas.datacontract.org/2004/07/Midway.ObjectModel"
            xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <a:Items>
               <a:DocumentEntryItem>
                  <a:AvailableOperations>227274</a:AvailableOperations>
                  <!--......-->
                  <a:DocumentId>d0faa4be-39ce-4059-8424-ddd236770f52</a:DocumentId>
                  <!--......-->
                  <a:Name>Cчет-фактура № 820 СЧФ от 01.02.2003</a:Name>
                  <!--......-->
               </a:DocumentEntryItem>
               <a:DocumentEntryItem>
                  <!--......-->
               </a:DocumentEntryItem>
            </a:Items>
            <a:Total>2</a:Total>
         </GetDocumentEntriesResult>
      </GetDocumentEntriesResponse>
   </s:Body>
</s:Envelope>

В ответе будет содержаться список входящих документов. Нас интересует поле "a:DocumentId", - это идентификатор документа в виде GUID.
В поле "a:Total" указано общее количество документов, найденных по указанным параметрам фильтрации без учета параметров "First" и "Max".
Ссылка на документацию в справочной системе: https://club.directum.ru/webhelp/synerdocs/index.html?om_getdocumententries_poluchit_spisok_vhozhdenii_dokumentov.htm

В запросе можно указать и другие параметры фильтрации, аналогично параметрам "First" и "Max".
Подробнее вы можете прочитать про них по ссылке: https://club.directum.ru/webhelp/synerdocs/index.html?om_documentlistoptions_parametry_formirovaniia_spiska_dokumentov.htm

Сложный запрос с фильтрацией на получение списка входящих документов

Для примера, давайте получим 3 документа, пропустив первые 2, из входящих документов для нашего контрагента "ООО Веселый молочник", причем документы, созданные с 21 марта 2021 года по 8 апреля 2021 года включительно по московскому времени.
Для этого сначала получим внутренний адрес электронной почты нашего контрагента, - смотрите пункт "Получение внутреннего адреса электронной почты контрагента".
В приведенном ниже примере - это "[email protected]".
Теперь составим запрос на получение списка документов с указанными параметрами фильтрации.

Запрос

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:syn="http://synerdocs.ru"
   xmlns:mid="http://schemas.datacontract.org/2004/07/Midway.ObjectModel"
   xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
   <soapenv:Header/>
   <soapenv:Body>
      <syn:GetDocumentEntries>
         <syn:authToken>36739f2b-acbd-47cf-addc-9970aa22e04d</syn:authToken>
         <syn:options>
            <mid:BoxFrom>[email protected]</mid:BoxFrom>
            <mid:ContragentBoxIds>
               <arr:string>[email protected]</arr:string>
            </mid:ContragentBoxIds>
            <mid:DocumentDateFrom>2021-03-21T00:00:00+03:00</mid:DocumentDateFrom>
            <mid:DocumentDateTo>2021-04-09T00:00:00+03:00</mid:DocumentDateTo>
            <mid:First>2</mid:First>
            <mid:Max>3</mid:Max>
         </syn:options>
      </syn:GetDocumentEntries>
   </soapenv:Body>
</soapenv:Envelope>

Ответ аналогичен предыдущему пункту.

Получение списка исходящих документов

Метод: GetDocumentEntries
Аналогично предыдущему шагу, но тут указываем поле "mid:BoxFrom".

Запрос

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:syn="http://synerdocs.ru"
   xmlns:mid="http://schemas.datacontract.org/2004/07/Midway.ObjectModel"
   xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
   <soapenv:Header/>
   <soapenv:Body>
      <syn:GetDocumentEntries>
         <syn:authToken>36739f2b-acbd-47cf-addc-9970aa22e04d</syn:authToken>
         <syn:options>
            <mid:BoxFrom>[email protected]</mid:BoxFrom>
            <mid:First>0</mid:First>
            <mid:Max>100</mid:Max>
         </syn:options>
      </syn:GetDocumentEntries>
   </soapenv:Body>
</soapenv:Envelope>

Ответ

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <GetDocumentEntriesResponse xmlns="http://synerdocs.ru">
         <GetDocumentEntriesResult xmlns:a="http://schemas.datacontract.org/2004/07/Midway.ObjectModel"
            xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <a:Items>
               <a:DocumentEntryItem>
                  <!--......-->
               </a:DocumentEntryItem>
               <a:DocumentEntryItem>
                  <!--......-->
               </a:DocumentEntryItem>
               <a:DocumentEntryItem>
                  <!--......-->
               </a:DocumentEntryItem>
            </a:Items>
            <a:Total>3</a:Total>
         </GetDocumentEntriesResult>
      </GetDocumentEntriesResponse>
   </s:Body>
</s:Envelope>

Ссылка на документацию в справочной системе: https://club.directum.ru/webhelp/synerdocs/index.html?om_getdocumententries_poluchit_spisok_vhozhdenii_dokumentov.htm

Получение архива ДО по конкретному документу без информационных квитанций

Метод: DownloadDocumentFlowArchiveWithoutInformationReceipt
Выполняем этот этап для всех документов, полученных на двух предыдущих этапах.
Указываем поля: токен авторизации "syn:authToken", внутренний адрес электронной почты организации "syn:boxId" и идентификатор документа "syn:documentId".

Запрос

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:syn="http://synerdocs.ru">
   <soapenv:Header/>
   <soapenv:Body>
      <syn:DownloadDocumentFlowArchiveWithoutInformationReceipt>
         <syn:authToken>36739f2b-acbd-47cf-addc-9970aa22e04d</syn:authToken>
         <syn:boxId>[email protected]</syn:boxId>
         <syn:documentId>d0faa4be-39ce-4059-8424-ddd236770f52</syn:documentId>
      </syn:DownloadDocumentFlowArchiveWithoutInformationReceipt>
   </soapenv:Body>
</soapenv:Envelope>

Ответ

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <DownloadDocumentFlowArchiveWithoutInformationReceiptResponse xmlns="http://synerdocs.ru">
         <DownloadDocumentFlowArchiveWithoutInformationReceiptResult xmlns:a="http://schemas.datacontract.org/2004/07/Midway.ObjectModel"
            xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <a:Content>UEsDBBQAAAAIAJ ...... APwQEAAAA</a:Content>
            <a:Name>Документооборот документа Cчет-фактура № 820 СЧФ от 01.02.2003.zip</a:Name>
         </DownloadDocumentFlowArchiveWithoutInformationReceiptResult>
      </DownloadDocumentFlowArchiveWithoutInformationReceiptResponse>
   </s:Body>
</s:Envelope>

В ответе содержится контент архива документооборота "a:Content", закодированный в кодировке Base64, и имя файла архива "a:Name".
Ссылка на документацию в справочной системе: https://club.directum.ru/webhelp/synerdocs/index.html?om_downloaddocumentflowarchive_poluchit_arhiv_s_failami_tcepochki_dokumentooborota.htm

Получение архива ДО по конкретному документу с информационными квитанциями

Метод: DownloadDocumentFlowArchive
Выполняем этот этап для всех документов, полученных на двух предыдущих этапах.
Указываем поля: токен авторизации "syn:authToken", внутренний адрес электронной почты организации "syn:boxId" и идентификатор документа "syn:documentId".

Запрос

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:syn="http://synerdocs.ru">
   <soapenv:Header/>
   <soapenv:Body>
      <syn:DownloadDocumentFlowArchive>
         <syn:authToken>36739f2b-acbd-47cf-addc-9970aa22e04d</syn:authToken>
         <syn:boxId>[email protected]</syn:boxId>
         <syn:documentId>d0faa4be-39ce-4059-8424-ddd236770f52</syn:documentId>
      </syn:DownloadDocumentFlowArchive>
   </soapenv:Body>
</soapenv:Envelope>

Ответ

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <DownloadDocumentFlowArchiveResponse xmlns="http://synerdocs.ru">
         <DownloadDocumentFlowArchiveResult xmlns:a="http://schemas.datacontract.org/2004/07/Midway.ObjectModel"
            xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <a:Content>UEsDBBQAAAAIAJ ...... APwQEAAAA</a:Content>
            <a:Name>Документооборот документа Cчет-фактура № 820 СЧФ от 01.02.2003.zip</a:Name>
         </DownloadDocumentFlowArchiveResult>
      </DownloadDocumentFlowArchiveResponse>
   </s:Body>
</s:Envelope>

В ответе содержится контент архива документооборота "a:Content", закодированный в кодировке Base64, и имя файла архива "a:Name".
Ссылка на документацию в справочной системе: https://club.directum.ru/webhelp/synerdocs/index.html?om_downloaddocumentflowarchive_poluchit_arhiv_s_failami_tcepochki_dokumentooborota.htm

Выгрузка документа с информационной квитанцией занимает примерно на 15% больше времени, чем без нее, что может быть значительно при большом количестве выгружаемых документов.
Вы можете сами решить, нужна ли она вам, ознакомившись с содержанием информационной квитанции в нашей справочной системе: https://club.directum.ru/webhelp/synerdocs/index.html?rp_informazionnaya_kvitanzia.htm

Сохранение архива документооборота по документу на диск

Метод: отсутствует
Завершающий этап, на котором контент раскодируется и сохраняется на диск в виде файла с расширением zip.
Можно использовать как приведенные скрипты на одном из языков программирования, так и сторонние онлайн-сервисы, такие как https://emn178.github.io/online-tools/base64_decode_file.html
У вас процесс может быть построен по-другому.

C#

var path = @"C:\archive\Документооборот документа Cчет-фактура № 820 СЧФ от 01.02.2003.zip";
var content = @"UEsDBBQAAAAIAJ ...... APwQEAAAA";
File.WriteAllBytes(path, Convert.FromBase64String(content));

PowerShell

$path = "C:\archive\Документооборот документа Cчет-фактура № 820 СЧФ от 01.02.2003.zip"
$content = "UEsDBBQAAAAIAJ ...... APwQEAAAA"
[System.IO.File]::WriteAllBytes($path, [System.Convert]::FromBase64String($content));

Bash

echo "UEsDBBQAAAAIAJ ...... APwQEAAAA" | base64 --decode > "Документооборот документа Cчет-фактура № 820 СЧФ от 01.02.2003.zip"

Внутри этого zip-архива содержатся основной документ, подписи к нему, его печатная форма в pdf-формате, служебные документы и, опционально, информационные квитанции.

⚠️ **GitHub.com Fallback** ⚠️