По протоколу 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-формате, служебные документы и, опционально, информационные квитанции.