NAV
WSDL

Request Structs

Proxy server interface

В данном разделе описан интерфейс, который должен быть предоставлен Proxy-сервером для Pro компоненты iDa Mobile. В качестве базового типа веб-сервиса, который должен предоставлять Proxy выбран Axis2 Web Service. При необходимости в Pro может быть реализована работа с сервисами других типов. Для удобства понимания в данном разделе протокол описывается в терминах Java-кода, на основе которого было сгенерировано wsdl описание Proxy web service.

Каждый запрос передает на сервер один объект RequestDTO и получает ответ в виде объекта ResponseDTO. Ниже описаны семантика каждого из методов, а также структура параметров и результатов запросов.

Requests description

Запросы, принимающие bankClientId должны производить проверку допустимости доступа клиента с данным идентификатором к запрашиваемым сущностям. Например, при запросе транзакций счета с идентификатором productId необходимо проверить, является ли пользователь с данным идентификатором productId владельцем счета. При нарушении условий безопасности выполнение может завершаться ошибкой – данная ситуация невозможна при использовании поставляемого клиентского приложения и какая-то осмысленная обработка на клиенте не является необходимой.

blockCard

Запрос на блокировку карты

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
cardId string 1..1 идентификатор карты для блокировки
Response:
result string 1..1 результат операции {OK, ERROR}
faultMessage string 0..1 сообщение об ошибке
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует
CardNotExistsException string 0..1 карта с запрошенным cardId не существует

changePassword

www.websequencediagrams.com

participant Bank proxy as b
participant iDa Pro as p
participant Mobile as m

note over p,m,b: --- var 1 ---

m->p:
p->b: login { login, password }
b->p: loginResult { bankClientId, PASSWORD_CHANGING_REQUIRED }
m->p:
p->b: changePassword { newPassword }
b->p: ok
p->m: ok


note over p,m,b: --- var 1 ---

m->p:
p->b: login { login, password }
b->p: loginResult { bankClientId, VALIDATION_REQUIRED }
p->m:
b->m: send SMS
m->p:
p->b: login { login, password, validationCode }
b->p: loginResult { bankClientId, PASSWORD_CHANGING_REQUIRED }
p->b: changePassword { newPassword }
b->p: ok
p->m: ok

Запрос на смену пароля при логине. Фактически пользователь логинится под старым паролем (или временным), но банк принудительно заставляет его сменить пароль на новый.

image

Варианты использования

  1. Смена пароля без 2х факторного подтверждения смс
  2. Смена пароля с 2х факторной процедурой
key type status comment
Request:
newPassword string 1..1 новый пароль в открытом виде
Response:
result string 1..1 результат выполнения команды {OK, ERROR}
message string 0..1 расширенное сообщение об ошибке

checkClient

www.websequencediagrams.com

participant Bank proxy as b
participant iDa Pro as p
participant Mobile as m

note over p,m,b: use PIN code first time

m->p: loginWithPassword { login, password, deviceInfo }
p->b: login { login, password, deviceInfo }
b->p: bankClientId
p->m: sessionId
m->p: isPinEstablished { deviceInfo, login }

alt NO PIN

    m->+p: establishPin { pin }
    p-->>p: PostgreSQL [ login, pin, sessionId ]
    p->-m: OK

end

note over p,m,b: use PIN code second time

m->p: loginWithPin { pin, login, deviceInfo }
p->b: checkClient { bankClientId }

Запрос на проверку валидности клиента во время авторизации по ПИН-коду

image

Краткое описание схемы

  1. Отправляется запрос IsPinEstablishedRequest с текущим логином и кодом из ответа на запрос GetDeviceVerificationCodeRequest.
  2. В случае не 2xx HTTP ответа от сервера установка пина прерывается, пользователь переходит в pro-часть приложения.
  3. Если в ответе на IsPinEstablishedRequest вернулось, что пин уже установлен, то пользователю показывается сообщение об этом, в настройках приложения сохраняется маркер, что для пользователя с таким логином пин установлен. Пользователь переходит в pro-часть приложения.
  4. Если пин до этого не был установлен, пользователю показывается интерфейс для ввода пина. После того, как он нажмет на кнопку “Установить”, на сервер отправится запрос EstablishSecurityKeyRequest с ключами из алгоритма Диффи- Хеллмана.
  5. В случае, если запрос вернул ошибку, пользователю покажется сообщение об ошибке, и он остается на экране установки пина.
  6. В случае успешного ответа, пин шифруется с помощью алгоритма Диффи-Хеллмана с полученным из ответа на EstablishSecurityKeyRequest публичным ключем от сервера. Зашифрованный пин отправляется на сервер запросом EstablishPinRequest.
  7. В случае, если запрос вернул ошибку, пользователю показывается сообщение. Он остается на экране установки пина.
  8. Успешный ответ означает, что пин установлен на сервере. В настройках приложения сохраняется маркер, что для пользователя с таким логином пин установлен. Пользователь переходит в pro-часть приложения.
key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
login string 1..1 логин клиента
deviceInfo DeviceInfoDTO 1..1 дополнительная информация об устройстве
Response:
result resultcheckClientKey 1..1 результат проверки
correctClient bool 0..1 флаг, отвечающий за разрешение или запрет авторизации по корректному ПИН-коду в текущий момент
faultMessage string 0..1 расширенное сообщение об ошибке
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

resultcheckClientKey

key comment
OK все в порядке и можно продолжать
ERROR показывается сообщение из faultMessage
PASSWORD_CHANGING_REQUIRED необходимо обязательно сменить пароль changePassword

confirmTransfer

Запрос на подтверждение платежа. Должен делаться если подтверждение платежа необходимо. Использует transferCode, полученный в ходе makeTransfer

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
transferCode string 1..1 код перевода
confirmCode string 1..1 код подтверждения
filledForm FilledFormDTO 1..1 заполненная форма с данными
Response:
result resultConfirmTransferType 1..1 результат операции
message string 0..1 сообщение об ошибке или иное сообщение
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

deprecated:

faultMessage string 0..1 сообщение об ошибке или иное сообщение

resultConfirmTransferType

key comment
OK все в порядке и можно продолжать
INVALID_CONFIRM_CODE не верные код, повторить ввод
ERROR ошибка проверке, закрываем возможность повторить запрос

getAccountRequisites

<getAccountRequisitesResponse>
   <return>
      <account>40729849234823</account>
      <bank>АКБ "БТА - КАЗАНЬ" (ОАО)</bank>
      <bankAccount>12312312313</bankAccount>
      <beneficaryName>Котов К.К.</beneficaryName>
      <bic>04929384</bic>
      <details>Для перевода используйте подручные средства</details>
      <taxpayerId>16612828282</taxpayerId>
   </return>
</getAccountRequisitesResponse>

Запрос на получение дополнительной информации о продукте при отправке на почту или смс

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
productId string 1..1 идентификатор продукта
cardId string 0..1 идентификатор карты
Response:
bank string 0..1 Наименование банка
bankAccount string 0..1 Идентификатор банковского счета
bic string 0..1 БИК
beneficaryName string 0..1 Наименование бенифициара
taxpayerId string 0..1 ИНН
account string 0..1 Идентификатор счёта
bankswift string 0..1 СВИФТ банка
corbank string 0..1 Банк-корреспондент
corswift string 0..1 СВИФТ Банк-корреспондента
details string 0..1 Дополнительная информация
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getAdditonalProductDetails

<getAdditonalProductDetailsResponse>
   <return>
      <sections type="DetailsSectionDTO">
         <fields type="DetailsFieldDTO">
            <key>Карти №1</key>
            <value>3245</value>
         </fields>
         <fields type="DetailsFieldDTO">
            <key>Карти №2</key>
            <value>4358</value>
         </fields>
         <name>Информация по картам</name>
      </sections>
      <sections type="DetailsSectionDTO">
         <fields type="DetailsFieldDTO">
            <key>Дневной</key>
            <value>25 000 руб.</value>
         </fields>
         <name>Лимиты</name>
      </sections>
   </return>
</getAdditonalProductDetailsResponse>

Запрос на получение дополнительной информации о продукте

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
productId string 1..1 идентификатор продукта
cardId string 0..1 идентификатор карты
Response:
sections DetailsSectionDTO 0..1 детали по продукту по секциям
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

DetailsSectionDTO

key type status comment
name string 0..1 имя раздела
fields DetailsFieldDTO 0..1 данные в разделе

DetailsFieldDTO

key type status comment
key string 0..1 название строки
value string 0..1 данные в строке

getAvailableContacts

Request:

<getAvailableContacts>
   <request>
      <bankClientId>bank_client_id</bankClientId>
      <contacts>79178842393</contacts>
      <contacts>79160369523</contacts>
      <lastUpdateTime xsi:nil="true" />
   </request>
</getAvailableContacts>

Response:

<getAvailableContactsResponse>
   <return>
      <contacts>79600568810</contacts>
      <contacts>79162616444</contacts>
      <contacts>79035678752</contacts>
      <contacts>79163218216</contacts>
      <lastUpdateTime>2016-11-03T12:00:00.000+03:00</lastUpdateTime>
   </return>
</getAvailableContactsResponse>

Запрос на получение списка контактов, доступных для перевода

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
contacts string 1..1 массив номеров телефонов из телефонной книжки клиента
lastUpdateTime Date ISO 8601 1..1 время последнего обновления данных на клиенте
Response:
contacts string 0..1 массив номеров телефонов, представляющий из себя пересечение имеющихся контактов клиентов банка и телефонной книжки клиента
lastUpdateTime Date ISO 8601 1..1 время последнего обновления данных на клиенте
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getBeneficiaryCategories

Запрос возвращает список категорий платежей для пользователя с идентификатором bankClientId

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
hash string 1..1 хеш категорий, хранимых на клиенте
Response:
beneficiaryCategories BeneficiaryCategoryDTO 0..1 список категорий получателей, каждая категория содержит список получателей
hash string 0..1 хеш текущего состояния списка
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getBills

Запрос возвращает список выставленны счетов для пользователя с идентификатором bankClientId

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
Response:
BillDTO BillDTO 0..1 список объектов с информацией о счетах
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getClientInfo

Получение общей информации о клиенте для отображения в приложении

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
Response:
bankClient BankClientDTO 0..1 информация о клиенте
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getCurrentForm

Запрос на получение текущей формы. Принимает заполненную пользователем форму и выдаёт её с предзаполненными данными для нее

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
filledForm FilledFormDTO 1..1 заполненная форма с данными
Response:
formDTO FormDTO 1..1 форма следующего шага
filledForm FilledFormDTO 1..1 заполненная форма с данными для formDTO
faultMessage string 0..1 сообщение об ошибке
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getDynamicFieldValues

Запрос на получение отфильтрованных значений по заданному филду

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
fieldId string 1..1 идентификатор поля, по которому нужно вернуть список значений
formId string 1..1 идентификатор формы, на которой расположен данный филд
name string 1..1 фильтр по введенной пользователем строке
value string 0..1 фильтр по значению (должен вернуть один единственный элемент, у которого значение совпадает со значением в запросе)
Response:
values ComboBoxValueDTO 0..1 набор значений для поля, отфильтрованные на основании фильров в запросе
needReload bool 0..1 признак того, что текущая форма должна быть перезагружена
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getEvents

Запрос на получение фидов. Лента, поддерживающая все ключи транзакции, но не сортируется самостоятельно и отображается в зависимости от ключа

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
feedId string 1..1 идентификатор ленты
fromIndex int 0..1 индекс начального элемента в общем списке
toIndex int 0..1 индекс начального элемента в общем списке
Response:
feedEvents FeedEventDTO 0..1 массив событий по запрошенному feed
lastUpdateTime Date ISO 8601 1..1 время последнего обновления данных на клиенте
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getNextForm

Запрос на получение следующей формы в цепочке форм. Принимает заполненную пользователем форму, выдает следующую форму в цепочке вместе с предзаполненными данными для нее

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
filledFormDTO FilledFormDTO 1..1 заполненная форма с данными
Response:
formDTO FormDTO 1..1 форма следующего шага
filledFormDTO FilledFormDTO 1..1 заполненная форма с данными для formDTO
faultMessage string 0..1 сообщение об ошибке
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getNextQuestion

Запрос на получение следующего вопроса по цепочке. Принимает идентификатор предыдущего вопроса и код ответа на предыдущий вопрос, выдает следующий вопрос, результат операции и сообщение.

key type status comment
Request:
bankClientId string 1..1
previousQuestionId string 1..1
previousQuestionAnswerCode string 1..1
Response:
question QuestionDTO 1..1
result string 1..1 результат операции {OK, ERROR}
message string 1..1
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getPaymentForm

Возвращает форму оплаты для получателя с идентификатором beneficiaryId

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
beneficiaryId string 1..1 идентификатор получателя, для которого нужно получить форму
Response:
form FormDTO 0..1 форма данного получателя
filledForm FilledFormDTO 0..1 заполненные поля формы
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует
BeneficiaryNotExistsException string 0..1 получатель с запрошенным beneficiaryId не существует

getPersonalNews

Запрос на получение личных уведомлений и новостей для пользователя. Физически попадает в отдельный раздел меню. Наличие раздела управляется через ключ PERSONAL_NEWS в BANKCLIENTDTO

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
lastUpdateTime Date ISO 8601 1..1 время последнего обновления данных на клиенте
Response:
news PersonalNewsDTO 0..1 список объектов с информацией о счетах
lastUpdateTime Date ISO 8601 1..1 время последнего обновления данных на клиенте
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getProducts

Получение информации о банковских продуктах, которыми пользуется пользователь с запрошенным идентификатором

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
Response:
deposits DepositDTO 0..1 массив объектов с информацией о депозитах
creditAccounts CreditAccountDTO 0..1 массив объектов с информацией о счетах кредитных карт
currentAccounts CurrentAccountDTO 0..1 массив объектов с информацией о текущих счетах
loans LoanDTO 0..1 массив объектов с информацией о кредитах
cardAccounts CardAccountDTO 0..1 массив объектов с информацией о карточных счетах
bonusPoints BonusPointsDTO 0..1 массив объектов с информацией о бонусных счетах
multiCurrencyAccounts MultiCurrencyAccountsDTO 0..1 массив объектов с информацией о мультивалютном счете
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getStandardForms

Запрос возвращает список форм переводов для пользователя с идентификатором bankClientId

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
hash string 1..1 хеш категорий, хранимых на клиенте
Response:
standartForms FormDTO 0..1 список стандартных форм
hash string 0..1 хеш текущего состояния списка
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getTemplates

Запрос возвращает транзакцию пользователя с идентификатором bankClientId

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
Response:
TemplateDTO TemplateDTO 0..1 список форм с предзаполненной информацией для удобства пользователя
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getTransactionDetails

Запрос возвращает список шаблонов пользоватея, принимает идентификатор транзакции, возвращает информацию о транзакции

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
transactionId string 1..1 идентификатор транзакции
Response:
transaction TransactionDTO 1..1
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getTransactionsByDateRange

Request:

<getTransactionsByDateRange>
    <request>
        <bankClientId>bank_client_id</bankClientId>
        <productId>product_id</productId>
        <fromIndex>0</fromIndex>
        <since>2016-08-02T13:50:00+03:00</since>
        <to>2016-08-30T13:50:00+03:00</to>
    </request>
</getTransactionsByDateRange>

Response:

<getTransactionsByDateRangeResponse>
    <return>
        <balanceOnSinceDate type="AmountDTO">
            <currency>RUB</currency>
            <fxAmount>17600</fxAmount>
        </balanceOnSinceDate>
        <balanceOnToDate type="AmountDTO">
            <currency>RUB</currency>
            <fxAmount>-1054122</fxAmount>
        </balanceOnToDate>
        <lastUpdateTime>2015-08-25T21:13:08.000+03:00</lastUpdateTime>
        <transactions type="TransactionDTO">
            #
            # transaction
            #
        </transactions>
        <transactions type="TransactionDTO">
            #
            # transaction
            #
        </transactions>
    </return>
</getTransactionsByDateRangeResponse>

В запрос передается набор фильтров, результатом является список транзакций, отсортированный в порядке убывания даты их выполнения. Каждая из выбранных транзакций удовлетворяет каждому условию фильтра в запросе

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
productId string 1..1 идентификатор продукта
cardId string 0..1 идентификатор карты
fromIndex int 1..1 начиная с какой позиции нужно передать транзакции (при первом запросе - 0)
count int 0..1 максимальное количество транзакций на странице
since Date ISO 8601 1..1 дата начала периода
to Date ISO 8601 1..1 дата конца периода
filter string 0..1 тип фильтрации для транзакций
Response:
transactions TransactionDTO 0..1 список объектов с информацией о транзакциях
lastUpdateTime Date ISO 8601 1..1 дата последней по времени транзакции по продукту из запрашиваемого периода
balanceOnSinceDate AmountDTO 0..1 баланс на начало периода
balanceOnToDate AmountDTO 0..1 баланс на конец периода
Exception:
CardNotExistsException string 0..1 карта с запрошенным cardId не существует
AccountNotExistsException string 0..1 счет с запрошенным productId не существует
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getTransactionsByFilter

<getTransactionsByFilterResponse>
    <return>
        <lastUpdateTime>2015-05-25T21:13:08.000+03:00</lastUpdateTime>
        <transactions type="TransactionDTO">
            #
            # transaction
            #
        </transactions>
        <transactions type="TransactionDTO">
            #
            # transaction
            #
        </transactions>
    </return>
</getTransactionsByFilterResponse>

Результатом является список транзакций, отсортированный на мобильном в порядке убывания даты их выполнения

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
productId string 1..1 идентификатор продукта
cardId string 0..1 идентификатор карты
fromIndex int 0..1 начиная с какой позиции нужно передать транзакции (при первом запросе - 0)
count int 0..1 максимальное количество транзакций на странице
transactionId string 0..1 начиная с какой транзакции нужно передать транзакции
filter string 0..1 тип фильтрации для транзакций
Response:
transactions TransactionDTO 0..1 список объектов с информацией о транзакциях
lastUpdateTime Date ISO 8601 1..1 дата последней по времени транзакции по продукту из запрашиваемого периода
Exception:
CardNotExistsException string 0..1 карта с запрошенным cardId не существует
AccountNotExistsException string 0..1 счет с запрошенным productId не существует
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

getVersion

Запрос без параметров, возвращающий версию серверной апликации

haveUpdates

Проверяет, есть ли обновления списков (есть, если текущее состояние не совпадает с передаваемым)

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
lastUpdateTime Date ISO 8601 1..1 дата последнего обновления
type ObjectType 1..1 тип для проверки
id string 0..1 идентификатор обьекта из поля type (если не указан, то проверяется то обновляется весь список)
Response:
haveUpdates bool 1..1 нужно ли обновлять

ObjectType

key comment
BENEFICIARY_CATEGORIES раздел платежей
STANDARD_FORMS список стандартных форм
PAYMENT_FORM форма и наследник формы

login

Запрос проверяет корректность пары login/password, если пара верна – возвращает идентификатор клиента bankClientId, соответствующий логину на стороне бэка

key type status comment
Request:
login string 1..1 логин
password string 1..1 пароль
validationCode string 0..1 код из SMS, который передаётся только в случае ответа на команду логин с результатом VALIDATION_REQUIRED
deviceInfo DeviceInfoDTO 1..1 дополнительная информация об устройстве
Response:
result resultLoginKey 1..1 результат проверки
bankClientId string 1..1 идентификатор клиента
faultMessage string 0..1 расширенное сообщение об ошибке авторизации

resultLoginKey

key comment
OK все в порядке и можно продолжать
ERROR показывается сообщение из faultMessage
INVALID_CREDENTIALS не верные данные логина/пароля
PASSWORD_CHANGING_REQUIRED необходимо обязательно сменить пароль changePassword
VALIDATION_REQUIRED двухфакторная аутентификация с ожиданием кода из СМС

makeTransfer

www.websequencediagrams.com

participant Bank proxy as b
participant iDa Pro as p
participant Mobile as m
participant PiGeon as pi

p->+b: query form
b->-p: form ( hasNext = false )
p->m:
m->p:
p->b: makeTransfer

alt needConfirmation = true, transferCode = tcode

    b->p:
    b->pi: send confirmCode = ccode
    pi->m:
    m->p:
    p->b: confirmTransfer ( transferCode = tcode, confirmCode = ccode)
    b->p: ok
    p->m:

else needConfirmation = false

    b->p: ok
    p->m:

end

Запрос на совершение платежа, поддерживает два режима – с подтверждением и без. Если необходимо подтверждение платежа, признак needConfirmation должен быть выставлен в true и присутствовать код перевода в transferCode, данный код используется в confirmTransfer для обозначения того, какой перевод мы подтверждаем

image

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
filledForm FilledFormDTO 1..1 заполненная форма с данными
requestId string 1..1 уникальный идентификатор запроса в виде UUID
deviceInfo DeviceInfoDTO 1..1 дополнительная информация об устройстве
Response:
result string 1..1 результат операции {OK, ERROR}
needConfirmation bool 0..1 признак необходимости подтверждения
transferCode string 0..1 код операции
message string 0..1 сообщение об ошибке или иное сообщение
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

deprecated:

faultMessage string 0..1 сообщение об ошибке или иное сообщение
confirmationMessage string 0..1 сообщение об ошибке или иное сообщение

markPersonalNewsRead

Запрос на отметку новостей как прочитанных

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
entityIds string 1..1 список идентификаторов уведомлений (персональных новостей), которые нужно пометить как прочитанные
Response:
result string 0..1 статус выполнения запроса {OK, ERROR}
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

removeTemplate

Удаление шаблона

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
templateId string 1..1 идентификатор шаблона
Response:
result string 1..1 результат выполнения команды {OK, ERROR}
message string 0..1 сообщение об ошибке или иное сообщение
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

requestCommission

Запрос на расчет комиссии по платежу – отправляется заполненная форма с информацией о платеже, результатом работы является ответ, содержащий размер комиссии и валюту

key type status comment
Request:
bankClientId string 1..1 идентификатор клиента
filledForm FilledFormDTO 1..1 заполненная форма с данными
Response:
commission int 1..1 размер комиссии
currencyCode string 1..1 текстовый код валюты по ISO 4217
message string 0..1 сообщение об ошибке или иное сообщение
Exception:
BankClientNotExistsException string 0..1 клиент с запрошенным bankClientId не существует

requestHashedPassword

Запрос проверяет наличие пользователя, если пользователь присутствует – возвращает информацию, необходимую для проверки пароля. Метод используется при построении банком облачной системы, когда проксирующий сервер iDaPro вынесен за периметр банка и необходимо не передавать пароль. В обычной ситуации применяется метод login

key type status comment
Request:
login string 1..1 логин
Response:
result resultHashedPasswordKey 1..1 результат проверки пары логин-пароль
bankClientId string 1..1 идентификатор клиента
method hashMethodKey 1..1 алгоритм генерации hash-кода
salt string 0..1 соль, используемая для хеширования пароля в зависимости от метода шифрования
hash string 1..1 текст, захешированный с солью в зависимости от метода шифрования
faultMessage string 0..1 расширенное сообщение об ошибке

resultHashedPasswordKey

key comment
OK все в порядке и можно продолжать
UNKNOWN_USER не верные данные логина/пароля, показывается сообщение из faultMessage

hashMethodKey

key comment
PLAIN hash-функция не используется, пароль передан в открытом виде
BCRYPT aдаптивная криптографическая функция BCRYPT
SHA2 от пароля взят hash по алгоритму SHA2 (без использования salt)

Data Structs

Используются в общении iDa Pro сервера и Proxy банка

Все платежи, переводы, шаблоны в iDa архитектуре представлены с помощью «ФОРМ». Все данные, которые пользователь может вводить для совершения операций описываются в виде форм, а конкретные введенные пользователем данные – в виде заполненных форм.

Ниже излагается универсальная структура описания форм в системе iDa Mobile. Каждая форма (например, форма денежного перевода) задается кортежем, на который ссылается набор полей формы formField. На кортеж formField может ссылаться некоторое количество кортежей comboBoxValue, которые задают допустимые значение поля формы в случае, если formField.fieldClass = COMBO_BOX.

Следует обратить внимание, что данная структура описывает и хранит не конкретные значения полей форм, а описание структуры формы и типов полей. Конкретные значения хранятся в паре filledForm – formValue.

С помощью форм также можно создавать элемент обратной связи, заявки на продукты и другие распоряжения килента банку

AmountDTO

key type status comment
currency string 1..1 текстовый код валюты по ISO 4217
fxAmount int 1..1 сумма помноженная на 100 для отображения копеек

AnswerDTO

key type status comment
id string 1..1 уникальный идентификатор
text string 1..1 текст ответа
action string 0..1 код действия
code string 1..1 код ответа
order int 0..1 порядок отображения ответов

BankClientDTO

key type status comment
id string 1..1 уникальный идентификатор
firstName string 1..1 имя клиента, например: Иван
lastName string 1..1 фамилия клиента, например: Петров
middleName string 0..1 отчество клиента, например: Андреевич
phoneNumber string 0..1 телефон в международном формате, например 79151234567
email string 0..1 электронная почта клиента
tags MarkerDTO 0..1 дополнительные свойства или настройки

BannerDTO

key type status comment
id string 1..1 уникальный идентификатор
order int 1..1 порядок отображения
title string 0..1 заголовок
text string 0..1 текст
target string 0..1 ссылка для перехода по клику на баннер
placement string 1..1 место размещения
imageURL string 0..1 адрес изображения
type string 0..1 тип баннера

BeneficiaryCategoryDTO

key type status comment
id string 1..1 уникальный идентификатор
name string 1..1 название категории бенефициара
beneficiaries BeneficiaryDTO 1..1 список бенефициаров, входящих в категорию
logoResource LogoResource 0..1 url для доступа к логотипу

BeneficiaryDTO

key type status comment
id string 1..1 уникальный идентификатор
name string 1..1 название бенефициара
formId string 1..1 идентификатор формы платежа, соответствующей бенефициару
logoResource LogoResource 0..1 url для доступа к логотипу

BillDTO

key type status comment
id string 1..1 уникальный идентификатор
name string 1..1 название счета
form FormDTO 1..1 соответствующая счету форма
filledForm FilledFormDTO 1..1 заполненные поля формы
logoResource LogoResource 0..1 url для доступа к логотипу
description string 0..1 описание счета

BonusPointsDTO

key type status comment
id string 1..1 уникальный идентификатор
accountNumber string 1..1 номер продукта в банке
currency string 1..1 текстовый код валюты по ISO 4217
productName string 1..1 название продукта
fxRunningBalance int 1..1 средства на продукте
textMessage string 1..1 описание продукта
tags MarkerDTO 0..1 дополнительные поля
hasRequisites bool 0..1 наличие реквизитов для отправки по смс или почте

CardAccountDTO

key type status comment
id string 1..1 уникальный идентификатор
currency string 1..1 текстовый код валюты по ISO 4217
runningBalance AmountDTO 1..1 доступные средства продукта
feeds FeedDTO 0..1 элементы ленты событий, например графика платежей по кредиту или затраченные поездки на общественном транспорте
tags MarkerDTO 0..1 дополнительные поля
card CardDTO 1..1 карта, привязанных к счету
hasRequisites bool 0..1 наличие реквизитов для отправки по смс или почте

CardDTO

<allCards type="CardDTO">
   <id>card_id</id>
   <blockAllowed>true</blockAllowed>
   <blocked>false</blocked>
   <cardHolder>IVAN IVANOV</cardHolder>
   <cardOwner>Иван Иванов</cardOwner>
   <cardStatus>ACTIVE</cardStatus>
   <cardType>Maestro</cardType>
   <expirationMonth>9</expirationMonth>
   <expirationYear>2015</expirationYear>
   <fxRunningBalance>30000</fxRunningBalance>
   <logoResource>http://static.idamob.ru/pro/cards/${image.type}/ic_card_bg.png</logoResource>
   <maskedCardNumber>**** **** 9633 ****</maskedCardNumber>
</allCards>
key type status comment
id string 1..1 уникальный идентификатор
maskedCardNumber string 1..1 частично маскированный номер карты, например 1111 1111 **** 1111
expirationMonth int 1..1 месяц истечения срока
expirationYear int 1..1 год истечения срока
fxRunningBalance int 0..1 сумма на карте умноженное на 100, при отсутствии берется из счета к которому привязана карты
cardHolder string 0..1 имя держателя карты (как на карте)
logoResource LogoResource 0..1 url для доступа к логотипу
blockAllowed bool 0..1 признак разрешена ли блокировка карты из приложения
blocked bool 0..1 признак состояния блокировки карты
cardType string 1..1 тип карты или название (например Visa Gold, MasterCard)
cardOwner string 0..1 владелец карты
cardStatus string 0..1 статус карты
bonusPointsAmount AmountDTO 0..1 сумма бонусов
customName string 0..1 пользовательское название карты(Например, моя зарплатная карта)
cvv string 0..1 svv код
feeds FeedDTO 0..1 элементы ленты событий, например графика платежей по кредиту или затраченные поездки на общественном транспорте
tags MarkerDTO 0..1 дополнительные обьекты действий

CategoryDTO

key type status comment
name string 0..1 название категории
iconURL string 0..1 адрес изображения
color int 0..1 цвет категории

ComboBoxValueDTO

<comboBoxValues>
  <id>val_id</id>
  <name>Некая надпись для удобства пользователя</name>
  <order>1</order>
  <value>id_for_server</value>
</comboBoxValues>
key type status comment
id string 1..1 уникальный идентификатор поля внутри системы, может быть равен value
name string 1..1 строка или accountNamber или cardId, отображаемая в списке
order int 1..1 порядковый номер значения поля в списке
value string 1..1 значение, которое будет отправляться в прокси в ответе апликации
tags MarkerDTO 0..1 тэги

CreditAccountDTO

key type status comment
id string 1..1 уникальный идентификатор
accountNumber string 1..1 номер продукта в банке
currency string 1..1 текстовый код валюты по ISO 4217
productName string 1..1 название продукта
runningBalance AmountDTO 1..1 доступные средства продукта
feeds FeedDTO 0..1 элементы ленты событий, например графика платежей по кредиту или затраченные поездки на общественном транспорте
tags MarkerDTO 0..1 дополнительные поля
mainCardId string 0..1 основная карта, привязанная к счету
allCards CardDTO 0..1 список всех карт, привязанных к счету
hasRequisites bool 0..1 наличие реквизитов для отправки по смс или почте

deprecated:

openingDate Date ISO 8601 0..1
creditLimit AmountDTO 1..1
blockedAmount AmountDTO 0..1
penaltyAmount AmountDTO 0..1
contractNumber string 0..1
contractStatus string 0..1
status string 0..1

CreditPlanDTO

key type status comment
id string 1..1 идентификатор кредитного плана
amount AmountDTO 1..1 сумма с указанием валюты
paymentDate Date ISO 8601 1..1 дата платежа
status [CreditPlanStatus] 1..1 состояние платежа (PENDING, COMPLETED, OVERDUE)
rateAmount Amount 0..1 сумма процентов по платежу

CurrentAccountDTO

<currentAccounts type="CurrentAccountDTO">
   <id>current_accounts_id</id>
   <accountNumber>78595893712734543353</accountNumber>
   <allCards type="CardDTO">
      #
      # CardDTO
      #
   </allCards>
   <allCards type="CardDTO">
      #
      # CardDTO
      #
   </allCards>
   <blockedAmount type="AmountDTO">
      <currency>EUR</currency>
      <fxAmount>50000</fxAmount>
   </blockedAmount>
   <currency>EUR</currency>
   <hasRequisites>false</hasRequisites>
   <mainCardId>card_id</mainCardId>
   <productName>Credit account</productName>
   <runningBalance type="AmountDTO">
      <currency>EUR</currency>
      <fxAmount>123456</fxAmount>
   </runningBalance>
</currentAccounts>
key type status comment
id string 1..1 уникальный идентификатор
accountNumber string 1..1 номер продукта в банке
currency string 1..1 текстовый код валюты по ISO 4217
productName string 1..1 название продукта
runningBalance AmountDTO 1..1 доступные средства продукта
feeds FeedDTO 0..1 элементы ленты событий, например графика платежей по кредиту или затраченные поездки на общественном транспорте
tags MarkerDTO 0..1 дополнительные поля
mainCardId string 0..1 основная карта, привязанная к счету
allCards CardDTO 0..1 список всех карт, привязанных к счету
hasRequisites bool 0..1 наличие реквизитов для отправки по смс или почте

deprecated:

openingDate Date ISO 8601 0..1
balance AmountDTO 0..1
overdraftLimit AmountDTO 0..1
blockedAmount AmountDTO 0..1
contractNumber string 0..1
contractStatus string 0..1
status string 0..1

DepositDTO

<deposits type="DepositDTO">
    <id>deposit_id</id>
    <accountNumber>78595893712734543344</accountNumber>
    <autoRenewal>true</autoRenewal>
    <capitalization>true</capitalization>
    <capitalizationTerm nil="true"/>
    <currency>EUR</currency>
    <fxInterestRate>102342</fxInterestRate>
    <hasRequisites>false</hasRequisites>
    <initialAmount type="AmountDTO">
        <currency>EUR</currency>
        <fxAmount>100000</fxAmount>
    </initialAmount>
    <mainCardId nil="true"/>
    <maturityDate>2013-05-24T00:00:00.000+03:00</maturityDate>
    <openingDate>2012-05-24T00:00:00.000+03:00</openingDate>
    <period>180</period>
    <productName>deposit_name</productName>
    <runningBalance type="AmountDTO">
        <currency>EUR</currency>
        <fxAmount>920723</fxAmount>
    </runningBalance>
    <status>ACTIVE</status>
</deposits>
key type status comment
id string 1..1 уникальный идентификатор
accountNumber string 1..1 номер продукта в банке
currency string 1..1 текстовый код валюты по ISO 4217
productName string 1..1 название продукта
runningBalance AmountDTO 1..1 средства на продукте
feeds FeedDTO 0..1 элементы ленты событий, например графика платежей по кредиту или затраченные поездки на общественном транспорте
tags MarkerDTO 0..1 дополнительные поля
mainCardId string 0..1 основная карта, привязанная к счету
allCards CardDTO 0..1 список всех карт, привязанных к счету
hasRequisites bool 0..1 наличие реквизитов для отправки по смс или почте
openingDate Date ISO 8601 1..1 дата открытия
period int 1..1 период начисления процентов в месяцах
interestRate AmountDTO 1..1 процентая ставка

deprecated:

fxInterestRate int 1..1
maturityDate int 0..1
contractNumber string 0..1
contractStatus string 0..1
initialAmount AmountDTO 0..1
accruedInterest AmountDTO 0..1
autoRenewal bool 0..1
capitalization bool 0..1
capitalizationTerm string 0..1
status string 0..1

DetailsSectionDTO

key type status comment
name string 0..1 название
fields DetailsFieldDTO 1..1 дополнительные поля

DeviceInfoDTO

iPhone

<deviceInfo>
    IP=10.7.17.104;
    OS=IOS;
    APP_VERSION=1.0.23;
    VENDOR_ID=EDC2C767-31DC-4095-82B1-71890EE2778B;
    LOCALE=ru-RU;
    OS_VERSION=10.3
</deviceInfo>

Android

<deviceInfo>
    IP=10.40.116.222;
    OS=ANDROID;
    APP_VERSION=3.1.943;
    VENDOR_ID=353490066235256;
    MAC=BE:BD:61:2B:F3:B9;
    LOCALE=RU;
    OS_VERSION=5.1.1
</deviceInfo>

Дополнительная информация о девайсе пользователя

key type status comment
IP string 1..1 IP адрес устройства в случае его доступности или 0.0.0.0
APP_VERSION string 1..1 версия приложения, например 1.2.3
OS string 1..1 операционная система { IOS, ANDROID }
VENDOR_ID string 1..1 уникальный идентификатор устройства
LOCALE string 0..1 локаль телефона
MAC string 0..1 приходит если доступно получение значения от устройства
EXTERNAL_IP string 0..1 IP адрес устройства в случае его доступности или 0.0.0.0
OS_VERSION string 0..1 версия операционной системы, например 1.2.3

Уточнение по получению данных параметров:

key ios android
VENDOR_ID identifierForVendor getDeviceId or ANDROID_ID
IP NSHost getInetAddresses
MAC 02:00:00:00:00:00 getHardwareAddress

FeedDTO

<feeds type="FeedDTO">
  <id>amount_id</id>
  <title>% по депозиту</title>
  <type>DEPOSIT_PRODUCT</type>
</feeds>

Список фидов не сортируется на мобильных клиентах, а отображается в том порядке, в котором приходит с сервера

key type status comment
title string 1..1 наименование фида
type FeedType 1..1 тип ячейки в ленте

FeedType

key comment
LOAN_PRODUCT график погашения кредита
DEPOSIT_PRODUCT график начисления процентов по депозиту
TRANSPORT_CARD транспортаня карта
CREDIT_PLAN рассрочка

FeedEventDTO

<feedEvents type="FeedEventDTO">
    <fields>
        <key>name</key>
        <value>Очередной платеж</value>
    </fields>
    <fields>
        <key>fxAmount</key>
        <value>10003401</value>
    </fields>
    <fields>
        <key>postDate</key>
        <value>1398470400000</value>
    </fields>
    <fields>
        <key>currency</key>
        <value>USD</value>
    </fields>
    <id>feed_event_id</id>
</feedEvents>

Элемент ленты

key type status comment
id string 1..1 идентификатор
fields FeedField 0..1 массив, содержащая расширяемый список параметров для конкретного события, мапится ключами на TransactionDTO

FeedField

key type status comment
key string 1..1 ключ
value string 1..1 значение

FilledFormDTO

Универсальный механизм используется и для многошаговой формы и для одношаговой с заполненными значениями с нуля

key type status comment
id string 1..1 идентификатор заполненной формы
formId string 1..1 идентификатор соответствующей формы
values FieldValueDTO 1..1 набор сохраненных значений полей в данной заполненной форме

FieldValueDTO

key type status comment
id string 1..1 идентификатор заполненного поля
formFieldId string 1..1 идентификатор соответствующего поля FormFieldDTO формы FormDTO
value string 1..1 сохраненное значение поля. Формат содержимого зависит от значения fieldClass соответствующего поля формы

FormDTO

<form type="FormDTO">
  <id>form_id</id>
  <beneficiaryId nil="true">
    <fields>
      #
      # fields
      #
    </fields>
    <fields>
      #
      # fields
      #
    </fields>
  <hasNext>true</hasNext>
  <logoResource>http://idamob.ru/ic.png</logoResource>
  <name>Form name</name>
  <position nil="true"/>
  <requiresCommission>false</requiresCommission>
  <type>PAYMENT</type>
  <formUrl>
    <openUrl>https://doc.idamob.ru</openUrl>
    <closeUrl>https://doc.idamob.ru/pro</closeUrl>
  </formUrl>
</form>
key type status comment
id string 1..1 идентификатор формы
name string 1..1 название формы
beneficiaryId string 0..1 идентификатор получателя, соответствующий форме
fields FormFieldDTO 1..1 список всех полей на форме
type FormType 1..1 тип формы для переходов или идентификатор (может быть не уникальный)
hasNext bool 1..1 признак наличия следующей формы. Если значение поля равно TRUE, то при заполнении данной формы клиент запросит с сервера следующую форму вместо запроса на осуществление платежа
requiresCommission bool 0..1 признак необходимости запроса комиссии с сервера с помощью метода requestCommission
logoResource LogoResource 0..1 url для доступа к логотипу
position FormPosition 0..1 расположение формы для ряда уникальных кейсов
showConfirmation bool 0..1 показ экрана подтверждения
formUrl FormURL 0..1 параметры webView
group string 0..1 группа
tags MarkerDTO 0..1 тэги
withoutContinue bool 0..1 без продолжения
style string 0..1 стиль
sortOrder int 0..1 порядок сортировки
continueLabel string 0..1 надпись на кнопке “Продолжить”
autoContinueAfter int 0..1 количество секунд, после которых будет нажата кнопка “Продолжить”
continueAction string 0..1 действие, выполняемое по нажатии на кнопку “Продолжить” (SUBMIT - отправка данных на сервер, CLOSE - закрытие формы)
extendedError bool 0..1 выводить расширенную ошибку

FormType

key comment
id любое значение, может быть не уникальное, например TRANSFER, PAYMENT
TRANSFER_CURRENCY_EXCHANGE форма для обмена валют через раздел курсы банка
TRANSFER_BY_PHONE форма для раздела оплаты по номеру телефона (всегда HIDDEN), при ее наличии появляется раздел перевода по номеру телефона
TRANSFER_FROM_MENU форма отобразится в боковом меню

FormPosition

key comment
HIDDEN форма не видна в списках, но на нее возможен переход через таргет продукта или пуш сообщения
PRODUCT_ORDER форма попадает в отдельный раздел бокового меню с поддержкой расширенного вида строки из LogoResource

FormURL

key status comment
openUrl 1..1 Url, который требуется открыть на клиенте
closeUrl 0..1 Url финальной страницы

FormFieldDTO

<fields type="FormFieldDTO">
  <id>field_id</id>
  <comboBoxValues>
    <id>val_1_id</id>
    <name>product_1</name>
    <order>1</order>
    <value>40817810200005239000</value>
  </comboBoxValues>
  <comboBoxValues>
    <id>val_2_id</id>
    <name>product_2</name>
    <order>2</order>
    <value>40817810500005239001</value>
  </comboBoxValues>
  <defaultValue nil="true" />
  <errorMessage nil="true" />
  <fieldClass>SOURCE_ACCOUNT</fieldClass>
  <formOrder>1</formOrder>
  <groupName nil="true" />
  <hint nil="true" />
  <mandatory>true</mandatory>
  <maxLimit nil="true" />
  <minLimit nil="true" />
  <name>Счет списания</name>
  <readOnly>false</readOnly>
  <regExp nil="true" />
</fields>
<fields type="FormFieldDTO">
  <id>field_id</id>
  <defaultValue nil="true" />
  <errorMessage nil="true" />
  <fieldClass>AMOUNT</fieldClass>
  <formOrder>1</formOrder>
  <groupName nil="true" />
  <hint nil="true" />
  <mandatory>true</mandatory>
  <maxLimit>922337203685477</maxLimit>
  <minLimit>0</minLimit>
  <name>Сумма списания</name>
  <readOnly>false</readOnly>
  <regExp nil="true" />
</fields>
key type status comment
id string 1..1 идентификатор поля
fieldClass FieldClass 1..1 тип поля формы, определяющий формат данных
mandatory bool 1..1 обязательность поле формы
formOrder int 1..1 порядковый номер поля в форме
name string 1..1 название поля
minLimit int 0..1 в зависимости от типа поля это ограничения на значение поля формы
maxLimit int 0..1 в зависимости от типа поля это ограничения на значение поля формы
regExp string 0..1 регулярное выражение, которому должно соответствовать значение поля и в случае несоответствия показывается errorMessage
defaultValue string 0..1 значение поля по умолчанию
errorMessage string 0..1 сообщение в случае, если значение поля формы не проходит валидацию
hint string 0..1 отображаемая подсказка к полю
placeholder string 0..1 отображаемое внутри поля
comboBoxValues ComboBoxValueDTO 0..1 список значений
readOnly bool 0..1 признак редактируемости
mask string 0..1 маска вида *** **-** применимо для полей класса NUMERIC, SINGLE_LINE_TEXT, позволяет вводить символы только в области *
additionalFields MarkerDTO 0..1 список маркеров

FieldClass

key type comment
SOURCE_ACCOUNT string список идентификаторов продуктов в виде ComboBoxValueDTO выбора 1..*
TARGET_ACCOUNT string список идентификаторов продуктов в виде ComboBoxValueDTO выбора 1..*
SINGLE_LINE_TEXT string однострочный текст
MULTI_LINE_TEXT string многострочный текст
CHECK_BOX bool чекбокс {true, false} (поддерживает в name ссылку в формате <a href="http://www.idamob.ru">iDa Mobile</a>)
PASSWORD string однострочный текст маскированный при вводе
MONTH_YEAR string UNIXTIME в милисекундах
DATE int UNIXTIME в милисекундах (например 1394582400000)
COMBO_BOX string список строк для comboBoxValues выбора 1..*
AMOUNT int ddddd (умноженное на 100) с валютой и проверкой на остаток средств из SOURCE_ACCOUNT
MONEY int ddddd (умноженное на 100) с валютой из SOURCE_ACCOUNT
PHONE int номер телефона (например 71231231212)
PRINTED_TEXT string текст пояснение без возможности редактирования пользователем
PHOTO_CARD string ввода номера карты с элементом фотографирования карты библиотекой card.io и маской **** **** **** ****, так же в дополнение для поля используется проверка алгоритмом Луна
PHOTO_QRCODE string информация, зашифрованную в QR-коде
IMAGE LogoResource картинка
HIDDEN string скрытое поле для технического применения
NUMERIC int чесло без дроби (например 13945824)
DECIMAL string число с любой дробной частью (например 1382432.93342)
DYNAMIC string поле при вводе 2х символов делает запрос getDynamicFieldValues и в случае признака необходимости обновления текущей формы делает запрос getCurrentForm
QRCODE_GENERATOR string поле сенерирует QR-коде из значения value
STORED_FILE base64 string файл, хранимый в Resource Server
SWITCH bool двухпозиционный переключатель (тумблер)
RADIO_BUTTON string радио-кнопка, работающая по принципу COMBO_BOX
TRACK_BAR int ползунок, позволяющий выбрать значение из диапазона minLimit и maxLimit
CARD_VIEW string представление карты для отображения на форме
PIN_CODE string компонент для ввода цифрового пин-кода
LIST_BOX string открытый список, работающий по принципу COMBO_BOX

LoanDTO

key type status comment
id string 1..1 идентификатор продукта
accountNumber string 1..1 номер продукта в банке
currency string 1..1 текстовый код валюты по ISO 4217
productName string 1..1 название продукта
fxRemainderAmount int 1..1 средства на продукте
feeds FeedDTO 0..1 элементы ленты событий, например графика платежей по кредиту или затраченные поездки на общественном транспорте
tags MarkerDTO 0..1 дополнительные поля
mainCardId string 0..1 основная карта, привязанная к счету
allCards CardDTO 0..1 список всех карт, привязанных к счету
hasRequisites bool 0..1 наличие реквизитов для отправки по смс или почте

deprecated:

openingDate Date ISO 8601 0..1
remainderAmount AmountDTO 1..1
initialAmount AmountDTO 0..1
contractNumber string 0..1
contractStatus string 0..1
penaltyAmount AmountDTO 0..1
nextPaymentDate Date ISO 8601 0..1
nextPaymentAmount AmountDTO 0..1
monthlyPaymentAmount AmountDTO 0..1
advancedRepaymentMoratorium int 0..1
accruedInterest AmountDTO 0..1
overallArrearsAmount AmountDTO 0..1
status string 0..1

LogoResource

URL для доступа к логотипу распознает параметр для удобства расположения на сервере и оптимизации размеров - http://…/${image.type}/name.png и будет автоматически в зависимости от платформы подменять его на ios-small или android-small

size .type comment
64х64 small картинка для списка форм
90х60 small картинка логотипа карты (VISA, MasterCard…) отображаемая на карте и в списке продуктов
640х380 big картинка фона пластиковой карты
640х320 big картинка баннера в форме
640х320 small картинка баннера в новостях
640х128 big картинка фона формы (используется в SPECIAL_ORDERS) для большей наглядности
comment size url
proxy response http://static.idamob.ru/pro/cards/${image.type}/ic_visa.png
iPhone convert 90х60 http://static.idamob.ru/pro/cards/ios-small/ic_visa.png
640х380 http://static.idamob.ru/pro/cards/ios-big/ic_visa.png
Android convert 90х60 http://static.idamob.ru/pro/cards/android-small/ic_visa.png
640х380 http://static.idamob.ru/pro/cards/android-big/ic_visa.png

MarkerDTO

key type status comment
key string 1..1 идентификатор маркера
value string 0..1 информация, привязанная к маркеру

BankClientDTO support MarkerDTO:

<tags type="MarkerDTO">
  <key>FINANCIAL_REPORTS</key>
  <value>Financial reports</value>
</tags>
key type comment
SPECIAL_ORDERS string наличие раздела в боковом меню с именем String, в который собираются формы с признаком PRODUCT_ORDER
FINANCIAL_REPORTS string наличие в меню раздела финансовой аналитики, запрос на аналитику идет через getTransactionsByDateRange с полем id продукта FINANCIAL_REPORTS
PERSONAL_NEWS string наличие в меню раздела персональных новостей или уведомлений о событиях

AccountDTO, CardDTO, DepositDTO, LoanDTO support MarkerDTO:

<tags type="MarkerDTO">
  <key>BUTTON_1_TEXT</key>
  <value>Payments</value>
</tags>
<tags type="MarkerDTO">
  <key>BUTTON_1_TARGET</key>
  <value>payment_short</value>
</tags>
<tags type="MarkerDTO">
  <key>BUTTON_2_TEXT</key>
  <value>Transfer by phone</value>
</tags>
<tags type="MarkerDTO">
  <key>BUTTON_2_TARGET</key>
  <value>form</value>
</tags>
key type status comment
BUTTON_1_TEXT string 1..1 текст подсказки на кнопке
BUTTON_1_TARGET TargetType 1..1 переход по нажатию кнопки
ANALYTICS string 0..1 наличие на продукте кнопки перехода на экран аналитики

TargetType

key comment
payment_full раздел платежей полностью
payment_short платежный раздел короткий
form открытие формы

MerchantDTO

key type status comment
logoURL string 0..1 ссылка на логотип продавца
name string 0..1 наименование продавца

MultiCurrencyAccountsDTO

<multiCurrencyAccounts type="MultiCurrencyCurrentAccountDTO">
   <id>multiCurrencyAccount_id</id>
   <accountNumber>73732929394</accountNumber>
   <currency>RUB</currency>
   <fxConsolidateBalance>100000</fxConsolidateBalance>
   <openingDate>2014-09-23T00:00:00.000+03:00</openingDate>
   <productName>Multi currency account</productName>
   <subAccounts type="CurrentAccountDTO">
      <id>subAccounts_id</id>
      <accountNumber>324234234234</accountNumber>
      <currency>RUB</currency>
      <productName>MultiCurrency-RUB</productName>
      <runningBalance type="AmountDTO">
         <currency>RUB</currency>
         <fxAmount>34567</fxAmount>
      </runningBalance>
   </subAccounts>
   <subAccounts type="CurrentAccountDTO">
      <id>subAccounts_id</id>
      <accountNumber>345435345435</accountNumber>
      <currency>USD</currency>
      <productName>MultiCurrency-USD</productName>
      <runningBalance type="AmountDTO">
         <currency>USD</currency>
         <fxAmount>11432</fxAmount>
      </runningBalance>
   </subAccounts>
</multiCurrencyAccounts>
key type status comment
id string 1..1 уникальный идентификатор
accountNumber string 1..1 номер продукта в банке
currency string 1..1 текстовый код валюты по ISO 4217
productName string 1..1 название продукта
subAccounts CurrentAccountDTO 0..1 набор подсчетов в разных валютах
fxConsolidateBalance int 0..1 средства на продукте
feeds FeedDTO 0..1 элементы ленты событий, например графика платежей по кредиту или затраченные поездки на общественном транспорте
tags MarkerDTO 0..1 дополнительные поля
mainCardId string 0..1 основная карта, привязанная к счету
allCards CardDTO 0..1 список всех карт, привязанных к счету
hasRequisites bool 0..1 наличие реквизитов для отправки по смс или почте

deprecated:

openingDate Date ISO 8601 0..1
contractNumber string 0..1
contractStatus string 0..1
status string 0..1

PersonalNewsActionDTO

key type status comment
code string 1..1 код действия
place string 1..1 место размещения
url string 0..1 ссылка, которая должна быть открыта при выборе данного действия

PersonalNewsDTO

<details>
   <entry>
     <key>logo_url</key>
     <value>http://www.idamob.ru/ic.png</value>
   </entry>
   <entry>
     <key>push_description</key>
     <value>Текстовый блок с некоторым описанием</value>
   </entry>
   <entry>
     <key>name</key>
     <value>Заголовок сообщения</value>
   </entry>
   <entry>
     <key>currency</key>
     <value>100000000</value>
   </entry>
   <entry>
     <key>fxAmount</key>
     <value>RUR</value>
   </entry>
   <entry>
     <key>Период</key>
     <value>3 года</value>
   </entry>
   <entry>
     <key>Процент</key>
     <value>3%</value>
   </entry>
</details>
key type status comment
entityId string 1..1 уникальный идентификатор новости
title string 1..1 заголовок новости
creationDate Date ISO 8601 1..1 дата публикации новости
preview string 0..1 укороченная версия новости
isRead bool 0..1 признак прочитанности
url string 0..1 ссылка на новость в интернет
details string 0..1 тело сообщения после открытия, функционал аналогичен ключами и структурой pushDetails
type string 0..1 тип (принимает знаечние null или MARKETING)
place string 0..1 место размещения маркетингового сообщения
contentType string 0..1 тип контента (TEXT или IMAGE)
content string 0..1 контент (либо текст для отображения, либо ссылка на картинку)
sortOrder int 0..1 порядок отображения
bgColor string 0..1 цвет фона
actions PersonalNewsActionDTO 0..1 список действий

QuestionDTO

key type status comment
id string 1..1 уникальный идентификатор
text string 1..1 текст вопроса
answers AnswerDTO 1..1 ответы на вопрос
canHide bool 0..1 возможность свернуть вопрос
title string 0..1 заголовок

TagDTO

key type status comment
key string 1..1 ключ
value string 1..1 значение

TemplateDTO

<templates type="TemplateDTO">
  <id>template</id>
  <filledForm type="FilledFormDTO">
    <id>filled_form_1</id>
    <formId>form_1</formId>
    <values type="FieldValueDTO">
      <id>form_1_2_val</id>
      <formFieldId>form_1_2</formFieldId>
      <value>1000000</value>
    </values>
  </filledForm>
  <form type="FormDTO">
    <id>form_1</id>
    <fields type="FormFieldDTO">
      <id>form_1_2</id>
      <fieldClass>MONEY</fieldClass>
      <formOrder>2</formOrder>
      <name>Amount</name>
    </fields>
    <hasNext>false</hasNext>
    <name>Transfer</name>
    <requiresCommission>false</requiresCommission>
    <showConfirmation>false</showConfirmation>
    <type>TRANSFER</type>
  </form>
  <logoResource nil="true"/>
  <name>To Credit</name>
</templates>
key type status comment
id string 1..1 идентификатор шаблона
name string 1..1 название шаблона
form FormDTO 1..1 соответствующая шаблону форма
filledForm FilledFormDTO 1..1 заполненные поля формы
logoResource LogoResource 0..1 url для доступа к логотипу

TransactionDTO

<transactions type="TransactionDTO">
    <id>f0dd6cd9-6b38-4a3c-b7b7-9826d3fe4f79</id>
    <authorization>false</authorization>
    <billingAmount type="AmountDTO">
        <currency>RUB</currency>
        <fxAmount>-84900</fxAmount>
    </billingAmount>
    <name>Оплата BEELINE для телефона +7(910)123-45-67</name>
    <description>BEELINE SOTOVAYA SVYAZ MOSKVA</description>
    <filledFormId>filled_form_id</filledFormId>
    <executionDate>2015-05-25T21:13:08.000+03:00</executionDate>
    <postDate>2015-05-25T21:13:08.000+03:00</postDate>
    <status>ACCEPTED</status>
    <sic>4814</sic>
    <tags nil="true"/>
    <transactionAmount type="AmountDTO">
        <currency>RUB</currency>
        <fxAmount>-84000</fxAmount>
    </transactionAmount>
</transactions>
key type status comment
id string 1..1 идентификатор операции
name string 0..1 наименование операции
transactionAmount AmountDTO 1..1 сумма в валюте операции
billingAmount AmountDTO 1..1 сумма в валюте счета
postDate Date ISO 8601 1..1 дата создания заявки на проведение операции
executionDate Date ISO 8601 0..1 дата исполнения операции
description string 1..1 детали операции
status TransactionStatus 1..1 текущий статус транзакции
isOutgoing bool 0..1 операция переводит деньги СО счета
filledFormId string 0..1 идентификатор соответствующей заполненной формы возвращаемый на запрос getPaymentForm
tags MarkerDTO 0..1 дополнительные поля
isAuthorization bool 1..1 операция авторизации
cardId string 0..1 ID карты, с которой связана данная транзакция
sic int 0..1 mcc код из процессинга для SmartTransaction
bonusPointsAmount AmountDTO 0..1 сумма бонусов
usedBonusPointsAmount AmountDTO 0..1 сумма использованных бонусов
creditPlans CreditPlanDTO 0..1 список платежей по кредиту
creditPlansFormId string 0..1 идентификатор соответствующей оформлению кредита заполненной формы возвращаемый на запрос getPaymentForm
transactionCurrency string 0..1 валюта операции
merchant MerchantDTO 0..1 продавец
category CategoryDTO 0..1 категория оплаченного товара
needLoadCreditPlans bool 0..1 необходимость в отдельной загрузке графика платежа(для функционала рассрочки)
receiptUrl string 0..1 URL для загрузки чека по операции
installmentStatus string 0..1 статус рассрочки по транзакции

TransactionStatus

key comment
POSTED нет
ACCEPTED серый
HOLD желтый
REJECTED красный
COMPLETE зеленый

System requirements

Hardware

CPU 4 core x 2200 Mhz x64
RAM 8 Gb
HDD 120 Gb

Software

OS Linux or Windows based (Ubuntu 15 is recomended)
JVM Oracle Java 7 or higher
RDBMS PostgreSQL 9.3 or higher
Servlet container Apache Tomcat 7

FAQ

Pro Install

Порядок установки серверной части iDa Mobile

Общие шаги

  1. Произвести установку СУБД PostgresSQL
  2. При помощи утилиты pgAdmin (обычно входит в дистрибутив PostgreSQL) подключиться к СУБД
  3. Создать новую роль (пользователя)
  4. Создать новую БД с указанием созданной в п.3 роли в качестве владельца создаваемой БД
  5. В созданной БД добавить схемы с названиями: lightschema, proschema
  6. Установить Apache Tomcat
  7. При желании - настроить работу Apache Tomcat с протоколом SSL (можно выполнить позднее)
  8. Открыть файл .war при помощи ZIP-архиватора и перейти в подпапку “.war\WEB-INF\classes\META-INF”
  9. Открыть файл persistence.xml и внести соответствующие правки, необходимые для подключения к БД (параметры: hibernate.connection.url, hibernate.connection.username, hibernate.connection.password).
  10. Заменить в *.war файле persistence.xml на тот, который был отредактирован в п.3
  11. Запустить Apache Tomcat (в случае с linux - ./tomcat/bin/startup.sh, в случае с windows вомпользоваться специальной системной службой)

Установка iDa Pro

  1. В подпапке pro.war\WEB-INF\classes\config открыть конфигурационный файл банка (Например, bank.properties) и проверить корректность значений параметров proxy.wsdl, proxy.service, proxy.endpoint а так же проверить доступность значения параметра proxy.wsdl с машины, на которой будет запущен iDa Pro. В случае внесения изменений в файл *.properties - сохранить новую версию этого файла в pro.war
  2. Скопировать файл pro.war в папку /tomcat/webapps и дождаться пока будет автоматически создана подпапка /Pro
  3. Открыть через pgAdmin требуемую БД и проверить, что в схеме proschema добавились таблицы
  4. Проверить работоспособность приложения с помощью настроенного мобильного клиента

Порядок обновления серверной части iDa Mobile (*.war)

  1. Получить новую сборку в виде файла *.war
  2. Открыть файл .war при помощи ZIP-архиватора и перейти в подпапку “.war\WEB-INF\classes\META-INF”
  3. Открыть файл persistence.xml и внести соответствующие правки, необходимые для подключения к БД (параметры: hibernate.connection.url, hibernate.connection.username, hibernate.connection.password).
  4. Заменить в *.war файле persistence.xml на тот, который был отредактирован в п.3
  5. Убедится, что серверй приложений Tomcat запущен (в linux - ps -ef|grep tomcat</code>). Если не запущен - запустить его (в linux - ./tomcat/bin/startup.sh).
  6. Перейти в папку tomcat/webapps
  7. В случае наличия в ней старой версии iDa - удалить файл *.war и дождаться пока папка обновляемого приложения удалится автоматически (~ 15 секунд)
  8. Скопировать в папку /tomcat/webapps/ полученный в п.4 файл *.war
  9. Дождаться пока в папке /tomcat/webapps появится папка с наименованием приложения (~ 15 секунд)
  10. Осуществить проверку работы приложения при помощи настроенного мобильного клиента

Пример wsdl

pro - IdaMobProxyServiceFacade?wsdl

Версия сервера

pro - version/getVersion

Multi-server

Рекомендация по развертыванию нескольких серверов на одной машине

  1. Повторно выполнить шаги 3, 4, 5 из раздела ‘Порядок установки серверной части iDa Mobile’ для создания ещё одной копии схемы БД
  2. В Apache TomCat задеплоить копии pro.war и light.war предварительно переименовав их, например в pro_new.war и light_new.war
  3. Установить фронт-серверное приложение, например, nginx или Apache HTTPD
  4. Настроить дополнительный домен, например, если у вас используется домен ida.mybank.com для мобильных приложений, то нужно создать домен ida_new.mybank.com, который так-же будет ссылаться на IP настраиваемого сервера
  5. Произвести настройку фронт-сервера таким образом, что бы траффик для домена ida.mybank.com перенаправлялся на localhost:8080/pro (8080 - порт TomCat по умолчанию), а траффик ida_new.mybank.com направлялся на localhost:8080/pro_new. Пример подобной настройки nginx

Server config

smarttransactions.enabled=false
proxy.timeout=60000
proxy.login.case.insensitive=true

proxy.wsdl=http://dev.idamob.ru/proxy/services/IdaMobProxyServiceFacade?wsdl
proxy.service=IdaProServiceFacade
proxy.endpoint=BasicHttpBinding_IdaMobProxyServiceFacadePortType

security.password.hash=false
security.password.encrypt=false
security.verification.encrypt=false

pro.banner.enabled=false

pigeon.enabled=false
pigeon.url=http://dev.idamob.ru/pigeon
pigeon.twoFactorAuth=false

Конфиг сервера

Все настройки сервиса задаются через файл конфигурирования, который расположен по адресу pro.war\WEB-INF\classes\config\bank.properties путём добавления следующих параметров:

key type comment
smarttransactions.enabled bool наличие модуля SmartTransactions
proxy.timeout int время ожидания отвера сервера из бэка, в милесекундах (должно быть так же установлено в мобильной апликации)
proxy.login.case.insensitive bool признак чуствительности к регистру для логина
-
proxy.wsdl string ${bank.proxy.wsdl}
proxy.service string IdaMobProxyServiceFacade
proxy.endpoint string IdaMobProxyServiceFacadeHttpSoap12Endpoint
-
security.password.hash bool наличие запроса хэш пароля и алгоритм как он был получен requestHashedPassword. на сервере pro происходит проверка совпадают ли хеши полученные с клиента и с сервера банка
security.password.encrypt bool расшифровывать пароль, зашифрованный на мобильном криенте
security.verification.encrypt bool расшифровывать код из запроса confirmTransfer, зашифрованный на мобильном криенте
security.incorrect_login_attempts int количество неверных попыток ввода ПИН кода
-
pigeon.url string сервер пушей http://dev.idamob.ru/pigeon
pigeon.enabled bool наличие связки с сервером пуш сообщений PiGeon
pigeon.twoFactorAuth bool наличие процесса двухфакторной аутентификации при подписке пользователя на пуш уведомления
pigeon.repeatSubscriptionAfter int повторить запрос регистрации при отказе (дни)
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
             xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

    <persistence-unit name="jpaUnit" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>

        <class>com.idamobile.platform.pro.model.Session</class>
        <class>com.idamobile.platform.pro.model.SecretKey</class>
        <class>com.idamobile.platform.pro.model.PinCode</class>
        <class>com.idamobile.platform.pro.model.User</class>
        <class>com.idamobile.platform.pro.model.IncorrectLoginAttempt</class>
        <class>com.idamobile.platform.pro.model.DeviceVerificationCode</class>
        <class>com.idamobile.platform.pro.model.DeviceVerificationCodeSalt</class>

        <!--POSTGRESQL-->
        <properties>
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
            <property name="hibernate.connection.url" value="jdbc:postgresql://127.0.0.1/proproxytestbase" />
            <property name="hibernate.connection.username" value="username" />
            <property name="hibernate.connection.password" value="password" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL82Dialect" />
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="hibernate.show_sql" value="false"/>
        </properties>
    </persistence-unit>
</persistence>

Конфиг базы

Все настройки базы задаются через файл конфигурирования, который расположен по адресу pro.war/WEB-INF/classes/META-INF/persistence.xml путём добавления следующих параметров:

key type comment
hibernate.connection.url string адрес расположения базы банных
hibernate.connection.username string логин к базе
hibernate.connection.password string пароль к базе

Удаление сессий пользователя

В случае если у пользователя сменился логин, но не поменялся bankClientId, вход под новым логином будет невозможен. Для того что бы очистить данные по старому логну LOGIN нужно выполнить скрипт в proschema:

select id from proschema.bank_user usr where usr.login = 'LOGIN'
от результата этого запроса подставьте вместо #ID# нижеследующих запросах
delete from proschema.secret_key sc where sc.session_id in (select id from proschema.user_session ses where ses.user_id = '#ID#')
delete from proschema.user_session ses where ses.user_id = '#ID#'
delete from proschema.device_verification_code dvc where dvc.user_id = '#ID#'
delete from proschema.device_verification_code_salt dvc where dvc.user_id = '#ID#'
delete from proschema.bank_user usr where usr.id = '#ID#'