История изменений
Версия документа | Описание изменений | Дата изменения |
---|---|---|
1.2 | Исправлено описание поля Details70 для функции "Отправить документ" | 2021-04-12 |
1.1 | Исправлено описание полей uniqueID и trnID XML ответа для функции "Список транзакций" | 2020-07-17 |
1.0 | Первоначальная публикация документации | 2017-01-13 |
Инструкция по подключению
Общая информация
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 | Описание |
---|---|
<uniqueID> | уникальный идентификатор транзакции |
<trnID> | ID транзакции, который используется в запросе для получения следующей страницы |
<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> | примечание | 140 | 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 используются следующие функции:
- PostISO20022
- ISO20022Status
- GetISO20022ForSign
Функция „Инициация платежа”
Для отправки сообщения в формате 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. – Указывает на обязательность присутствия элемента, а также количество присутствий. Возможные варианты и их значения:
- [1..1] – Элемент является обязательным и может присутствовать только один раз;
- [1..n] – Элемент является обязательным и может присутствовать один или несколько раз;
- [0..1] – Элемент может быть пропущен. Если элемент присутствует, то присутствует только один раз;
- [0..n] – Элемент может быть пропущен. Если элемент присутствует, то присутствует один или несколько раз.
Элемент сообщения – Название элемента в соответствии с 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. – Указывает на обязательность присутствия элемента, а также количество присутствий. Возможные варианты и их значения:
- [1..1] – Элемент является обязательным и может присутствовать только один раз;
- [1..n] – Элемент является обязательным и может присутствовать один или несколько раз;
- [0..1] – Элемент может быть пропущен. Если элемент присутствует, то присутствует только один раз;
- [0..n] – Элемент может быть пропущен. Если элемент присутствует, то присутствует один или несколько раз.
Элемент сообщения – Название элемента в соответствии с 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 |