NAV
cURL PHP Java Perl C#

Инструкция по подключению

Общая информация

Enterprise Link PRO позволяет иметь информационный доступ к транзакциям, а также передавать в Банк подписанные распоряжения для последующего исполнения.

Активизация сервиса

Для подключения услуги, в настройках iRietumu выберите счёт и нажмите «Активизировать».

Выберите вид услуги «Просмотр и передача платежных распоряжений (PRO)». Введите одноразовый пароль с брелока и нажмите «Подтвердить».

Скопируйте идентификатор доступа, который в дальнейшем используйте в своем приложении в качестве электронного пропуска (параметр ticket).

Логика создания распоряжения

Полный цикл создания распоряжения состоит из трёх шагов. На первом шаге используется функция «Отправить документ». Функция регистрирует распоряжение и возвращает референтный номер и результаты проверки входящего документа. При необходимости, например, после исправления ошибок, документ можно послать заново.

На втором шаге нужно запросить зарегистрированный в банке документ по референтному номеру, используя функцию «Получить документ на подпись». В одном из полей вернётся XML документ распоряжения.

Третьим шагом, вернувшийся XML документ, нужно подписать электронной XML подписью на основе сертификата по стандарту XMLDSig и отправить подписанный документ в банк, используя функцию «Отправить подписанный документ».

Вызов сервиса

Формат запроса

Пример кода:

curl -d "function=<Function name>&ticket=<Ticket>&refno=<Reference number>&language=<Language code>" -E ./<Filename>.pem:<Password>  https://<домен>/elinkpro/Process
<?php
/**
 * Process Enterprise Link Pro request
 * 
 * make sure that curl.cainfo in php.ini is targeted to last CA certificates
 * last extracted CA can be downloaded here: http://curl.haxx.se/ca/cacert.pem
 * 
 * @param   {Array}     $arguments      ASSOC array with arguments for request
 * @param   {String}    $cert_path      path to certificate file
 * @param   {String}    $cert_passwd    certificate password
 * @return  {String}                    response content
 */
function process_enterprise_link_pro( $arguments, $cert_path, $cert_passwd ) {
    $ch = curl_init();
    curl_setopt_array( $ch, array(
        CURLOPT_POST => 1,
        CURLOPT_HEADER => 0,
        CURLOPT_FRESH_CONNECT => 1,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_FORBID_REUSE => 1,
        CURLOPT_TIMEOUT => 120,
        CURLOPT_URL => "https://<домен>/elinkpro/Process",
        CURLOPT_POSTFIELDS => http_build_query($arguments),
        CURLOPT_SSLCERT => $cert_path,
        CURLOPT_SSLCERTPASSWD => $cert_passwd
    ) );
    $result = curl_exec( $ch ); 
    curl_close( $ch ); 
    return $result; 
}
?>
/**
 * Enterprise Link Pro class for Java 7
 * 
 * MAVEN dependencies:
 * org.apache.httpcomponents : httpclient : 4.4
 */
public class EnterpriseLinkPro {

    private static final String ELINK_PRO_HOST = "https://<домен>";
    private static final String PROCESS_PATH = "/elinkpro/Process";
    private static final String KEYSTORE_TYPE = "PKCS12";

    private HttpHost host;
    private HttpClient httpClient;
    private String filePath;
    private String password;

    public EnterpriseLinkPro(String filePath, String password) throws GeneralSecurityException, IOException {
        this.filePath = filePath;
        this.password = password;
        this.host = HttpHost.create(ELINK_PRO_HOST);
        this.httpClient = HttpClientBuilder.create()
                .setSSLSocketFactory(createSSLConnectionSocketFactory())
                .build();
    }

    private SSLConnectionSocketFactory createSSLConnectionSocketFactory() throws GeneralSecurityException, IOException {
        KeyStore keyStore = KeyStore.getInstance(KEYSTORE_TYPE);
        keyStore.load(new FileInputStream(this.filePath), this.password.toCharArray());

        SSLContext sslContext = SSLContextBuilder.create()
                .loadKeyMaterial(keyStore, this.password.toCharArray())
                .build();

        return new SSLConnectionSocketFactory(sslContext);
    }

    public String process(List<NameValuePair> params) throws ParseException, IOException {
        HttpPost httpPost = new HttpPost(PROCESS_PATH);
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        HttpResponse response = httpClient.execute(host, httpPost);

        return EntityUtils.toString(response.getEntity(), Consts.UTF_8);
    }

}
#!/usr/bin/perl

use LWP::UserAgent;
use HTTP::Request::Common;

# Process Enterprise Link Pro request
#
# @param   {Array}     $arguments       array with arguments for request
# @param   {String}    $cert_path       path to certificate file
# @param   {String}    $cert_passwd     certificate password
# @return  {String}                     response content
sub process_enterprise_link_pro {
    my ( $arguments, $cert_path, $cert_passwd ) = @_;
    my $ua = LWP::UserAgent->new( ssl_opts => {
        SSL_use_cert => 1,
        SSL_cert_file => $cert_path,
        SSL_passwd_cb => sub { $cert_passwd }
    } );
    my $req = POST 'https://<домен>/elinkpro/Process', $arguments;
    my $response = $ua->request( $req );
    return $response->content();
}
/**
 * Enterprise Link Pro class for .NET 4.5
 *
 * Required references:
 * System.Net.Http
 * System.Net.Http.WebRequest
 */
public class EnterpriseLinkPro
{
    private static readonly String ELINK_PRO_URL = "https://<домен>/elinkpro/Process";
    private HttpClient client;

    public EnterpriseLinkPro(String certPath, String password)
    {
        var certHandler = new WebRequestHandler();
        certHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
        certHandler.UseDefaultCredentials = false;
        certHandler.ClientCertificates.Add(new X509Certificate2(certPath, password));

        this.client = new HttpClient(certHandler);
    }

    public async Task<String> Process(Dictionary<string, string> values)
    {
        var response = await client.PostAsync(ELINK_PRO_URL, new FormUrlEncodedContent(values));
        var responseString = await response.Content.ReadAsStringAsync();
        return responseString;
    }
}

Адрес: https://<домен>/elinkpro/Process

Метод: Post

Аутентификация: используется сертификат от Rietumu ID, для которого настроено подключение.

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

Формат ответа при информационном запросе

Структура ответа:

<response>
    <code>код ответа*</code>
    <error/>
    <!-- набор тэгов в зависимости от функции -->
</response>

XML формат используется при получении списка транзакций и подробной информации по ним функциями «Список транзакций» и «Детали исходящего платежа», соответственно.

* – возвращаемый код функции

Код ответа Описание
0 функция успешно завершилась
1 системный сбой
2 нет транзакций за указанный период по указанной валюте
4 ошибка в параметрах
6 неверный электронный пропуск (параметр ticket)

Формат ответа для распоряжений

Структура ответа:

{
    "code": "код ответа*",
    "error": "текст ошибки",
    "signatureRequired": [ "CER" ],
    "refNo": "референтный номер",
    "error_code": "код ошибки",
    "error_message": "текст ошибки",
    "execute_message": "текст о выполнении",
    "error_field": "название поля, к которому относится ошибка",
    "error_level": "уровень ошибки**"
}

JSON формат используется при оформлении платежных поручений.

* – возвращаемый код функции

Код ответа Описание
0 функция успешно завершилась
1 системный сбой
2 данные не найдены
4 ошибка в параметрах (например, пропущен обязательный параметр).
5 отсутствует клиентская сессия (требуется логин), либо какие-то несоответствия в сессионных параметрах
6 неверный электронный пропуск (параметр ticket)

** – показатель критичности ошибки

Код ответа Описание
0 нет ошибок
2 некритичная ошибка. Распоряжение не может быть выполнено на данный момент (например, нет денег и т.п.), но будет обработано позже
4 критичная ошибка. Распоряжение исполнено не будет

Функция «Список транзакций»

Функция используется для получения всех транзакций по счёту.

Параметры запроса

Пример кода:

curl -d "function=Transactions&ticket=JGFIGDMG5965SF44557548958345975934&ccy=EUR&dateFrom=2012-01-26&dateTill=2012-02-28&language=RU&trnID=~bb~Y#~bbEUR~12387.76#~cbd~03122012#~ctd~03122012#~fbd~31122000#~hd~05032005#~ls~2513030097#~of~seq_no#~t1~2512150262#~t2~2524554564#~td~01112012#" -E ./cert.pem:qwerty https://<домен>/elinkpro/Process
<?php
$response = process_enterprise_link_pro( array(
    "function" => "Transactions",
    "ticket" => "JGFIGDMG5965SF44557548958345975934",
    "ccy" => "EUR",
    "dateFrom" => "2012-01-26",
    "dateTill" => "2012-02-28",
    "language" => "RU",
    "trnID" => "~bb~Y#~bbEUR~12387.76#~cbd~03122012#~ctd~03122012#~fbd~31122000#~hd~05032005#~ls~2513030097#~of~seq_no#~t1~2512150262#~t2~2524554564#~td~01112012#"
), "./cert.pem", "qwerty" );
?>
EnterpriseLinkPro enterpriseLinkPro = new EnterpriseLinkPro("./cert.p12", "qwerty");

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("function", "Transactions"));
params.add(new BasicNameValuePair("ticket", "JGFIGDMG5965SF44557548958345975934"));
params.add(new BasicNameValuePair("ccy", "EUR"));
params.add(new BasicNameValuePair("dateFrom", "2012-01-26"));
params.add(new BasicNameValuePair("dateTill", "2012-02-28"));
params.add(new BasicNameValuePair("language", "RU"));
params.add(new BasicNameValuePair("trnID", "~bb~Y#~bbEUR~12387.76#~cbd~03122012#~ctd~03122012#~fbd~31122000#~hd~05032005#~ls~2513030097#~of~seq_no#~t1~2512150262#~t2~2524554564#~td~01112012#"));

String result = enterpriseLinkPro.process(params);
$response = process_enterprise_link_pro( [
    function => "Transactions",
    ticket => "JGFIGDMG5965SF44557548958345975934",
    ccy => "EUR",
    dateFrom => "2012-01-26",
    dateTill => "2012-02-28",
    language => "RU",
    trnID => "~bb~Y#~bbEUR~12387.76#~cbd~03122012#~ctd~03122012#~fbd~31122000#~hd~05032005#~ls~2513030097#~of~seq_no#~t1~2512150262#~t2~2524554564#~td~01112012#"
], './cert.pem', 'qwerty' );
var enterpriseLinkPro = new EnterpriseLinkPro("./cert.p12", "qwerty");

var result = await enterpriseLinkPro.Process(new Dictionary<string, string>
    {
       { "function", "Transactions" },
       { "ticket", "JGFIGDMG5965SF44557548958345975934" },
       { "ccy", "EUR" },
       { "dateFrom", "2012-01-26" },
       { "dateTill", "2012-02-28" },
       { "language", "RU" },
       { "trnID", "~bb~Y#~bbEUR~12387.76#~cbd~03122012#~ctd~03122012#~fbd~31122000#~hd~05032005#~ls~2513030097#~of~seq_no#~t1~2512150262#~t2~2524554564#~td~01112012#" }
    }
);
Параметр Описание
function* Transactions
ticket* электронный пропуск, выданный при подключении счета к сервису в iRietumu, например ticket=JGFIGDMG5965SF44557548958345975934
ccy код валюты по стандарту ISO-4217, например ccy=EUR
dateFrom* дата начала периода выписки в формате ISO yyyy-MM-dd, например dateFrom=2012-01-26
dateTill* дата конца периода выписки в формате ISO yyyy-MM-dd, например dateTill=2012-02-28
language язык выписки (примечаний и т. д.), например language=RU. Возможные варианты: RU, EN, LV
trnID ID транзакции, с которой начинается следующая страница (используется для постраничной выписки). Для первой страницы параметр не указывается

* обязательный параметр

Описание полей XML ответа

Пример ответа:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <code>0</code>
    <error/>
    <transactions>
        <transaction>
            <uniqueID>EQ-28022013-HEAD-@@SC-7</uniqueID>
            <trnID>~bb~Y#~bbEUR~12387.76#~cbd~03122012#~ctd~03122012#~fbd~31122000#~hd~05032005#~ls~2513030097#~of~seq_no#~t1~2512150262#~t2~2524554564#~td~01112012#</trnID>
            <date>2012-11-01</date>
            <refno>AAA2004</refno>
            <docno/>
            <benname/>
            <benacc/>
            <benid/>
            <benbank/>
            <benbankswift/>
            <details/>
            <narrative>Interest repay - fund.</narrative>
            <amount>-9.82</amount>
            <currency>EUR</currency>
            <saldo>12387.76</saldo>
            <trtype>YP</trtype>
            <trntype>EQ_440</trntype>
            <trndesc>Interest repay - fund.</trndesc>
            <tcf>Y</tcf>
        </transaction>
        <transaction>
            <uniqueID>EQ-28022013-HEAD-@@SC-8</uniqueID>
            <trnID>~bb~Y#~bbEUR~12183.39#~cbd~03122012#~ctd~03122012#~fbd~31122000#~hd~05032005#~ls~2513030097#~of~seq_no#~t1~2512436843#~t2~2525131368#~td~12112012#</trnID>
            <date>2012-11-12</date>
            <refno>I5IC11129901953</refno>
            <docno/>
            <benname/>
            <benacc/>
            <benid/>
            <benbank/>
            <benbankswift/>
            <details>6.97 LVL -- 10.00 EUR (0.697500000)</details>
            <narrative>6.97 LVL -- 10.00 EUR (0.697500000)</narrative>
            <amount>10.0</amount>
            <currency>EUR</currency>
            <saldo>12183.39</saldo>
            <trtype>CONV</trtype>
            <trntype>EQ_543</trntype>
            <trndesc>Currency Exchange</trndesc>
            <tcf>Y</tcf>
        </transaction>
        <transaction>
            <uniqueID>EQ-28022013-HEAD-@@SC-9</uniqueID>
            <trnID>~bb~Y#~bbLVL~2638.06#~cbd~03122012#~ctd~03122012#~fbd~31122000#~hd~05032005#~ls~2513030256#~of~seq_no#~t1~2512299603#~t2~2524860183#~td~07112012#</trnID>
            <date>2012-11-07</date>
            <refno>IVIC11079900909</refno>
            <docno>11-1</docno>
            <benname>ben name</benname>
            <benacc>LV70RIKO000000000000</benacc>
            <benid>111111-22222</benid>
            <benbank>AS DNB BANKA</benbank>
            <benbankswift>RIKOLV2X</benbankswift>
            <details>konta papild.</details>
            <narrative>59: /ID/ 111111-22222, ben name, Rez LV, Nr.LV70RIKO000000000000; 57: AS DNB BANKA, RIKOLV2X; 70: konta papild.;</narrative>
            <amount>-100.0</amount>
            <currency>LVL</currency>
            <saldo>2638.06</saldo>
            <trtype>OO</trtype>
            <trntype>EQ_471</trntype>
            <trndesc>External payment</trndesc>
            <tcf>Y</tcf>
        </transaction>
    </transactions>
    <more>false</more>
</response>
Поле XML Описание
<trnID> уникальный идентификатор транзакции
<date> дата транзакции
<refno> референтный номер транзакции
<docno> номер документа, заданный клиентом
<benname> название получателя
<benacc> номер счета получателя
<benid> идентификатор получателя
<benbank> банк получателя
<benbankswift> SWIFT код банка получателя
<details> назначение транзакции
<amount> сумма транзакции. Знак «-» означает, что транзакция дебетовая
<currency> валюта транзакции
<saldo> остаток после транзакции
<trndesc> расшифровка кода операции
<more> признак наличия транзакций. Параметр true означает, что получены не все транзакции, и необходимо запросить продолжение (с указанием идентификатора последней полученной транзакции <trnID>)

Функция «Детали исходящего платежа»

Функция используется для получения информации по конкретной исходящей транзакции.

Параметры запроса

Пример кода:

curl -d "function=OutgoingPaymentDetails&ticket=JGFIGDMG5965SF44557548958345975934&refno=IVID05249900342&language=RU" -E ./cert.pem:qwerty https://<домен>/elinkpro/Process
<?php
$response = process_enterprise_link_pro( array(
    "function" => "OutgoingPaymentDetails",
    "ticket" => "JGFIGDMG5965SF44557548958345975934",
    "refno" => "IVID05249900342",
    "language" => "RU"
), "./cert.pem", "qwerty" );
?>
EnterpriseLinkPro enterpriseLinkPro = new EnterpriseLinkPro("./cert.p12", "qwerty");

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("function", "OutgoingPaymentDetails"));
params.add(new BasicNameValuePair("ticket", "JGFIGDMG5965SF44557548958345975934"));
params.add(new BasicNameValuePair("refno", "IVID05249900342"));
params.add(new BasicNameValuePair("language", "RU"));

String result = enterpriseLinkPro.process(params);
$response = process_enterprise_link_pro( [
    function => "OutgoingPaymentDetails",
    ticket => "JGFIGDMG5965SF44557548958345975934",
    refno => "IVID05249900342",
    language => "RU"
], './cert.pem', 'qwerty' );
var enterpriseLinkPro = new EnterpriseLinkPro("./cert.p12", "qwerty");

var result = await enterpriseLinkPro.Process(new Dictionary<string, string>
    {
       { "function", "OutgoingPaymentDetails" },
       { "ticket", "JGFIGDMG5965SF44557548958345975934" },
       { "refno", "IVID05249900342" },
       { "language", "RU" }
    }
);
Параметр Описание
function* OutgoingPaymentDetails
ticket* электронный пропуск, выданный при подключении счета к сервису в iRietumu, например ticket=JGFIGDMG5965SF44557548958345975934
refno* референтный номер транзакции
language язык выписки (примечаний и т. д.), например language=RU. Возможные варианты: RU, EN, LV

* обязательный параметр

Описание полей XML ответа

Пример ответа:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <code>0</code>
    <error/>
    <details>
        <ref_no>IVID05249900342</ref_no>
        <state_id>2</state_id>
        <doc_number/>
        <reg_date>2013-05-24T00:00:00</reg_date>
        <reg_datetime>2013-05-24T16:04:58</reg_datetime>
        <urgency>Standart</urgency>
        <urgency_code>1</urgency_code>
        <rem_acc>LV10RTMB0000000000000</rem_acc>
        <rem_name>ABC Ltd.</rem_name>
        <rem_addr>RĪGA LATVIA</rem_addr>
        <rem_regno>123456789-0</rem_regno>
        <rem_country>LV</rem_country>
        <rem_res>RES</rem_res>
        <pmnt_amount>1000.0</pmnt_amount>
        <pmnt_ccy>AUD</pmnt_ccy>
        <pmnt_value/>
        <cor_name/>
        <cor_addr/>
        <cor_addr1/>
        <cor_bic/>
        <cor_eltype/>
        <cor_el/>
        <cor_country/>
        <bbank_acc/>
        <bbank_name>UBS AG</bbank_name>
        <bbank_addr>ZURICH</bbank_addr>
        <bbank_addr1>45, BAHNHOFSTRASSE</bbank_addr1>
        <bbank_bic>UBSWCHZH80A</bbank_bic>
        <bbank_country>CH</bbank_country>
        <bbank_eltype/>
        <bbank_el/>
        <ben_name>ABC HOLDINGS LIMITED</ben_name>
        <ben_addr>UNIT 88,19THFLOOR BASE</ben_addr>
        <ben_addr1>200 DEF ROAD,Germany</ben_addr1>
        <ben_acciban>CH5000111235FJ1234567</ben_acciban>
        <ben_country>SZ</ben_country>
        <ben_regno>123</ben_regno>
        <ben_res>NONRES</ben_res>
        <charge_type>BEN</charge_type>
        <pmnt_details>test ALL FIELDS</pmnt_details>
        <add_info>Поле Information to the Bank.</add_info>
        <rietumuid>000000</rietumuid>
        <charge_amnt>0.0</charge_amnt>
        <charge_ccy/>
        <amk_code>213</amk_code>
        <tran_type_desc>Payment to another bank</tran_type_desc>
        <lng>EN</lng>
        <oper_type>Debit</oper_type>
        <state_id_desc>Rejected</state_id_desc>
        <cor_bank_acc/>
        <oper_type_v>D</oper_type_v>
        <pmnt_amount_text>one thousand, 00</pmnt_amount_text>
    </details>
</response>
Поле XML Описание
<ref_no> референтный номер транзакции
<state_id> статус транзакции *
<doc_number> номер документа, заданный клиентом
<reg_date> дата регистрации транзакции
<reg_datetime> дата и время регистрации
<urgency> срочность транзакции **
<urgency_code> код срочности **
<rem_acc> счёт отправителя
<rem_name> наименование отправителя
<rem_addr> адрес отправителя
<rem_regno> регистрационный номер отправителя
<rem_country> страна отправителя
<rem_res> является ли отправитель резидентом Латвии. Возможные варианты: RES, NONRES
<pmnt_amount> сумма транзакции
<pmnt_ccy> валюта транзакции
<pmnt_value> дата валютации
<cor_name> наименование банка-корреспондента
<cor_addr> адрес банка-корреспондента
<cor_addr1>
<cor_bic> SWIFT код банка-корреспондента
<cor_eltype> тип национального кода
<cor_el> национальный код
<cor_country> страна банка-корреспондента
<bbank_acc> счёт банка получателя
<bbank_name> наименование банка получателя
<bbank_addr> адрес банка получателя
<bbank_addr1>
<bbank_bic> SWIFT код банка получателя
<bbank_country> страна банка получателя
<bbank_eltype> тип национального кода
<bbank_el> национальный код
<ben_name> наименование получателя
<ben_acciban> счёт получателя в формате IBAN
<ben_addr> адрес получателя
<ben_addr1>
<ben_country> страна получателя
<ben_regno> регистрационный номер получателя
<ben_res> является ли получатель резидентом Латвии. Возможные варианты: RES, NONRES
<charge_type> тип комиссии ***
<pmnt_details> детали распоряжения
<add_info> дополнительная информация
<rietumuid> Rietumu ID
<charge_amnt> сумма комиссии. Значение не возвращается
<charge_ccy> валюта комиссии. Значение не возвращается
<amk_code> АМК код транзакции. Используется, когда резидент Латвии переводит нерезиденту более 5 000 EUR.
<tran_type_desc> описание типа транзакции
<lng> язык, который передавался в запросе
<oper_type> тип операции. Возможные варианты (язык зависит от ): Дебет, Кредит
<state_id_desc> код статуса транзакции *
<cor_bank_acc> счет банка получателя в банке-корреспонденте
<oper_type_v> код типа операции. Возможные варианты: D, C
<pmnt_amount_text> текстовая расшифровка суммы транзакции

* - возможные варианты статуса транзакций

Описание статуса Код
В Банке 0, 3, 4
На подпись 20
Отложено 1
Отменено 2, 7
Отправлено 5, 6

** - возможные варианты срочности

Описание срочности Код
Стандартный 1
Экспресс 2
Экономичный 3

*** - возможные варианты типов комиссии

Тип комиссии Описание
OUR оплачивает отправитель
BEN оплачивает получатель
SHA оплачивается раздельно

Функция «Отправить документ»

Функция регистрирует документ платёжного поручения в банке и возвращает ошибки, если такие были найдены.

Параметры запроса

Пример кода:

curl -d "function=PostDocument&ticket=JGFIGDMG5965SF44557548958345975934&language=RU&doc=<XML content>" -E ./cert.pem:qwerty https://<домен>/elinkpro/Process
<?php
$response = process_enterprise_link_pro( array(
    "function" => "PostDocument",
    "ticket" => "JGFIGDMG5965SF44557548958345975934",
    "language" => "RU",
    "doc" => "<XML content>"
), "./cert.pem", "qwerty" );
?>
EnterpriseLinkPro enterpriseLinkPro = new EnterpriseLinkPro("./cert.p12", "qwerty");

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("function", "PostDocument"));
params.add(new BasicNameValuePair("ticket", "JGFIGDMG5965SF44557548958345975934"));
params.add(new BasicNameValuePair("language", "RU"));
params.add(new BasicNameValuePair("doc", "<XML content>"));

String result = enterpriseLinkPro.process(params);
$response = process_enterprise_link_pro( [
    function => "PostDocument",
    ticket => "JGFIGDMG5965SF44557548958345975934",
    language => "RU",
    doc => "<XML content>"
], './cert.pem', 'qwerty' );
var enterpriseLinkPro = new EnterpriseLinkPro("./cert.p12", "qwerty");

var result = await enterpriseLinkPro.Process(new Dictionary<string, string>
    {
       { "function", "PostDocument" },
       { "ticket", "JGFIGDMG5965SF44557548958345975934" },
       { "language", "RU" },
       { "doc", "<XML content>" }
    }
);
Параметр Описание
function* PostDocument
ticket* электронный пропуск, выданный при подключении счета к сервису в iRietumu, например ticket=JGFIGDMG5965SF44557548958345975934
language язык, используемый для сообщений об ошибках. Возможные варианты: RU, EN, LV
doc* текст документа в формате XML. Первым тегом надо специфицировать тип xml документа, см. пример XML документа.

* обязательный параметр

Описание полей XML документа платежного поручения

Пример XML документа:

<RBdocument type="payment">
    <DocNo>1-3</DocNo>
    <SendCopyeMail/>
    <SendCopyiRietumu>N</SendCopyiRietumu>
    <User>000000</User>
    <System></System>
    <AddInfo72>additional info</AddInfo72>
    <AmkCode>0</AmkCode>
    <Amount>100.00</Amount>
    <BenBank>
        <BenBankAcc>A111111</BenBankAcc>
        <BenBankAddr1>AXION SWISS BANK SA</BenBankAddr1>
        <BenBankAddr2>LUGANO</BenBankAddr2>
        <BenBankAddr3>1, VIA BOSSI</BenBankAddr3>
        <BenBankBic>UNCECH22XXX</BenBankBic>
        <BenBankCountry>CH</BenBankCountry>
        <BenBankEl/>
        <BenBankElType/>
    </BenBank>
    <Beneficiary>
        <BenAcc>CH0000000000000000000</BenAcc>
        <BenAddr1>TEST COMPANY LIMITED</BenAddr1>
        <BenAddr2>address line 1</BenAddr2>
        <BenAddr3>address line 2</BenAddr3>
        <BenCountry>CH</BenCountry>
        <BenID>1234567</BenID>
    </Beneficiary>
    <Ccy>EUR</Ccy>
    <Charge>OUR</Charge>
    <Details70>payment details</Details70>
    <Intermediary>
        <IntBankAcc/>
        <IntBankAddr1>ASIA PACIFIC FINANCIAL SERVICES CHI</IntBankAddr1>
        <IntBankAddr2>NA LIMITED</IntBankAddr2>
        <IntBankAddr3>LANZHOU GANSU</IntBankAddr3>
        <IntBankBic>APFVCNB1XXX</IntBankBic>
        <IntBankCountry>CN</IntBankCountry>
        <IntBankEl/>
        <IntBankElType/>
    </Intermediary>
    <Rate>0.0</Rate>
    <Sender>
        <SenderAcc>LV10RTMB0000000000000</SenderAcc>
        <SenderCountry/>
    </Sender>
    <Urgency>1</Urgency>
</RBdocument>

Успешный ответ в JSON:

{
    "code": 0, 
    "error": "", 
    "signatureRequired": [ "CER", "DGP", "OTP" ],
    "refNo": "HVEE07099900001", 
    "error_code": "IERR_OK",
    "error_message": "The order has been executed (IERR_OK)",
    "execute_message": "",
    "error_field": "",
    "error_level": 0,
    "fee_ccy": "",
    "fee_amount": 0.0,
    "errors": [
        {
            "error_code": "IERR_OK",
            "error_message": "The order has been executed (IERR_OK)",
            "execute_message": "",
            "error_field": "",
            "error_level": 0
        }
    ]
}

Успешный ответ с ошибками исполнения платежа:

{
    "code": 0, 
    "error": "", 
    "signatureRequired": [ "CER", "DGP", "OTP" ],
    "refNo": "HVEE07099900002", 
    "error_code": "IPM_BENNOT2",
    "error_message": "Beneficiary name not found\/ not indicated (Beneficiary name not found)",
    "execute_message": "",
    "error_field": "BenAddr1",
    "error_level": 4,
    "fee_ccy": "",
    "fee_amount": 0.0,
    "errors": [
        {
            "error_code": "IPM_BENNOT2",
            "error_message": "Beneficiary name not found\/ not indicated (Beneficiary name not found)",
            "execute_message": "",
            "error_field": "BenAddr1",
            "error_level": 4
        },
        {
            "error_code": "IERR_FVALUE",
            "error_message": "Postponed payment. The payment instruction will be postponed until selected execution date. (Future Value)",
            "execute_message": "",
            "error_field": "",
            "error_level": 2
        }
    ]
}
Поле Описание Длина Допустимые значения Обязательно
<DocNo> клиентский номер документа 15 charset_All* N
<System> система, оставить пустым Y
<User> идентификатор пользователя - Rietumu ID 6 0-9 Y
<Amount> сумма платежа 15.2 Y
<Ccy> валюта 3 ISO 4217
3-х буквенный код
Y
<Sender>
<SenderAcc> счет отправителя 21 IBAN. Всегда счет в Rietumu Y
</Sender>
<Beneficiary>
<BenAcc> счет получателя 34 charset_ACCOUNT** Y
<BenAddr1> наименование получателя 34 charset_All* Y
<BenAddr2> адрес получателя (строка 1) 34 charset_All* N
<BenAddr3> адрес получателя (строка 2) 34 charset_All* N
<BenCountry> страна резиденции получателя 2 ISO 3166-1 alpha-2 code Y
<BenID> регистрационный номер получателя 34 charset_All* Y, если страна получателя = LV
</Beneficiary>
<BenBank>
<BenBankAcc> счет банка получателя в банке-корреспонденте (счет в РКЦ) 34 charset_ACCOUNT** N
<BenBankAddr1> наименование банка получателя 34 charset_All* Y
<BenBankAddr2> адрес банка получателя 1 34 charset_All* N
<BenBankAddr3> адрес банка получателя 2 34 charset_All* N
<BenBankBic> SWIFT банка получателя 11 A-Za-z0-9 N
<BenBankCountry> страна банка получателя 2 ISO 3166-1 alpha-2 code Y
<BenBankEl> национальный клиринговый код 30 charset_All* N
<BenBankElType> тип клирингового кода 2 ELTYPE*** Y, если заполнен <BenBankEl>
</BenBank>
<Intermediary>
<IntBankAcc> счет банка-корреспондента в РКЦ 34 charset_ACCOUNT** N
<IntBankAddr1> название банка-корреспондента 34 charset_All* N
<IntBankAddr2> адрес банка-корреспондента 1 34 charset_All* N
<IntBankAddr3> адрес банка-корреспондента 2 34 charset_All* N
<IntBankBic> SWIFT банка-корреспондента 11 A-Za-z0-9 N
<IntBankCountry> страна банка-корреспондента 2 ISO 3166-1 alpha-2 code Y, если заполнен <IntBankAddr1>
<IntBankEl> национальный клиринговый код 30 charset_All* N
<IntBankElType> тип клирингового кода 2 ELTYPE*** Y, если заполнен <IntBankEl>
</Intermediary>
<Details70> примечание 120 charset_All* Y
<AddInfo72> дополнительная информация 200 charset_All* N
<Rate> фиксированное значение «0.0» 1.1 Y
<SendCopyeMail> e-mail адрес для получения SWIFT копии. Услуга платная 60 A-Za-z0-9а-яА-Я!#$%’*+-/=?^_`{|}~.@ N
<SendCopyiRietumu> получение SWIFT копии в iRietumu. Услуга платная 1 Y/N N
<Urgency> срочность 1 1 - Обычный платеж (Normal)
2 - Срочный платеж (Urgent)
3 - Экономичный (Econom)
Y
<DesiredDate> желаемая дата исполнения 10 YYYY-MM-DD N
<Charge> тип комиссии 3 BEN - за счет получателя
OUR - за счет отправителя
SHA - раздельно
DEF - автомат
(значение будет выбрано банком исходя из параметров платежа)
Y
<AmkCode> код внешнего платежа по справочнику Банка Латвии 3 0-9 Y, если платеж с резидента LV на нерезидента LV на cумму больше 10 000 EUR

* – A-Za-z0-9?:().,’+{};!?&-_[]`/“<space>а-яА-Я <символы латышского алфавита>

** – A-Za-z0-9?:().,’+{};!?&-_[]`/”<space>

*** – двузначный код, значения представлены в таблице

Код Описание
RU Bank Identification Code (БИК/BIC)
AT Austrian Bankleitzahl
AU Australian Bank State Branch (BSB)
BL German Bankleitzahl
CC Canadian Payments Association Payment Routing
CH CHIPS Universal Identifier
CP USA CHIPS Participant Identifier
ES Spanish Domestic Interbanking Code
FW USA Fedwire Routing Number
HK Bank Code of Hong Kong
IE Irish National Clearing Code (NSC)
IT Italian Domestic Identification Code
MF MFO (Other)
NZ New Zealand National Clearing Code
PT Portuguese National Clearing Code
SC UK Domestic Sort Code
SW Swiss Clearing Code (BC or SIC)

Функция «Получить документ на подпись»

Функция возвращает ранее зарегистрированный документ, для его дальнейшего подписания.

Параметры запроса

Пример кода:

curl -d "function=GetDocumentForSign&ticket=JGFIGDMG5965SF44557548958345975934&language=RU&refNo=HVEE07099900001" -E ./cert.pem:qwerty https://<домен>/elinkpro/Process
<?php
$response = process_enterprise_link_pro( array(
    "function" => "GetDocumentForSign",
    "ticket" => "JGFIGDMG5965SF44557548958345975934",
    "language" => "RU",
    "refNo" => "HVEE07099900001"
), "./cert.pem", "qwerty" );
?>
EnterpriseLinkPro enterpriseLinkPro = new EnterpriseLinkPro("./cert.p12", "qwerty");

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("function", "GetDocumentForSign"));
params.add(new BasicNameValuePair("ticket", "JGFIGDMG5965SF44557548958345975934"));
params.add(new BasicNameValuePair("language", "RU"));
params.add(new BasicNameValuePair("refNo", "HVEE07099900001"));

String result = enterpriseLinkPro.process(params);
$response = process_enterprise_link_pro( [
    function => "GetDocumentForSign",
    ticket => "JGFIGDMG5965SF44557548958345975934",
    language => "RU",
    refNo => "HVEE07099900001"
], './cert.pem', 'qwerty' );
var enterpriseLinkPro = new EnterpriseLinkPro("./cert.p12", "qwerty");

var result = await enterpriseLinkPro.Process(new Dictionary<string, string>
    {
       { "function", "GetDocumentForSign" },
       { "ticket", "JGFIGDMG5965SF44557548958345975934" },
       { "language", "RU" },
       { "refNo", "HVEE07099900001" }
    }
);
Параметр Описание
function* GetDocumentForSign
ticket* электронный пропуск, выданный при подключении счета к сервису в iRietumu, например ticket=JGFIGDMG5965SF44557548958345975934
language язык, используемый для сообщений об ошибках. Возможные варианты: RU, EN, LV
refNo* референтный номер документа

* обязательный параметр

Пример ответа:

{
    "code": 0,
    "error": "", 
    "signatureRequired": [ "CER" ], 
    "expectedSignatures": [], 
    "existingSignatures": [],
    "doc": "текст XML документа на подпись"
}

Функция «Отправить подписанный документ»

Пример кода:

# W3C specification for XMLDSig is available here: http://www.w3.org/TR/xmldsig-core/
# OpenSSL documentation is available here: https://www.openssl.org/docs/apps/openssl.html
#
# Manually signing XML document using console tools is counterproductive so please check other solutions.
<?php
/**
 * Sign XML content using XMLDSig enveloped method for PHP 5.3
 *
 * Requires classes XMLSecurityKey and XMLSecurityDSig
 * from https://github.com/formapro/xmlseclib
 *
 * @param    string $XMLContent
 * @param    string $certificatePath
 * @param    string $certificatePassword
 *
 * @return    string                            signed XML
 * @throws    Exception
 *
 * Usage:
 * $signedContent = XMLDSig_SignEnveloped($contentToSign, './cert.pem', 'qwerty');
 */
function XMLDSig_SignEnveloped($XMLContent, $certificatePath, $certificatePassword) {
    if (!function_exists('openssl_pkey_get_private'))
        throw new Exception('Openssl PHP extension is required in ');
    $certificateContent = file_get_contents($certificatePath);
    $privateKey         = openssl_pkey_get_private($certificateContent, $certificatePassword);
    if (!$privateKey)
        throw new Exception("Unable to load private key in ");
    $keyDetails = openssl_pkey_get_details($privateKey);

    $document = new DOMDocument();
    $document->loadXML($XMLContent);

    $objXMLSecurityKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'private'));
    $objXMLSecurityKey->loadKey($privateKey);
    $objXMLSecDSig = new XMLSecurityDSig("");
    $objXMLSecDSig->setCanonicalMethod(XMLSecurityDSig::EXC_C14N_COMMENTS);
    $objXMLSecDSig->addReference($document, XMLSecurityDSig::SHA1, array('http://www.w3.org/2000/09/xmldsig#enveloped-signature'), array('force_uri' => true));
    $objXMLSecDSig->sign($objXMLSecurityKey, $document->documentElement);
    $objXMLSecDSig->add509Cert($certificateContent);

    $RSAKeyValueTpl = "<KeyValue><RSAKeyValue><Modulus>%s</Modulus><Exponent>%s</Exponent></RSAKeyValue></KeyValue>";
    $modulus        = base64_encode($keyDetails['rsa']['n']);
    $exponent       = base64_encode($keyDetails['rsa']['e']);
    $RSAKeyValue    = sprintf($RSAKeyValueTpl, $modulus, $exponent);

    return str_replace("</KeyInfo>", $RSAKeyValue . "</KeyInfo>", $document->saveXML());
}
?>
/**
 * XMLDSig class for Java 7
 *
 * Required:
 * 1. Bouncy Castle 1.38 or newer
 *      from https://www.bouncycastle.org/java.html
 * 
 * 2. Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files
 *      from http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
 * 
 * Usage:
 * XMLDSig xmlDSig = new XMLDSig("./cert.p12", "qwerty");
 * String signedContent = xmlDSig.signEnveloped(contentToSign);
 */
public class XMLDSig {

    private KeyStore keyStore;
    private String alias;
    private XMLSignature signature;
    private DocumentBuilderFactory documentBuilderFactory;
    private TransformerFactory transformerFactory;
    private String filePath;
    private String password;

    public XMLDSig(String filePath, String password) throws GeneralSecurityException, IOException {
        this.filePath = filePath;
        this.password = password;

        Security.addProvider(new BouncyCastleProvider());

        keyStore = loadKeystore();
        alias = getAlias();
        signature = createSignature();

        documentBuilderFactory = DocumentBuilderFactory.newInstance();
        documentBuilderFactory.setNamespaceAware(true);
        transformerFactory = TransformerFactory.newInstance();
    }

    private KeyStore loadKeystore() throws GeneralSecurityException, IOException {
        KeyStore keyStore = KeyStore.getInstance("PKCS12", "BC");
        keyStore.load(new FileInputStream(filePath), password.toCharArray());

        return keyStore;
    }

    private String getAlias() throws GeneralSecurityException {
        String alias = null;
        Enumeration<String> enumeration = keyStore.aliases();
        while(enumeration.hasMoreElements()) {
            alias = (String)enumeration.nextElement();
            break;
        }
        if (alias.isEmpty()) {
            throw new RuntimeException("Key store does not contain entry with alias");
        }

        return alias;
    }

    private XMLSignature createSignature() throws GeneralSecurityException {
        XMLSignatureFactory signatureFactory = XMLSignatureFactory.getInstance("DOM");
        return signatureFactory.newXMLSignature(createSignedInfo(signatureFactory), createKeyInfo(signatureFactory));
    }

    private SignedInfo createSignedInfo(XMLSignatureFactory signatureFactory) throws GeneralSecurityException {
        CanonicalizationMethod canonicalizationMethod = signatureFactory.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS,
                (C14NMethodParameterSpec) null);

        SignatureMethod signatureMethod = signatureFactory.newSignatureMethod(SignatureMethod.RSA_SHA1, null);

        DigestMethod digestMethod = signatureFactory.newDigestMethod(DigestMethod.SHA1, null);
        Transform transform = signatureFactory.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null);
        Reference reference = signatureFactory.newReference("", digestMethod, Collections.singletonList(transform), null, null);

        return signatureFactory.newSignedInfo(canonicalizationMethod, signatureMethod, Collections.singletonList(reference));
    }

    private KeyInfo createKeyInfo(XMLSignatureFactory signatureFactory) throws GeneralSecurityException {
        KeyInfoFactory keyInfoFactory = signatureFactory.getKeyInfoFactory();
        ArrayList<XMLStructure> keys = new ArrayList<XMLStructure>();

        X509Certificate certificate = getX509Certificate();
        keys.add(keyInfoFactory.newKeyValue(certificate.getPublicKey()));

        X509Data certificateInfo = keyInfoFactory.newX509Data(Collections.singletonList(certificate));
        keys.add(certificateInfo);

        return keyInfoFactory.newKeyInfo(keys);
    }

    private X509Certificate getX509Certificate() throws GeneralSecurityException {
        return (X509Certificate) keyStore.getCertificate(alias);
    }

    private PrivateKey getX509PrivateKey() throws GeneralSecurityException {
        return (PrivateKey) keyStore.getKey(alias, password.toCharArray());
    }

    public String signEnveloped(String documentSource) throws Exception {
        DocumentBuilder newDocumentBuilder = documentBuilderFactory.newDocumentBuilder();
        Document document = newDocumentBuilder.parse(new InputSource(new StringReader(documentSource)));

        DOMSignContext signContext = new DOMSignContext(getX509PrivateKey(), document.getDocumentElement());
        signature.sign(signContext);

        StringWriter writer = new StringWriter();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(new DOMSource(document), new StreamResult(writer));
        return writer.toString();
    }

}
#!/usr/bin/perl

use XML::XPath;
use MIME::Base64;
use Crypt::OpenSSL::X509;
use Crypt::OpenSSL::RSA;
use File::Slurp;
use Digest::SHA1 qw(sha1);
use XML::CanonicalizeXML;
# Sign XML content using XMLDSig enveloped method for Perl 5.20
#
# Certificate in PEM format without encryption can be extracted from P12 certificate
# openssl pkcs12 -in ATTID1TR.p12 -out certkey.pem -clcerts -nodes
#
# @param   {String}    $XMLContent          XML content to be signed
# @param   {String}    $certificatePath     path to certificate file in PEM format without encryption
# @return  {String}                         XML content
#
# Usage: 
# my $signedContent = XMLDSig_SignEnveloped($contentToSign, "./certkey.pem");
sub XMLDSig_SignEnveloped {
    my ( $XMLContent, $certificatePath ) = @_;

    my $xml;
    my $parser = XML::XPath->new( xml => $XMLContent );
    my $nodeset = $parser->find('/');
    foreach my $node ($nodeset->get_nodelist) {
        $xml = XML::XPath::XMLParser::as_string( $node );
        last;
    }
    $signed = $XMLContent;

    my $certContent = read_file($certificatePath);

    my $rsaKey = Crypt::OpenSSL::RSA->new_private_key( $certContent );
    $rsaKey->use_pkcs1_padding();
    my $bigNum = ( $rsaKey->get_key_parameters() )[1];
    my $bin = $bigNum->to_bin();
    my $exp = encode_base64( $bin, '' );
    $bigNum = ( $rsaKey->get_key_parameters() )[0];
    $bin = $bigNum->to_bin();
    my $mod = encode_base64( $bin, '' );
    my $keyContent = "<KeyValue><RSAKeyValue><Modulus>$mod</Modulus><Exponent>$exp</Exponent></RSAKeyValue></KeyValue>";
    my $x509 = Crypt::OpenSSL::X509->new_from_string( $certContent );
    my $certString = $x509->as_string();
    $certString =~ s/-----BEGIN CERTIFICATE-----//;
    $certString =~ s/-----END CERTIFICATE-----//;
    $certString =~ s/\n//g;
    $certContent = "<X509Data><X509Certificate>$certString</X509Certificate></X509Data>";
    my $keyInfo = "<KeyInfo>".$certContent.$keyContent."</KeyInfo>";

    my $canonical = XML::CanonicalizeXML::canonicalize( $xml, '<XPath>(//. | //@* | //namespace::*)</XPath>', "", 1, 1 );
    my $bin_digest    = sha1( $canonical );
    my $digest        = encode_base64( $bin_digest, '' );
    my $digest_xml    = qq{<Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>$digest</DigestValue></Reference>};
    my $signed_info   = qq{<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#"><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#WithComments"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>$digest_xml</SignedInfo>};
    $canonical_sign_info        = XML::CanonicalizeXML::canonicalize( $signed_info, '<XPath>(//. | //@* | //namespace::*)</XPath>', "", 1, 1 );

    my $bin_signature = $rsaKey->sign( $canonical_sign_info );
    my $signature     = encode_base64( $bin_signature, "" );
    my $signature_xml = qq{<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">$signed_info<SignatureValue>$signature</SignatureValue>$keyInfo</Signature>};
    $signed =~ s/(<\/[^>]*>)$/$signature_xml$1/;
    return $signed;
};
/**
 * XMLDSig class for .NET 4.5
 *
 * Required references:
 * System.Security
 * 
 * Usage:
 * var xmlDSig = new XMLDSig("./cert.p12", "qwerty");
 * var signedContent = xmlDSig.SignEnveloped(contentToSign);
 */
public class XMLDSig
{
    private X509Certificate2 x509Certificate2;
    private RSACryptoServiceProvider privateKey;

    public XMLDSig(String certificatePath, String certificatePassword)
    {
        x509Certificate2 = new X509Certificate2(certificatePath, certificatePassword);
        privateKey = (RSACryptoServiceProvider)x509Certificate2.PrivateKey;
    }

    public String SignEnveloped(String XMLContent)
    {
        var document = new XmlDocument();
        document.PreserveWhitespace = true;
        document.LoadXml(XMLContent);
        SignedXml signedXML = new SignedXml(document);

        signedXML.SigningKey = privateKey;
        signedXML.SignedInfo.CanonicalizationMethod = SignedXml.XmlDsigC14NWithCommentsTransformUrl;
        signedXML.SignedInfo.SignatureMethod = SignedXml.XmlDsigRSASHA1Url;

        Reference reference = new Reference();
        reference.Uri = "";
        reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
        signedXML.SignedInfo.AddReference(reference);

        KeyInfo keyInfo = new KeyInfo();
        keyInfo.AddClause(new KeyInfoX509Data(x509Certificate2));
        keyInfo.AddClause(new RSAKeyValue(privateKey));
        signedXML.KeyInfo = keyInfo;

        signedXML.ComputeSignature();
        XmlElement xmlDigitalSignature = signedXML.GetXml();
        document.DocumentElement.AppendChild(document.ImportNode(xmlDigitalSignature, true));
        return document.OuterXml;
    }
}

Функция отправляет подписанный документ в банк на исполнение. В случае возникновения ошибок, возвращает их.

Перед отправкой документа, его надо подписать по стандарту XMLDSig (XML Digital Signature), метод «Enveloped». Подписывается только секция платежного поручения, заключенная в XML тегах <RBdocument> и XAdES.

Параметры запроса

Пример кода:

curl -d "function=PostSignedDocument&ticket=JGFIGDMG5965SF44557548958345975934&language=RU&refNo=HVEE07099900001&doc=<XML content>" -E ./cert.pem:qwerty https://<домен>/elinkpro/Process
<?php
$response = process_enterprise_link_pro( array(
    "function" => "PostSignedDocument",
    "ticket" => "JGFIGDMG5965SF44557548958345975934",
    "language" => "RU",
    "refNo" => "HVEE07099900001",
    "doc" => "<XML content>"
), "./cert.pem", "qwerty"  );
?>
EnterpriseLinkPro enterpriseLinkPro = new EnterpriseLinkPro("./cert.p12", "qwerty");

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("function", "PostSignedDocument"));
params.add(new BasicNameValuePair("ticket", "JGFIGDMG5965SF44557548958345975934"));
params.add(new BasicNameValuePair("language", "RU"));
params.add(new BasicNameValuePair("refNo", "HVEE07099900001"));
params.add(new BasicNameValuePair("doc", "<XML content>"));

String result = enterpriseLinkPro.process(params);
$response = process_enterprise_link_pro( [
    function => "PostSignedDocument",
    ticket => "JGFIGDMG5965SF44557548958345975934",
    language => "RU",
    refNo => "HVEE07099900001",
    doc => "<XML content>"
], './cert.pem', 'qwerty' );
var enterpriseLinkPro = new EnterpriseLinkPro("./cert.p12", "qwerty");

var result = await enterpriseLinkPro.Process(new Dictionary<string, string>
    {
       { "function", "PostSignedDocument" },
       { "ticket", "JGFIGDMG5965SF44557548958345975934" },
       { "language", "RU" },
       { "refNo", "HVEE07099900001" },
       { "doc", "<XML content>" }
    }
);

Пример подписанного XML документа

<RBdocument type="payment">
    <DocNo>1-3</DocNo>
    <SendCopyeMail/>
    <SendCopyiRietumu>N</SendCopyiRietumu>
    <User>000000</User>
    <System>ELinkPRO</System>
    <AddInfo72>additional info</AddInfo72>
    <AmkCode>0</AmkCode>
    <Amount>100.00</Amount>
    <BenBank>
        <BenBankAcc>A111111</BenBankAcc>
        <BenBankAddr1>AXION SWISS BANK SA</BenBankAddr1>
        <BenBankAddr2>LUGANO</BenBankAddr2>
        <BenBankAddr3>1, VIA BOSSI</BenBankAddr3>
        <BenBankBic>UNCECH22XXX</BenBankBic>
        <BenBankCountry>CH</BenBankCountry>
        <BenBankEl/>
        <BenBankElType/>
    </BenBank>
    <Beneficiary>
        <BenAcc>CH0000000000000000000</BenAcc>
        <BenAddr1>TEST COMPANY LIMITED</BenAddr1>
        Инструкция по настройке Enterprise Link PRO
        23
        <BenAddr2>address line 1</BenAddr2>
        <BenAddr3>address line 2</BenAddr3>
        <BenCountry>CH</BenCountry>
        <BenID>1234567</BenID>
    </Beneficiary>
    <Ccy>EUR</Ccy>
    <Charge>OUR</Charge>
    <Details70>payment details</Details70>
    <Intermediary>
        <IntBankAcc/>
        <IntBankAddr1>ASIA PACIFIC FINANCIAL SERVICES CHI</IntBankAddr1>
        <IntBankAddr2>NA LIMITED</IntBankAddr2>
        <IntBankAddr3>LANZHOU GANSU</IntBankAddr3>
        <IntBankBic>APFVCNB1XXX</IntBankBic>
        <IntBankCountry>CN</IntBankCountry>
        <IntBankEl/>
        <IntBankElType/>
    </Intermediary>
    <Rate>0.0</Rate>
    <Sender>
        <SenderAcc>LV10RTMB0000000000000</SenderAcc>
        <SenderCountry/>
    </Sender>
    <Urgency>1</Urgency>
    <RegistrationDateTime>2014-07-07T10:42:26</RegistrationDateTime>
    <RefNo>HVEE07099900001</RefNo>
    <SignerSID>jcs_WhEny0eiG1s1FppetEw</SignerSID>
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo>
            <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>
            <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
            <Reference URI="">
                <Transforms>
                    <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                </Transforms>
                <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                <DigestValue>Z/G0FYqtbpB6Wof2CQkuIoDOAVs=</DigestValue>
            </Reference>
        </SignedInfo>
        <SignatureValue>gJg8hHotw6fvuaPErg68rTH/OVnVYmohrfsYfwIW0vVhCLmDuTowEmgdnJWYzcKn2lttReQoV8cJ
            KX8uvTgrasmrHYZ3zuq9BH70yh0P7fZjb4gZRv0ptxtWFBgBuF4gkp7u4f5SYG4mckiN6+pBic4H
            asvbrfvTrXJSmy3/oBE=</SignatureValue>
        <KeyInfo>
            <KeyValue>
                <RSAKeyValue>
                    <Modulus>tPr8PUX9Cf5o2j25o1g1Tb/W6MiCDED9C0LlP9k/hK9uJkUL3fbMEfMDjtRa83+AfnYHMTG81tNp
                        h9+aLOeKNobDKG3KCYxEXqvfGva0a9OBLi8lULzVdqit+hBfCEpwKCSZNshu2AXA7KFw58CWTzth
                        +2A8f7z5GcgdTgxJu1E=</Modulus>
                    <Exponent>Aw==</Exponent>
                </RSAKeyValue>
            </KeyValue>
            <X509Data>
                <X509Certificate>MIICcDCCAdmgAwIBAgIGAUTPAVTCMA0GCSqGSIb3DQEBBQUAMG8xCzAJBgNVBAYTAkxWMRYwFAYD
                    VQQKEw1SaWV0dW11IEJhbmthMR4wHAYDVQQLExVDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKDAmBgNV
                    BAMTHyh0ZXN0KSBSQiBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTQwMzE3MDc0NjE0WhcNMTYw
                    MzA2MDc0NjE0WjBDMQ8wDQYDVQQDDAY0MjM2NzMxIzAhBgNVBAsMGkRpZ2l0YWwgSWRlbnRpZmll
                    ciBDbGFzcyAyMQswCQYDVQQGEwJMVjCBnTANBgkqhkiG9w0BAQEFAAOBiwAwgYcCgYEAtPr8PUX9
                    Cf5o2j25o1g1Tb/W6MiCDED9C0LlP9k/hK9uJkUL3fbMEfMDjtRa83+AfnYHMTG81tNph9+aLOeK
                    NobDKG3KCYxEXqvfGva0a9OBLi8lULzVdqit+hBfCEpwKCSZNshu2AXA7KFw58CWTzth+2A8f7z5
                    GcgdTgxJu1ECAQOjRTBDMAsGA1UdDwQEAwIB/jA0BgNVHSUBAf8EKjAoBggrBgEFBQcDAQYIKwYB
                    BQUHAwIGCCsGAQUFBwMJBggrBgEFBQcDBDANBgkqhkiG9w0BAQUFAAOBgQADBNN0K6wYm9G09yII
                    cPl8APAkbGPTm3eCUy50kkD9DnNwJilGY5Pdm1aqKQZ5GmbP+P4k6d6XKjB9TJSiBxzRLBurULes
                    LPaVxqWDp54gT7FFRr8Gz0CiaKdTr2xrzO+sCaMs3PzZ48WPrBZeYSedwPr7Gu3JjzxCD3dTq/BM
                    Ng==</X509Certificate>
            </X509Data>
        </KeyInfo>
    </Signature>
</RBdocument>

Успешный ответ в JSON:

{
    "code": 0,
    "error": "",
    "refNo": " HVEE07099900003",
    "error_code": "IERR_OK",
    "error_message": "",
    "error_field": "",
    "error_level": 0
}

Успешный ответ с ошибками исполнения платежа:

{
    "code": 0,
    "error": "",
    "refNo": " HVEE07099900004",
    "error_code": "IERR_SIG_BAD",
    "error_message": "Invalid signature",
    "execute_message": "",
    "error_field": "",
    "error_level": 4,
    "errors": [
        {
            "error_code": "IERR_SIG_BAD",
            "error_message": "Invalid signature",
            "execute_message": "",
            "error_field": "",
            "error_level": 4
        }
    ]
}
Параметр Описание
function* PostSignedDocument
ticket* электронный пропуск, выданный при подключении счета к сервису в iRietumu, например ticket=JGFIGDMG5965SF44557548958345975934
language язык, используемый для сообщений об ошибках. Возможные варианты: RU, EN, LV
refNo* референтный номер документа
doc* текст подписанного документа в формате XML

* обязательный параметр

ISO 20022

АО “Rietumu Banka” поддерживает работу с XML стандарта ISO 20022 через систему Enterprise Link Pro.

Для работы с XML стандарта ISO 20022 используются следующие функции:

Функция „Инициация платежа”

Для отправки сообщения в формате ISO 20022 XML pain.001.001.03 об инициации платежа от клиента в банк используется функция PostISO20022.

Перед отправкой документа, его надо подписать по стандарту XMLDSig (XML Digital Signature), метод «Enveloped». Подписывается только секция платежного поручения, заключенная в XML тегах и XAdES.

Параметры запроса

Пример кода:

curl -d "function=PostISO20022&rid=123456&ticket=JGFIGDMG5965SF44557548958345975934&resultFormat=XML&doc=<XML content>" -E ./cert.pem:qwerty https://<domain>/elinkpro/Process
<?php
$response = process_enterprise_link_pro( array(
    "function" => "PostISO20022",
    "rid" => "123456",
    "ticket" => "JGFIGDMG5965SF44557548958345975934",
    "resultFormat" => "XML",
    "doc" => "<XML content>"
), "./cert.pem", "qwerty" );
?>
EnterpriseLinkPro enterpriseLinkPro = new EnterpriseLinkPro("./cert.p12", "qwerty");

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("function", "PostISO20022"));
params.add(new BasicNameValuePair("rid", "123456"));
params.add(new BasicNameValuePair("ticket", "JGFIGDMG5965SF44557548958345975934"));
params.add(new BasicNameValuePair("resultFormat", "XML"));
params.add(new BasicNameValuePair("doc", "<XML content>"));

String result = enterpriseLinkPro.process(params);
$response = process_enterprise_link_pro( [
    function => "PostISO20022",
    rid => "123456",
    ticket => "JGFIGDMG5965SF44557548958345975934",
    resultFormat => "XML",
    doc => "<XML content>"
], './cert.pem', 'qwerty' );
var enterpriseLinkPro = new EnterpriseLinkPro("./cert.p12", "qwerty");

var result = await enterpriseLinkPro.Process(new Dictionary<string, string>
    {
       { "function", "PostISO20022" },
       { "rid", "123456" },
       { "ticket", "JGFIGDMG5965SF44557548958345975934" },
       { "resultFormat", "XML" },
       { "doc", "<XML content>" }
    }
);

Пример:

<Document>
    <CstmrPmtStsRpt>
        <GrpHdr>
            <MsgId>1459416333517</MsgId>
            <CreDtTm>2016-01-31T12:25:33</CreDtTm>
            <InitgPty>
                <Id>
                    <OrgId>
                        <BICOrBEI>RTMBLV2X</BICOrBEI>
                    </OrgId>
                </Id>
            </InitgPty>
        </GrpHdr>
        <OrgnlGrpInfAndSts>
            <OrgnlMsgId>000000UniqMessageId-000012345678989</OrgnlMsgId>
            <OrgnlMsgNmId>pain.001.001.03</OrgnlMsgNmId>
            <OrgnlCreDtTm>2016-03-22T10:03:35</OrgnlCreDtTm>
            <GrpSts>ACSP</GrpSts>
            <StsRsnInf>
                <Rsn>
                    <Cd>NARR</Cd>
                </Rsn>
                <AddtlInf>Accepted for execution. RefNo : XIEG01319900188</AddtlInf>
            </StsRsnInf>
        </OrgnlGrpInfAndSts>
    </CstmrPmtStsRpt>
</Document>
Параметр Описание
function* PostISO20022
rid* Rietumu ID
ticket* Электронный пропуск, выданный при подключении счета к сервису в iRietumu, например ticket=JGFIGDMG5965SF44557548958345975934
resultFormat* XML
doc* Текст подписанного документа в формате XML. Документ должен быть подписан по стандарту XMLDSig (XML Digital Signature), метод «Enveloped».

* обязательный параметр

Ответ о принятии пакета платёжных поручений для дальнейшей обработки в целом даётся в ответном сообщении о статусе платежа в формате ISO 20022 XML pain.002.001.03.

Функция „Статус платежа”

Для получения сообщения о статусе платежа от банка в формате ISO 20022 XML pain.002.001.03 используется функция ISO20022Status.

Параметры запроса

Пример кода:

curl -d "function=ISO20022Status&rid=123456&ticket=JGFIGDMG5965SF44557548958345975934&resultFormat=XML&msgId=1234566333517" -E ./cert.pem:qwerty https://<domain>/elinkpro/Process
<?php
$response = process_enterprise_link_pro( array(
    "function" => "ISO20022Status",
    "rid" => "123456",
    "ticket" => "JGFIGDMG5965SF44557548958345975934",
    "resultFormat" => "XML",
    "msgId" => "1234566333517"
), "./cert.pem", "qwerty" );
?>
EnterpriseLinkPro enterpriseLinkPro = new EnterpriseLinkPro("./cert.p12", "qwerty");

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("function", "ISO20022Status"));
params.add(new BasicNameValuePair("rid", "123456"));
params.add(new BasicNameValuePair("ticket", "JGFIGDMG5965SF44557548958345975934"));
params.add(new BasicNameValuePair("resultFormat", "XML"));
params.add(new BasicNameValuePair("msgId", "1234566333517"));

String result = enterpriseLinkPro.process(params);
$response = process_enterprise_link_pro( [
    function => "ISO20022Status",
    rid => "123456",
    ticket => "JGFIGDMG5965SF44557548958345975934",
    resultFormat => "XML",
    msgId => "1234566333517"
], './cert.pem', 'qwerty' );
var enterpriseLinkPro = new EnterpriseLinkPro("./cert.p12", "qwerty");

var result = await enterpriseLinkPro.Process(new Dictionary<string, string>
    {
       { "function", "ISO20022Status" },
       { "rid", "123456" },
       { "ticket", "JGFIGDMG5965SF44557548958345975934" },
       { "resultFormat", "XML" },
       { "msgId", "1234566333517" }
    }
);
Параметр Описание
function* ISO20022Status
rid* Rietumu ID
ticket* Электронный пропуск, выданный при подключении счета к сервису в iRietumu, например ticket=JGFIGDMG5965SF44557548958345975934
resultFormat* XML
msgId* Идентификатор первоначального платёжного поручения (pain.001.001.03), о котором запрашивается статус.

* обязательный параметр

Функция „Получение документа на подпись”

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

Параметры запроса

Пример кода:

curl -d "function=GetISO20022ForSign&rid=123456&ticket=JGFIGDMG5965SF44557548958345975934&resultFormat=XML&msgId=1234566333517" -E ./cert.pem:qwerty https://<domain>/elinkpro/Process
<?php
$response = process_enterprise_link_pro( array(
    "function" => "GetISO20022ForSign",
    "rid" => "123456",
    "ticket" => "JGFIGDMG5965SF44557548958345975934",
    "resultFormat" => "XML",
    "msgId" => "1234566333517"
), "./cert.pem", "qwerty" );
?>
EnterpriseLinkPro enterpriseLinkPro = new EnterpriseLinkPro("./cert.p12", "qwerty");

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("function", "GetISO20022ForSign"));
params.add(new BasicNameValuePair("rid", "123456"));
params.add(new BasicNameValuePair("ticket", "JGFIGDMG5965SF44557548958345975934"));
params.add(new BasicNameValuePair("resultFormat", "XML"));
params.add(new BasicNameValuePair("msgId", "1234566333517"));

String result = enterpriseLinkPro.process(params);
$response = process_enterprise_link_pro( [
    function => "GetISO20022ForSign",
    rid => "123456",
    ticket => "JGFIGDMG5965SF44557548958345975934",
    resultFormat => "XML",
    msgId => "1234566333517"
], './cert.pem', 'qwerty' );
var enterpriseLinkPro = new EnterpriseLinkPro("./cert.p12", "qwerty");

var result = await enterpriseLinkPro.Process(new Dictionary<string, string>
    {
       { "function", "GetISO20022ForSign" },
       { "rid", "123456" },
       { "ticket", "JGFIGDMG5965SF44557548958345975934" },
       { "resultFormat", "XML" },
       { "msgId", "1234566333517" }
    }
);
Параметр Описание
function* GetISO20022ForSign
rid* Rietumu ID
ticket* Электронный пропуск, выданный при подключении счета к сервису в iRietumu, например ticket=JGFIGDMG5965SF44557548958345975934
resultFormat* XML
msgId* Идентификатор файла инициации платёжного поручения из первоначального сообщения (pain.001.001.03).

* обязательный параметр

ISO 20022 XML документы

Сообщение об инициации платежа pain.001.001.03

Общие требования

Данная документация должна быть использована вместе с описанием формата ISO 20022 Message Definition Report, так как данная документация содержит информацию только о тех элементах сообщений, которые используются в банке. Если сообщение содержит элементы не описанные в этой документации, то они будут проигнорированы.

Кодировка

АО “Rietumu Banka” поддерживает кодировку “UTF-8 without BOM”.

Описание содержания сообщения об инициации платежа

Сообщение содержит два обязательных блока: Заголовок (Header) и Информация о Платеже (Payment Information).

Заголовок (Header): Этот блок указывается только один раз и содержит элементы идентификации файла - идентификатор платежа, дата и время создания сообщения, инициатор платежа (представитель).

Информация о Платеже (Payment Information): Файл может содержать один или более платёжных блоков. Каждый блок содержит информацию для идентификации плательщика (дебитора) - дебитор, номер счёта дебитора. Также в каждом блоке есть информация о платеже (Credit Transfer), которая включает в себя счёт получателя, банк получателя, сумму перевода и информацию о платеже.

Таблица описывает поля сообщения в следующем формате:

ISO Index No. Or. Mult. Элемент сообщения <XML-тег> ISO Тип Комментарий касательно данных поля
[1..1] + Message root

ISO Index No. – Номер элемента сообщения. Номер соответствует описанию стандарта ISO 20022 XML, который может быть найден по адресу www.iso20022.org в “Catalogue of ISO 20022 messages” со ссылкой на “pain.001.001.03”.

Or. – Указывает на возможность выбора. В сообщении может быть один или другой элемент.

Mult. – Указывает на обязательность присутствия элемента, а также количество присутствий. Возможные варианты и их значения:

Элемент сообщения – Название элемента в соответствии с ISO 20022 XML.

XML-тег – XML-тег соответствующего элемента в сообщении.

ISO Тип – Описание данных XML-тега.

Комментарий о данных поля – Дополнительные комментарии о содержимом поля.

Элементы сообщения

ISO Index No. Or. Mult. Элемент сообщения <XML-тег> ISO Тип Комментарий касательно данных поля
Customer Credit Transfer Initiation <CstmrCdtTrfInitn>
1.0 [1..1] +GroupHeader <GrpHdr> Component
1.1 [1..1] ++MessageIdentification <MsgId> Max35Text Уникальный идентификатор сообщения присвоенный составителем. Первые 6 знаков должны совпадать с Rietumu ID.
1.2 [1..1] ++CreationDateTime <CreDtTm> ISODateTime (YYYY-MM-DDThh:mm:ss, например: 2015-11-21T09:15:39)
1.6 [1..1] ++NumberOfTransactions <NbOfTxs> Max15NumericText Общее число платежей в файле.
1.7 [0..1] ++ControlSum <CtrlSum> Decimal Number Общая сумма платежей (независимо от валюты). Например, 100EUR; 60USD; 50GBP - значение поля 210.
1.8 + [1..1] ++Initiating Party <InitgPty> Party Identification Component Информация об инициаторе платежа - представителе клиента. Принимается, но не используется.
9.1.0 [0..1] +++Name <Nm> Max140Text
9.1.12 [0..1] +++Identification <Id> Component
9.1.13 {Or [1..1] ++++OrganisationIdentification <OrgId> Component Идентификатор организации.
9.1.14 [0..1] +++++BICOrBEI <BICOrBEI> Identifier
9.1.15 [0..n] +++++Other <Othr> Component
9.1.16 [1..1] ++++++Identification <Id> Max35Text
9.1.17 [0..1] ++++++SchemeName <SchmeNm> Choice Component
9.1.18 [1..1] +++++++Code <Cd> Code Код налогоплательщика - TXID.
9.1.21 Or} [1..1] ++++PrivateIdentification <PrvtId> Component Идентификатор частного лица.
9.1.27 [0..n] +++++Other <Othr> Component
9.1.28 [1..1] ++++++Identification <Id> Max35Text Персональный код частного лица.
9.1.29 [0..1] ++++++SchemeName <SchmeNm> Choice Component
9.1.30 [1..1] +++++++Code <Cd> Code Если указывается персональный код - NIDN.
2.0 [1..n] +PaymentInformation <PmtInf> Component Блок информации о платеже.
2.1 [1..1] ++PaymentInformation Identification <PmtInfId> Max35Text Уникальный идентификатор платёжного блока (назначается инициатором платежа)
2.2 [1..1] ++PaymentMethod <PmtMtd> Code Принимается только код TRF.
2.4 [0..1] ++NumberOfTransactions <NbOfTxs> Max15NumericText Количество платежей в <PmtInf>.
2.5 [0..1] ++ControlSum <CtrlSum> Decimal Number Общая сумма платежей в <PmtInf> независимо от валюты.
2.6 [0..1] ++PaymentTypeInformation <PmtTpInf> Component Совокупность элементов определяющих тип/приоритет платежа.
2.11 [0..1] +++LocalInstrument <LclInstrm> Choice Component
2.12 {Or [1..1] ++++Code <Cd> Code Скорость выполнения платежа для всех платёжных поручений в данном блоке. SDCL - Экспресс, любое другое значение - Стандарт. Если информация будет заполнена на более низком уровне, то это поле будет проигнорировано.
2.13 Or} [1..1] ++++Proprietary <Prtry> Max35Text Приоритет платежа: NORM - Эконом; HIGH - Стандарт; EXPR - Экспресс. Если информация будет заполнена на более низком уровне (поле 2.38), то это поле будет проигнорировано.
2.17 [1..1] ++RequestedExecutionDate <ReqdExctnDt> ISODate Дата, когда платёж отправится на выполнение. Не позже чем через 30 дней. Прошедшие даты не принимаются.
2.19 + [1..1] ++Debtor <Dbtr> Party Identification Component Данные о плательщике. Плательщик определяется по номеру счёта (поле. 2.20).
9.1.0 [0..1] +++Name <Nm> Max140Text Принимается, но не используется. Данные будут взяты из базы данных банка Rietumu, по номеру счёта плательщика.
9.1.1 [0..1] +++PostalAddress <PstlAdr> Component Принимается, но не используется.
9.1.10 [0..1] ++++Country <Ctry> CountryCode Принимается, но не используется.
9.1.11 [0..7] ++++AdressLine <AdrLine> Max70Text Принимается, но не используется.
9.1.12 [0..1] +++Identification <Id> Choice Component Принимается, но не используется.
9.1.13 {Or [1..1] ++++OrganisationIdentification <OrgId> Component Принимается, но не используется. Данные будут взяты из базы данных банка Rietumu, по номеру счёта плательщика (поле. 2.20).
9.1.14 [0..1] +++++BICOrBEI <BICOrBEI> Identifier
9.1.15 [0..n] +++++Other <Othr> Component
9.1.16 [1..1] ++++++Identification <Id> Max35Text
9.1.17 [0..1] ++++++SchemeName <SchmeNm> Choice Component
9.1.18 [1..1] +++++++Code <Cd> Code
9.1.21 Or} [1..1] ++++PrivateIdentification <PrvtId> Component Принимается, но не используется. Данные будут взяты из базы данных банка Rietumu, по номеру счёта плательщика (поле. 2.20).
9.1.22 [0..1] +++++DateAndPlaceOfBirth <DtAndPlcOfBirth> Component
9.1.23 [1..1] ++++++BirthDate <BirthDt> ISODate
9.1.25 [1..1] ++++++CityOfBirth <CityOfBirth> Max35Text
9.1.26 [1..1] ++++++CountryOfBirth <CtryOfBirth> CountryCode
9.1.27 [0..n] +++++Other <Othr> Component
9.1.28 [1..1] ++++++Identification <Id> Max35Text
9.1.29 [0..1] ++++++SchemeName <SchmeNm> Choice Component
9.1.30 [1..1] +++++++Code <Cd> Code
2.20 + [1..1] ++DebtorAccount <DbtrAcct> Component Информация о счёте плательщика, с которого будет произведён платёж.
1.1.0 [1..1] +++Identification <Id> Account Identification Component Идентификатор счёта плательщика.
1.1.1 [1..1] ++++IBAN <IBAN> IBANIdentifier Номер счёта в формате IBAN. В этом поле указывается счёт, с которого будет произведён платёж.
1.1.11 [0..1] +++Currency <Ccy> Currency Code Принимается, но не используется. Валюта будет определяться по CCY каждого платежа отдельно.
2.21 + [1..1] ++DebtorAgent <DbtrAgt> Financial Institution Identification Component
6.1.0 [1..1] +++FinancialInstitutionIdentification <FinInstnId> Component
6.1.1 [0..1] ++++BIC <BIC> BICIdentifier BIC код банка - RTMBLV2X.
2.23 + [0..1] ++UltimateDebtor <UltmtDbtr> Party Identification Component Принимается, но не используется.
9.1.0 [0..1] +++Name <Nm> Max140Text
9.1.1 [0..1] +++PostalAddress <PstlAdr> Component
9.1.10 [0..1] ++++Country <Ctry> CountryCode
9.1.11 [0..7] ++++AdressLine <AdrLine> Max70Text
9.1.12 [0..1] +++Identification <Id> Choice Component
9.1.13 {Or [1..1] ++++OrganisationIdentification <OrgId> Component
9.1.14 [0..1] +++++BICOrBEI <BICOrBEI> Identifier
9.1.15 [0..n] +++++Other <Othr> Component
9.1.16 [1..1] ++++++Identification <Id> Max35Text
9.1.17 [0..1] ++++++SchemeName <SchmeNm> Choice Component
9.1.18 [1..1] +++++++Code <Cd> Code
9.1.21 Or} [1..1] ++++PrivateIdentification <PrvtId> Component
9.1.22 [0..1] +++++DateAndPlaceOfBirth <DtAndPlcOfBirth> Component
9.1.23 [1..1] ++++++BirthDate <BirthDt> ISODate
9.1.25 [1..1] ++++++CityOfBirth <CityOfBirth> Max35Text
9.1.26 [1..1] ++++++CountryOfBirth <CtryOfBirth> CountryCode
9.1.27 [0..n] +++++Other <Othr> Component
9.1.28 [1..1] ++++++Identification <Id> Max35Text
9.1.29 [0..1] ++++++SchemeName <SchmeNm> Choice Component
9.1.30 [1..1] +++++++Code <Cd> Code
9.1.33 [0..1] +++CountryOfResidence <CtryOfRes> CountryCode
2.24 [0..1] ++ChargeBearer <ChrgBr> Code Указывает сторону, которая оплачивает комиссию за перевод. Следующие коды доступны: DEBT - комиссию оплачивает плательщик; SHAR или SLEV - комиссия оплачивается раздельно; CRED - комиссию оплачивает получатель. Если поле пустое, то будет использовано значение SHAR. Если информация будет заполнена на более низком уровне (поле 2.51), то это поле будет проигнорировано.
2.27 [1..n] ++CreditTransferTransactionInformation <CrdtTrfTxInf> Component Каждый блок <CrdtTrfTxInf> содержит информацию об одном уникальном платеже.
2.28 [1..1] +++PaymentIdentification <PmtId> Component Идентификация платежа.
2.29 [0..1] ++++InstructionIdentification <InstrId> Max35Text Принимается, но не используется.
2.3 [1..1] ++++End-To-EndIdentification <EndToEndId> Max35Text Уникальный номер платежа. Передаётся в банк получателя, если это возможно.
2.31 [0..1] +++PaymentTypeInformation <PmtTpInf> Component Содержит информацию о приоритете платежа.
2.33 [0..1] ++++ServiceLevel <SvcLvl> Choice Component Принимается, но не используется.
2.34 [1..1] +++++Code <Cd> Code
2.36 [0..1] ++++LocalInstrument <LclInstrm> Choice Component
2.38 [1..1] +++++Proprietary <Prtry> Max35Text Приоритет платежа: NORM - Эконом; HIGH - Стандарт; EXPR - Экспресс. Если информация будет заполнена на более высоком уровне (поле 2.13), то поле более высокого уровня будет проигнорировано.
2.39 [0..1] ++++CategoryPurpose <CtgyPurp> Choice Component Принимается, но не используется.
2.4 [1..1] +++++Code <Cd> Code
2.42 [1..1] +++Amount <Amt> Сумма платежа и валюта.
2.43 [1..1] ++++InstructedAmount <InstdAmt Ccy=“AAA”> Amount Сумма платежа и валюта. Например, если надо перевести 1000 EUR: <InstdAmt Ccy=“EUR”>1000</InstdAmt>. Обязательно указывать, как сумму, так и валюту.
2.51 [0..1] +++ChargeBearer <ChrgBr> Code Указывает сторону, которая оплачивает комиссию за перевод. Следующие коды доступны: DEBT - комиссию оплачивает плательщик; SHAR или SLEV - комиссия оплачивается раздельно; CRED - комиссию оплачивает получатель. Если поле пустое, то будет использовано значение SHAR. Если информация будет заполнена на более высоком уровне (поле 2.24), то поле более высокого уровня будет проигнорировано.
2.70 + [0..1] +++UltimateDebtor <UltmtDbtr> Identification Принимается, но не используется.
9.1.0 [0..1] ++++Name <Nm> Max140Text
9.1.1 [0..1] ++++PostalAddress <PstlAdr> Component
9.1.10 [0..1] +++++Country <Ctry> CountryCode
9.1.11 [0..7] +++++AdressLine <AdrLine> Max70Text
9.1.12 [0..1] ++++Identification <Id> Choice Component
9.1.13 {Or [1..1] +++++OrganisationIdentification <OrgId> Component
9.1.14 [0..1 ++++++BICOrBEI <BICOrBEI> Identifier
9.1.15 [0..n] ++++++Other <Othr> Component
9.1.16 [1..1] +++++++Identification <Id> Max35Text
9.1.17 [0..1] +++++++SchemeName <SchmeNm> Choice Component
9.1.18 [1..1] ++++++++Code <Cd> Code
9.1.21 Or} [1..1] +++++PrivateIdentification <PrvtId> Component
9.1.22 [0..1] ++++++DateAndPlaceOfBirth <DtAndPlcOfBirth> Component
9.1.23 [1..1] +++++++BirthDate <BirthDt> ISODate
9.1.25 [1..1] ++++++CityOfBirth <CityOfBirth> Max35Text
9.1.26 [1..1] +++++++CountryOfBirth <CtryOfBirth> CountryCode
9.1.27 [0..n] ++++++Other <Othr> Component
9.1.28 [1..1] +++++++Identification <Id> Max35Text
9.1.29 [0..1] +++++++SchemeName <SchmeNm> Choice Component
9.1.30 [1..1] ++++++++Code <Cd> Code
9.1.33 [0..1] ++++CountryOfResidence <CtryOfRes> CountryCode
2.71 + [0..1] +++IntermediaryAgent1 <IntrmyAgt1> Financial Institution Identification Component Банк-корреспондент.
6.1.0 [1..1] ++++FinancialInstitutionIdentification <FinInstnId> Component
6.1.1 [0..1] +++++BIC <BIC> BICIdentifier Банковский идентификационный код - BIC. Использовать только для SWIFT кода.
6.1.2 [0..1] +++++ClearingSystemMemberIdentification <ClrSysMmbId> Component Клиринговая система идентификатор которой указан. Нужно указывать если указывается не SWIFT-код банка.
6.1.3 [0..1] ++++++ClearingSystemIdentification <ClrSysId> Choice Component
6.1.4 [1..1] +++++++Code <Cd> Code Идентификаторы клиринговой системы по адресу http://www.iso20022.org/external_code_list.page из списка ExternalClearingSystemIdentification1Code. Нужно указывать если указывается не SWIFT-код банка.
6.1.6 [1..1] ++++++MemberIdentification <MmbId> Max35Text Идентификатор банка-корреспондента внутри клиринговой системы. Нужно указывать если указывается не SWIFT-код банка.
6.1.7 [0..1] +++++Name <Nm> Max140Text Название банка-корреспондента.
6.1.8 [0..1] +++++PostalAddress <PstlAdr> Component Адрес банка-корреспондента.
6.1.17 [0..1] ++++++Country <Ctry> CountryCode
6.1.18 [0..7] ++++++AdressLine <AdrLine> Max70Text Используются первые 140 знаков, вместе с названием банка.
6.1.25 [0..1] ++++BranchIdentification <BrnchId> Component Принимается, но не используется.
6.1.26 [0..1] +++++Identification <Id> Max35Text
6.1.27 [0..1] +++++Name <Nm> Max140Text
6.1.28 [0..1] +++++PostalAddress <PstlAdr> Component
6.1.37 [0..1] ++++++Country <Ctry> CountryCode
6.1.38 [0..7] ++++++AdressLine <AdrLine> Max70Text
2.72 + [0..1] +++IntermediaryAgentAccount1 <IntrmyAgt1Acct> Cash Account Component Номер счёта в банке-корреспонденте банка получателя.
1.1.0 [1..1] ++++Identification <Id> Identification
1.1.1 {Or [1..1] +++++IBAN <IBAN> IBANIdentifier Только номер счёта в формате IBAN.
1.1.2 Or} [1..1] +++++Other <Othr> Component
1.1.3 [1..1] ++++++Identification <Id> Max34Text
1.1.4 [0..1] ++++++SchemeName <SchmeNm> Choice Component
1.1.5 [1..1] +++++++Code <Cd> Code
2.73 + [0..1] +++IntermediaryAgent2 <IntrmyAgt2> Financial Institution Identification Component Принимается, но не используется.
2.74 + [0..1] +++IntermediaryAgentAccount2 <IntrmyAgt2Acct> Cash Account Component Принимается, но не используется.
2.77 + [0..1] +++CreditorAgent <CdtrAgt> Financial Institution Identification Component Банк получателя.
6.1.0 [1..1] ++++FinancialInstitutionIdentification <FinInstnId> Component
6.1.1 [0..1] +++++BIC <BIC> BICIdentifier Банковский идентификационный код - BIC. Использовать только для SWIFT кода.
6.1.2 [0..1] +++++ClearingSystemMemberIdentification <ClrSysMmbId> Component Клиринговая система идентификатор которой указан. Нужно указывать если указывается не SWIFT-код банка.
6.1.3 [0..1] ++++++ClearingSystemIdentification <ClrSysId> Choice Component
6.1.4 [1..1] +++++++Code <Cd> Code Klīringa sistēmas identifikators no http://www.iso20022.org/external_code_list.page saraksta ExternalClearingSystemIdentification1Code. Нужно указывать если указывается не SWIFT-код банка.
6.1.6 [1..1] ++++++MemberIdentification <MmbId> Max35Text Идентификатор банка получателя внутри клиринговой системы.
6.1.7 [0..1] +++++Name <Nm> Max140Text Название банка получателя.
6.1.8 [0..1] +++++PostalAddress <PstlAdr> Component Адрес банка получателя.
6.1.17 [0..1] ++++++Country <Ctry> CountryCode Код страны.
6.1.18 [0..7] ++++++AdressLine <AdrLine> Max70Text Используются первые 140 знаков, вместе с названием банка.
2.78 + [0..1] +++CreditorAgentAccount <CdtrAgtAcct> Cash Account Component Номер счёта банка получателя в банке-корреспонденте.
1.1.0 [1..1] ++++Identification <Id> Account Identification Component
1.1.1 {Or [1..1] +++++IBAN <IBAN> IBANIdentifier Только номер счёта в формате IBAN.
1.1.2 Or} [1..1] +++++Other <Othr> Component Если номер счёта не в формате IBAN.
1.1.3 [1..1] ++++++Identification <Id> Max34Text
2.79 + [0..1] +++Creditor <Cdtr> Party Identification Component Информация о получателе (кредитор).
9.1.0 [0..1] ++++Name <Nm> Max140Text Название/имя фамилия получателя. В случае платежа SEPA длина поля ограничена 70 знаками.
9.1.1 [0..1] ++++PostalAddress <PstlAdr> Component Адрес получателя.
9.1.10 [0..1] +++++Country <Ctry> CountryCode
9.1.11 [0..7] +++++AdressLine <AdrLine> Max70Text Используется в первых 140 знаках вместе с именем получателя.
9.1.12 [0..1] ++++Identification <Id> Choice Component
9.1.13 {Or [1..1] +++++OrganisationIdentification <OrgId> Component Идентификатор компании.
9.1.14 [0..1] ++++++BICOrBEI <BICOrBEI> Identifier
9.1.15 [0..n] +++++++Other <Othr> Component
9.1.16 [1..1] ++++++++Identification <Id> Max35Text Регистрационный номер компании или номер налогоплательщика.
9.1.17 [0..1] ++++++++SchemeName <SchmeNm> Choice Component
9.1.18 {Or [1..1] +++++++++Code <Cd> Code Код налогоплательщика - TXID.
9.1.19 Or} [1..1] +++++++++Proprietary <Prtry> Max35Text
9.1.20 [0..1] ++++++++Issuer <Issr> Max35Text
9.1.21 Or} [1..1] ++++++PrivateIdentification <PrvtId> Component Идентификатор частного лица.
9.1.22 [0..1] +++++++DateAndPlaceOfBirth <DtAndPlcOfBirth> Component
9.1.23 [1..1] ++++++++BirthDate <BirthDt> ISODate
9.1.25 [1..1] ++++++++CityOfBirth <CityOfBirth> Max35Text
9.1.26 [1..1] ++++++++CountryOfBirth <CtryOfBirth> CountryCode Код страны.
9.1.27 [0..n] ++++++Other <Othr> Component
9.1.28 [1..1] +++++++Identification <Id> Max35Text Если указывается персональный код - NIDN.
9.1.29 [0..1] +++++++SchemeName <SchmeNm> Choice Component
9.1.30 {Or [1..1] ++++++++Code <Cd> Code
9.1.31 Or} [1..1] ++++++++Proprietary <Prtry> Max35Text
9.1.32 [0..1] +++++++Issuer <Issr> Max35Text
9.1.33 [0..1] ++++CountryOfResidence <CtryOfRes> CountryCode Код страны.
2.80 + [0..1] +++CreditorAccount <CdtrAcct> Cash Account Component Информация о счёте получателя (счёт для зачисления средств). ПОЛЕ ОБЯЗАТЕЛЬНО К ЗАПОЛНЕНИЮ
1.1.0 [1..1] ++++Identification <Id> Account Identification Component
1.1.1 {Or [1..1] +++++IBAN <IBAN> IBANIdentifier Счёт получателя в формате IBAN. Поле обязательно для латвийских и SEPA платежей.
1.1.2 Or} [1..1] +++++Other <Othr> Component
1.1.3 [1..1] ++++++Identification <Id> Max34Text Счёт получателя в формате отличном от IBAN.
2.81 + [0..1] +++UltimateCreditor <UltmCdtr> Party Identification Component Принимается, но не используется.
9.1.0 [0..1] ++++Name <Nm> Max140Text
9.1.12 [0..1] ++++Identification <Id> Choice Component
9.1.13 {Or [1..1] +++++OrganisationIdentification <OrgId> Component
9.1.14 [0..1] ++++++BICOrBEI <BICOrBEI> Identifier
9.1.15 [0..n] +++++++Other <Othr> Component
9.1.16 [1..1] ++++++++Identification <Id> Max35Text
9.1.17 [0..1] ++++++++SchemeName <SchmeNm> Choice Component
9.1.18 [1..1] +++++++++Code <Cd> Code
9.1.21 Or} [1..1] ++++++PrivateIdentification <PrvtId> Component Идентификатор частного лица.
9.1.22 [0..1] +++++++DateAndPlaceOfBirth <DtAndPlcOfBirth> Component
9.1.23 [1..1] ++++++++BirthDate <BirthDt> ISODate
9.1.25 [1..1] +++++++CityOfBirth <CityOfBirth> Max35Text
9.1.26 [1..1] ++++++++CountryOfBirth <CtryOfBirth> CountryCode
9.1.27 [0..n] ++++++Other <Othr> Component
9.1.28 [1..1] +++++++Identification <Id> Max35Text
9.1.29 [0..1] +++++++SchemeName <SchmeNm> Choice Component
9.1.33 [0..1] ++++CountryOfResidence <CtryOfRes> CountryCode
2.86 [0..1] +++Purpose <Purp> Choice Component
2.87 [1..1] ++++Code <Cd> ExternalPurposeCode
2.89 [0..10] +++RegulatoryReporting <RgltryRptg> Component Используется для ввода AMK кодов, для VO кодов рублёвых платежей.
11.1.1 [0..1] ++++Authority <Authrty> Component
11.1.3 [0..1] +++++Country <Ctry> CountryCode Код страны (LV в случае AMK, RU в случае российских рублей).
11.1.4 [0..n] ++++Details <Dtls> Component
11.1.5 [0..1] +++++Type <Tp> Max35Text AMK - код внешнего платежа в случае Латвии. VO - код валютной операции в случае России.
11.1.7 [0..1] +++++Country <Ctry> CountryCode
11.1.8 [0..1] +++++Code <Cd> Code Точная информация/ссылочный код. AMK - 3 знака, VO - 5 знаков.
11.1.10 [0..1] +++++Information <Inf> Max35Text
2.98 [0..1] +++RemittanceInformation <RmtInf> Component Детали платежа/цель.
2.99 {Or [0..1] ++++Unstructured <Ustrd> Max140Text Информация о получателе (Детали платежа/цель) в свободной форме до 140 символов. Не разрешается заполнять одновременно со структурированной информацией (поле 2.100). Элемент может быть использован только один раз в каждом случае.
2.1 Or} [0..1] ++++Structured <Strd> Component Информация о получателе (Детали платежа/цель) в структурированном формате. Не разрешается заполнять одновременно с неструктурированной информацией (поле 2.99). Элемент может быть использован только один раз в каждом случае. Общая длина отображаемой информации компонента не может превышать 140 символов.
2.12 [0..1] +++++CreditorReferenceInformation <CdtrRefInf> Component
2.121 [0..1] ++++++Type <Tp> Component Тип ссылки кредитора.
2.122 [1..1] +++++++CodeOrProprietary <CdOrPrtry> Component
2.123 [1..1] ++++++++Code <Cd> Code
2.125 [0..1] ++++++++Issuer <Issuer> Max35Text Выдавший ссылочный номер.
2.126 [0..1] ++++++Reference <Ref> Max35Text Ссылочный номер платежа.

Ввод специфической информации

Обозначение AMK кода

XML образец:

<RgltryRptg>
    <Authrty>
        <Ctry>LV</Ctry>
    </Authrty>
    <Dtls>
        <Tp>AMK</Tp>
        <Cd>111</Cd>
    </Dtls>
</RgltryRptg>

Чтобы указать AMK код, раздел „RegulatoryReporting” (поле 2.89) должен быть заполнен следующей информацией:

ISO Index No. Mult. Элемент сообщения <XML-тег> ISO Тип Комментарий о данных поля
2.89 [0..10] +++RegulatoryReporting <RgltryRptg> Component
11.1.1 [0..1] ++++Authority <Authrty> Component
11.1.3 [0..1] +++++Country <Ctry> CountryCode Код страны - LV.
11.1.4 [0..n] ++++Details <Dtls> Component
11.1.5 [0..1] +++++Type <Tp> Max35Text Тип кода - AMK.
11.1.8 [0..1] +++++Code <Cd> Code Точный пример кода: 111 - экспорт импорт товаров.

Рублёвые платежи в Россию

Для совершения корректного платежа необходимо заполнить следующую информацию:

Код банка получателя – BIK

ISO Index No. Mult. Элемент сообщения <XML-тег> ISO Тип Комментарий о данных поля
2.77 + [0..1] +++CreditorAgent <CdtrAgt> Financial Institution Identification Component Банк получателя.
6.1.0 [1..1] ++++FinancialInstitutionIdentification <FinInstnId> Component Раздел идентификации финансовых институтов.
6.1.2 [0..1] +++++ClearingSystemMemberIdentification <ClrSysMmbId> Component
6.1.3 [0..1] ++++++ClearingSystemIdentification <ClrSysId> Choice Component Идентификатор клиринговой системы.
6.1.4 [1..1] +++++++Code <Cd> Code Константный код - RUCBC.
6.1.6 [1..1] ++++++MemberIdentification <MmbId> Max35Text BIK банка получателя.

*В этом разделе также указывается название банка получателя и адрес.

Корреспондентский счет банка получателя

ISO Index No. Mult. Элемент сообщения <XML-тег> ISO Тип Комментарий о данных поля
2.78 + [0..1] +++CreditorAgentAccount <CdtrAgtAcct> Cash Account Component Номер счёта банка получателя в банке-корреспонденте.
1.1.0 [1..1] ++++Identification <Id>
1.1.2 [1..1] +++++Other <Othr>
1.1.3 [1..1] ++++++Identification <Id> Корреспондентский счет банка получателя (номер счета).

INN код получателя

ISO Index No. Mult. Элемент сообщения <XML-тег> ISO Тип Комментарий о данных поля
2.79 + [0..1] +++Creditor <Cdtr> Party Identification Component
9.1.12 [0..1] ++++Identification <Id> Choice Component
9.1.13 [1..1] +++++OrganisationIdentification <OrgId> Component Идентификатор компании.
9.1.15 [0..n] +++++++Other <Othr> Component
9.1.16 [1..1] ++++++++Identification <Id> Max35Text Код ИНН (например, INN1234567890).
9.1.17 [0..1] ++++++++SchemeName <SchmeNm> Choice Component
9.1.19 [1..1] +++++++++Proprietary <Prtry> Max35Text Тип кода, константа INN.

KPP код получателя

ISO Index No. Mult. Элемент сообщения <XML-тег> ISO Тип Комментарий о данных поля
2.79 + [0..1] +++Creditor <Cdtr> Party Identification Component
9.1.12 [0..1] ++++Identification <Id> Choice Component
9.1.13 [1..1] +++++OrganisationIdentification <OrgId> Component Идентификатор компании.
9.1.15 [0..n] +++++++Other <Othr> Component
9.1.16 [1..1] ++++++++Identification <Id> Max35Text Код КПП (например KPP987654321).
9.1.17 [0..1] ++++++++SchemeName <SchmeNm> Choice Component
9.1.19 [1..1] +++++++++Proprietary <Prtry> Max35Text Тип кода, константа KPP.

Код валютных операций (код VO)

ISO Index No. Mult. Элемент сообщения <XML-тег> ISO Тип Комментарий о данных поля
2.89 [0..10] +++RegulatoryReporting <RgltryRptg> Component
11.1.1 [0..1] ++++Authority <Authrty> Component Указывает на получателя информации (например, государственное учреждение запросившее дополнительную информацию по сделке).
11.1.3 [0..1] +++++Country <Ctry> CountryCode Код страны - RU.
11.1.4 [0..n] ++++Details <Dtls> Component Точная информация о нормативных требованиях, предъявляемых к данным.
11.1.5 [0..1] +++++Type <Tp> Max35Text Тип кода - VO. VO - код валютной операции в случае с Россией.
11.1.10 [0..1] +++++Code <Inf> Max35Text Код валютной операции (5 цифр).

Статус платежа pain.002.001.03

Описание содержания сообщения о статусе платежа

Сообщение содержит два обязательных блока: Заголовок (Header) и информация об оригинальном платёжном поручении.

Заголовок (Header): Этот блок указывается только один раз и содержит элементы идентификации файла - идентификатор платежа, дата и время создания сообщения, инициатор платежа (представитель).

Информация об оригинальном платёжном поручении: в файле от клиента может содержаться один (или несколько) платёжных блоков, и клиент получает соответствующую структуру в ответе статуса платежа.

Таблица описывает поля сообщения в следующем формате:

ISO Index No. Or. Mult. Элемент сообщения <XML-тег> ISO Тип Комментарий о данных поля
[1..1] + Message root

ISO Index No. – Номер элемента сообщения. Номер соответствует описанию стандарта ISO 20022 XML, который может быть найден по адресу www.iso20022.org в “Catalogue of ISO 20022 messages” со ссылкой на “pain.001.001.03”.

Or. – Указывает на возможность выбора. В сообщении может быть один или другой элемент.

Mult. – Указывает на обязательность присутствия элемента, а также количество присутствий. Возможные варианты и их значения:

Элемент сообщения – Название элемента в соответствии с ISO 20022 XML.

XML-тег – XML-тег соответствующего элемента в сообщении.

ISO Тип – Описание данных XML-тега.

Комментарий о данных поля – Дополнительные комментарии о содержимом поля.

Элементы сообщения

ISO Index No. Mult. Элемент сообщения <XML-тег> ISO Тип Комментарий о данных поля
0.0 [1..1] CustomerPaymentStatusReport <CstmrPmtStsRpt>
1.0 [1..1] +GroupHeader <GrpHdr> Component Информация о сообщении.
1.1 [1..1] ++MessageIdentification <MsgId> Max35Text Уникальный идентификатор сообщения присвоенный составителем.
1.2 [1..1] ++CreationDateTime <CreDtTm> ISODateTime Время и дата создания (YYYY-MMDDThh:mm:ss, например: 2012-11-21T09:10:49).
1.3 [1..1] ++InitiatingParty <InitgPty> Component Финансовое учреждение, в котором находится дебетный счёт (банк, который выполнит платеж).
9.1.12 [1..1] +++Identification <Id> Component
9.1.13 [1..1] ++++OrganisationIdentification <OrgId> Component
9.1.14 [1..1] +++++BICOrBEI <BICOrBEI> Identifier BIC код банка.
2 [1..1] +OriginalGroupInformationAndStatus <OrgnlGrpInfAndSts> Component Информации о сообщении об инициации платежа.
2.1 [1..1] ++OriginalMessageIdentification <OrgnlMsgId> Max35Text Идентификатор сообщения об инициации платежа из pain.001.001 файла.
2.2 [1..1] ++OriginalMessageNameIdentification <OrgnlMsgNmId> Max35Text Схема идентификатора платёжного поручения - pain.001.001.03.
2.6 [0..1] ++GroupStatus <GrpSts> TransactionGroupStatus3Code Статус пакета платежей. АО “Rietumu Banka” использует следующие коды: RJCT - если весь пакет платежей был отменён. PDNG - в процессе. PART - если обработка хоть 1 платежа ещё не завершён. ACSC - обработка всех платежей завершена.
2.7 [0..n] ++StatusReasonInformation <StsRsnInf> Component
2.9 [0..1] +++Reason <Rsn> Component
2.10 [1..1] ++++Code <Cd> ExternalStatusReason1Code
2.12 [0..n] +++AdditionalInformation <AddtlInf> Max105Text Текстовая информация о статусе
3.0 [0..n] +OriginalPaymentInformationAndStatus <OrgnlPmtInfAndSts> Component Информация о пакете платёжных поручений.
3.1 [1..1] ++OriginalPaymentInformationIdentification <OrgnlPmtInfId> Max35Text Оригинальный идентификатор пакета платежа (<PmtInfId>).
3.15 [0..n] ++TransactionInformationAndStatus <TxInfAndSts> Component Информация об инициации платёжей.
3.17 [0..1] +++OriginalInstructionIdentification <OrgnlInstrId> Max35Text Идентификатор оригинальной транзакции.
3.18 [0..1] +++OriginalEndtoEndIdentification <OrgnlEndToEndId> Max35Text end-to-end идентификатор оригинальной транзакции.
3.19 [0..1] +++TransactionStatus <TxSts> TransactionIndividualStatus3Code Статус выполнения транзакции. AО “Rietumu Banka” использует следующие коды: RJCT - платёж отменён. PDNG - платёж в процессе. ACSC - платёж завершён.
3.20 [0..n] +++StatusReasonInformation <StsRsnInf> Component Информация о ходе выполнения платежа.
3.21 [0..1] +++Originator <Orgtr> Component
9.1.12 [0..1] ++++Identification <Id> Component
9.1.13 [1..1] +++++OrganisationIdentification <OrgId> Component
9.1.14 [1..1] ++++++BICorBEI <BICOrBEI> AnyBICIdentifier
3.22 [0..1] ++++Reason <Rsn> Component Код причины состояния платежа.
3.23 [1..1] +++++Code <Cd> ExternalStatusReason1Code Коды статуса доступны по ссылке http://www.iso20022.org/External_Code_Lists_and_DSS.page External Code Lists spreadsheet. Если статус кода NARR, то дополнительная информация будет доступна в AddtlInf элемента.
3.25 [0..n] ++++AdditionalInformation <AddtlInf> Max105Text Текстовая информация о ходе платежа и/или сообщение об ошибке.
3.30 [0..1] +++AccountServicerReference <AcctSvcrRef> Max35Text Предоставленный банком Rietumu номер ссылки платежа.
3.32 [0..1] +++OriginalTransactionReference <OrgnlTxRef> Component Информация для дополнительного идентифицирования для конкретной транзакции.
3.34 [0..1] ++++Amount <Amt> Component
3.35 [1..1] +++++InstructedAmount <InstdAmt Ccy=“AAA”> Amount
3.41 [1..1] ++++RequestedExecutionDate <ReqdExctnDt> DateTime
3.121 [1..1] ++++Debtor <Dbtr> Component
9.1.0 [1..1] +++++Name <Nm> Text
3.122 [1..1] ++++DebtorAccount <DbtrAcct>
1.1.0 [1..1] +++++Identification <Id>
1.1.1 [1..1] ++++++IBAN <IBAN> Identifier
1.1.11 [1..1] +++++Currency <Ccy> Code
3.123 [1..1] ++++DebtorAgent <DbtrAgt>
6.1.0 [1..1] +++++FinancialInstitutionIdentification <FinInstnId>
6.1.1 [1..1] ++++++BIC <BIC> Identifier
3.125 [0..1] ++++CreditorAgent <CdtrAgt>
6.1.0 [1..1] +++++FinancialInstitutionIdentification <FinInstnId>
6.1.1 [1..1] ++++++BIC <BIC> Identifier
6.1.2 [1..1] ++++++ClearingSystemMemberIdentification <ClrSysMmbId>
6.1.3 [0..1] +++++++ClearingSystemIdentification <ClrSysId>
6.1.4 [1..1] ++++++++Code <Cd> Code
6.1.6 [1..1] +++++++MemberIdentification <MmbId> Text
3.127 [1..1] ++++Creditor <Cdtr>
9.1.0 [1..1] +++++Name <Nm> Text
3.128 [1..1] ++++CreditorAccount <CdtrAcct>
1.1.0 [1..1] +++++Identification <Id>
1.1.1 [1..1] ++++++IBAN <IBAN> Identifier
1.1.2 [1..1] ++++++Other <Othr>
1.1.3 [1..1] +++++++Identification <Id> Text