В случае, когда возможностей API прямого обмена данными с банком недостаточно, можно использовать технологию обмена с банком из 1С через внешнюю компоненту.
Внешняя компонента разрабатывается по технологии Native API. В архиве с внешней компонентой должен находиться файл info.xml, описание формата файла см. в приложении Б.
Особенности передачи параметров в/из ВК:
Более подробно см. в приложении А.
Если при вызове метода ВК возникла ошибка, которая не может быть обработана внутри ВК, необходимо вернуть исключение (CallAsFunc/CallAsProc
должны вернуть false). При этом код и сообщение об ошибке возвращаются через обращение к методу ДеталиОшибки()
.
Транспортный уровень внешней компоненты подобен транспортному уровню в варианте асинхронного обмена с подключением напрямую к серверу банка. ВК поддерживает формат транспортных пакетов, а также порядок обмена пакетами с сервером банка, функции: ОтправитьПакет()
, ПолучитьСписокПакетов()
, ПолучитьПакет()
.
Примечание. Данные ключа ЭП могут быть как сертификатом X.509, так и данными в произвольном формате. Для сертификатов x.509 дополнение не требуется (т.к. все данные уже есть в нем). При вызове функции дополнения следует возвращать сертификат открытого ключа без изменений.
Используется для получения информации об ошибке, возникшей при вызове функции внешней компоненты. Возвращает код и сообщение об ошибке, которые могут быть выведены пользователю или записаны в журнал.
Тип возвращаемого значения: структура, с полями:
Пользователю рекомендуется вывести сообщение об ошибке и код ошибки, если он отличен от нуля.
Пример использования:
Попытка ВК.Функция(); Исключение ИнформацияОбОшибке = ВК.ДеталиОшибки(); ... КонецПопытки
Возвращаемое значение строка версия внешней компоненты в формате X.X.X, например 1.0.21.
Выполняет общую инициализацию перед началом работы.
Параметры:
Вызов начинает запись журнала (лога) с отладочной информацией по работе внешней компоненты. Внешняя компонента может создавать один или несколько файлов в каталоге, путь к которому передан в качестве параметра.
Параметры:
Внешняя компонента является самодостаточной библиотекой для работы с функциями криптографии, ключами ЭП и другими средствами необходимыми для обмена ЭД с банком.
Для использования функций криптографии, где требуется использование закрытой части ключа ЭП, может потребоваться установка пароля ключа ЭП. ВК может сбрасывать ПИНкод хранилища ключей ЭП и пароль закрытого ключа ЭП, например в случае длительного отсутствия активности. Поэтому, перед работой с токеном или ключем ЭП БЭД выполняет проверку, требуется ли установка ПИНкода или пароля ключа ЭП.
Получает идентификаторы аппаратных устройств (USB-токенов, смарткарт), подключенных к компьютеру. Тип возвращаемого значения: массив, где каждый элемент идентификатор устройства (тип строка).
Проверяет, требуется ли для работы с хранилищем установка ПИНкода. При попытке вызова для несуществующего/не найденного хранилища вызывается исключение.
Параметры:
Тип возвращаемого значения: Булево
Устанавливает ПИНкод для работы с хранилищем. При попытке установки неверного ПИНкода вызывается исключение.
Параметры:
Получает список ключей электронной подписи в хранилище. Данные о ключе ЭП представляются во внутреннем формате ВК.
Важно: полученная информация может содержать лишь часть данных об открытом ключе ЭП, этой информации должно быть достаточно для установки соединения с сервером банка, но недостаточно для заполнения «карточки» ключа в информационной базе. После установки соединения с сервером банка, информацию о ключах можно дополнить, после чего становятся доступными остальные поля.
Параметры:
Тип возвращаемого значения: массив, где каждый элемент — это данные ключа ЭП (ДвоичныеДанные).
Для использования закрытой части ключа ЭП может потребоваться установить пароль. Функция проверяет, требуется ли установка пароля для переданного ключа ЭП.
Параметры:
Тип возвращаемого значения: Булево
Пытается установить пароль для работы с ключом ЭП.
Параметры:
Возвращает данные ключа ЭП в виде структуры.
Параметры:
Тип возвращаемого значения: структура, с полями:
Поля, отмеченные символом *, заполнены после дополнения данных ключа ЭП см. функцию ДополнитьДанныеКлючаЭП
.
По переданным данным ключа ЭП и данным подписи возвращает параметры подписи данных: время ожидания подписи и подсказку для пользователя.
Параметры:
Возвращаемое значение: структура, с полями:
Выполняет подпись данных на переданном ключе.
Параметры:
Возвращаемое значение: Булево
Проверяет, что подпись соответствует данным и ключу ЭП.
Параметры:
Тип возвращаемого значения: Булево — Истина, если подпись соответствует данным и открытому ключу, иначе Ложь
Важно. Перед проверкой подписи необходимо убедиться, что подключено хотя бы одно аппаратное устройство и для него установлен ПИНкод.
Соединение с сервером банка устанавливается с помощью ключа ЭП. Для разделения соединения с разными банками используется данные ключа ЭП. Перед установкой соединения необходимо убедиться, что пароль ключа ЭП установлен. ВК может разрывать существующее соединение, например, при длительном отсутствии активности пользователя. В некоторых сценариях требуется расширенная аутентификация.
Вызывается для установки соединения с сервером банка на ключе ЭП. Все последующие вызовы функций поддержки соединения и взаимодействия с сервером банка будут работать с использованием ключа ЭП, указанного в этой функции.
Параметры:
Возвращаемое значение: Булево — Истина, если соединение успешно установлено, Ложь если требуется расширенная аутентификация
Отправляет одноразовый пароль расширенной аутентификации по SMS. Вызов необходимо делать после получения параметров расширенной аутентификации с помощью функции УстановитьСоединение()
.
Параметры:
ПараметрыРасширеннойАутентификации()
)Завершает установку соединения с сервером банка при расширенной аутентификации.
Параметры:
УстановитьСоединение()
Возвращаемое значение: Булево — Истина, если расширенная аутентификация успешно завершена и соединение установлено, Ложь, если пользователь отказался от расширенной аутентификации (возможно, если способ= «DEVICEAUTO»).
Функции для работы с сервером банка могут использоваться только после аутентификации на сервере банка. Кроме того, даже если соединение было установлено, перед вызовом функций этого раздела необходимо явно указать внешней компоненте какое соединение с банком использовать с помощью вызова УстановитьСоединение()
.
Возвращает настройки электронного документооборота: поддерживаемые типы документов, сертификат банка для проверки подписи, версию обмена и др. сведения.
Возвращаемое значение: ДвоичныеДанные — настройки обмена.
Примечание 1: В настройках ЭД необходимо указать, что ЭД Запрос-зонд должен подписываться для тестирования функций подписи/проверки подписи при настройке пользователем DirectBank.
Примечание 2: Данные о ключах ЭП клиента и банка приходят полностью заполненными и не требуют дополнения.
Дополнительную информацию о формате настройки ЭД см. в Приложении В.
Данные ключа ЭП, хранящиеся на аппаратном устройстве, содержат имя ключа ЭП (для представления пользователю) и позволяют выполнить аутентификацию на сервере банка. Тем не менее этих данных может быть недостаточно прикладному решению (например: ФИО владельца ключа, дата окончания действия ключа ЭП и др.) поэтому требуется дополнение. Функция дополняет переданные данные ключа информацией, хранящейся на сервере банка. После дополнения данных ключа ЭП они могут быть получены через функцию ДанныеКлючаЭП()
.
Параметры:
Тип возвращаемого значения: строка — данные ключа ЭП во внутреннем формате ВК с данными, дополненными по серверу банка.
Примечание: Для сертификатов x.509 функция должна вернуть сам сертификат.
Для некоторых типов ЭД перед подписью может потребоваться дополнение ЭД. Например, добавление схемы подписи (дайджеста) платежного поручения. Эта информация будет использована внешней компонентой при подписи.
Параметры:
Возвращаемое значение: Булево — Истина, если для подписи требуется дополнить ЭД, иначе Ложь.
Примечание: функция может быть вызвана без подключения ключа ЭП, без подключения к серверу банка.
Дополняет ЭД данными необходимыми для подписи.
Параметры:
Возвращаемое значение: ДвоичныеДанные — дополненный электронный документ.
Используется для отправки пакета (транспортного контейнера) в банк.
Параметры:
Возвращаемое значение: строка — ответ соответствует XMLсхеме ответа банк.сервиса 1CBank_ResultBank.xsd. Если пакет был принят, то в ответе банк.сервиса должен быть заполнен элемент SendPacketResponse.
Получает список пакетов, подготовленных для передачи на стороне банка и внешней компоненты.
Параметры:
Возвращаемое значение: ДвоичныеДанные — ответ соответствует XML-схеме ответа банк.сервиса 1CBank_ResultBank.xsd. Если запрос был принят, то в ответе банк.сервиса должен быть заполнен элемент GetPacketListResponse.
Получает пакет (транспортный контейнер) из банка по его идентификатору.
Параметры:
Возвращаемое значение: ДвоичныеДанные — ответ соответствует XMLсхеме ответа банк.сервиса 1CBank_ResultBank.xsd. Если пакет найден, то в ответе банк.сервиса должен быть заполнен элемент GetPacketResponse.
Используется для инициализации сессии подтверждения платежного поручения.
Параметры:
Возвращаемое значение: структура с полями:
Используется для отправки кода подтверждения по SMS
Параметры: Сессия — структура — контекст расширенной аутентификации
Используется для подтверждения платежного поручения.
Параметры:
Параметры некоторых методов ВК могут иметь «сложный» тип (структура, массив). Непосредственная передача значений таких типов не поддерживаются технологией внешних компонент. Поэтому, при передаче значений таких типов в ВК, выполняется их сериализация в строку, при возврате значений из ВК выполняется их десериализация из строки.
Функция Сериализация(Знач Значение) Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO); ОбъектXDTO = Сериализатор.ЗаписатьXDTO(Значение); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO); Возврат ЗаписьXML.Закрыть(); КонецФункции Функция Десериализация(Знач ПредставлениеXML) ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(ПредставлениеXML); ЧтениеXML.Прочитать(); Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO); Возврат Сериализатор.ПрочитатьXML(ЧтениеXML); КонецФункции
<Structure xmlns="http://v8.1c.ru/8.1/data/core" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> <Property name="ВерсияСхемы"> <Value xsi:type="xs:string">2.02</Value> </Property> <Property name="ИдентификаторКлиента"> <Value xsi:type="UUID">0e828c06e4c440c0a5ba67f01f898a1b</Value> </Property> </Structure> <Array xmlns="http://v8.1c.ru/8.1/data/core" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> <Value xsi:type="xs:string">866D223868284A</Value> </Array>Технология внешних компонент также не позволяет передавать в ВК двоичные данные. Поэтому, при передаче значений такого типа во внешнюю компоненту, они кодируются в BASE64, а при возврате декодируются из BASE64.
Для поддержки автоматической проверки и загрузки обновлений используется файл info.xml, который добавляется в архив внешней компоненты, а также публикуется на сервере банка (должен быть доступен по HTTPS).
<?xml version="1.0" encoding="utf8"?> <info> <progid>имя расширения</progid> <apiv>версия API</apiv> <name>имя ВК для отображения клиенту</name> <version>версия, в формате X.X.X</version> <urladdin>URL addin.zip на сервере банка</urladdin> <urladdininfo>URL info.xml на сервере банка</urladdininfo> </info>Где:
Новый("AddIn.<имя ВК>. <имя расширения> ")
Это же имя должно возвращаться при вызове функции RegisterExtensionAs
внешней компоненты. Более подробно см. http://its.1c.ru/db/metodtorg/content/3221/hdoc. Значение должно удовлетворять требованиям, предъявляемым к именованию переменных встроенного языка 1С.
<?xml version="1.0" encoding="utf8"?> <info> <progid>BankNameAddin</progid> <apiv>1</apiv> <name>Подключаемый модуль “ОА БАНК”</name> <version>1.2.3</version> <urladdin>https://bankname/1c/addin.zip</urladdin> <urladdininfo>https://bankname/1c/info.xml</urladdininfo> </info>
При создании настройки ЭД с банком БЭД выполняет тестирование ВК. При этом устанавливается соединение с банком, выполняется подпись и проверка подписи. Для поддержки полного сценария тестирования необходимо, чтобы ЭД с настройкой (возвращается функцией НастройкаЭД) содержал настройку «подписывать запрос-зонд». Если в настройке ЭД указан данные ключа ЭП банка для подписи ЭД, то извещение о состоянии запрос-зонда должно быть подписано. В случае, если задан сертификат ключа ЭП подписи ЭД со стороны банка, его необходимо поместить в элемент <BankCertificate>
настройки ЭД. Сертификаты ключей ЭП клиента необходимо поместить в <CustomerSignature><GroupSignatures><Certificate>.
Например:
... <CryptoParameters> <CSPName>CrypoName</CSPName> <CSPType>0</CSPType> <SignAlgorithm>GOST R 34.102001</SignAlgorithm> <HashAlgorithm>GOST R 34.1194</HashAlgorithm> <Encrypted> <EncryptAlgorithm>GOST 2814789</EncryptAlgorithm> </Encrypted> <BankCertificate> данные ключа ЭП банка в BASE 64 </BankCertificate> <CustomerSignature> <GroupSignatures numberGroup="0"> <Certificate> данные ключа ЭП клиента в BASE 64 </Certificate> </GroupSignatures> </CustomerSignature> <URLAddinInfo>https://bankname.ru/1c/info.xml</URLAddinInfo> </CryptoParameters> ...
При установке соединения с банком может потребоваться расширенная аутентификация. Расширенная аутентификация может быть выполнена либо через SMS, либо на устройстве, которое отображает информацию и ждет действия от пользователя. В обоих способах есть особенности:
РасширеннаяАутентификация(Способ=SMS)
с введенным паролем и ожидает оповещение о завершении вызова метода ВК. После получения оповещения форма закрывается.РасширеннаяАутентификация(Способ=DEVICEAUTO)
. После того как пользователь выполнит действие с устройством (например, подтвердит соединение, нажав кнопку), придет оповещение с результатом. После получения оповещения формат закрывается. В этом сценарии пользователь может отказаться от соединения, при этом результат вызова функции РасширеннаяАутентификация()
= Ложь.1С:Библиотека электронных документов поддерживает работу с несколькими версиями формата обмена данными. Прежние версии формата поддерживаются для совместимости с уже выпущенными решениями. Новая функциональность, документы и прочие изменения появляются в новых версиях формата. По умолчанию 1С:БЭД предлагает работать с новой версией формата обмена, однако, если ВК её не поддерживает, умеет работать по версии формата обмена предлагаемой ВК.
Порядок следующий: