Develop money transfer
UKRAINIAN PROCESSING CENTER
Kyiv
Інструкція розробника
Develop money transfer
Інструкція призначена для інтеграції з платіжним шлюзом Money Transfer
Версия 1.3
2014
Правила роботи шлюзу
- Взаємодія з шлюзом здійснюється за допомогою HTTP POST запитів / відповідей. Дані запитів і відповідей передаються у форматі XML.
- Всі запити підписуються цифровим підписом.
- Відповідь від сервера обов'язково перевіряється сертифікатом на предмет валідності підпису.
Формування запиту
Для всіх видів запитів виділяються загальні обов'язкові дані , до яких відносяться:
- MerchantId і TerminalId - ідентифікатори основного терміналу сервіс-провайдера .
Поле TerminalId є опціональним , оскільки до одного ідентифікатором MerchantId прив'язується тільки один TerminalId .
- TrackingId – унікальний ідентифікатор транзакції , який встановлюється сервіс-провайдером. Дані TrackingId повинні однозначно ідентифікувати транзакції переказу коштів . Також TrackingId може використовуватися в додаткових сервісах , наприклад , при визначенні типу перекладу з карти на карту. Так само , TrackingId використовується для отримання статусу завершеної транзакції. Значення має складатися з маленьких і великих букв англійського алфавіту і цифр довжиною не більше 16 символів Ø Signature - криптографічний підпис запиту.
Загальні теги запиту :
<Request root tag>
<MerchantId>9752130</MerchantId>
<TerminalId>E9879930</TerminalId>
<TrackingId>fd4e1c67a2d28fced</TrackingId>
...
<Signature></Signature>
</Request root tag>
Обробка відповіді
Незалежно від типу запиту, відповідь обов'язково буде містити Signature і Status. Ø Signature - криптографічний підпис відповіді.
Status - статус виконання запиту, який у свою чергу складається з:
Code - тризначний код, який визначає успішність виконання запиту або пояснює причину помилки або відмови.
Message - текстове повідомлення в довільній формі, яка деталізує причину отримання того, чи іншого коду відмови або помилки. Загальні теги відповіді :
<Response root tag>
<Status>
<Code>000</Code>
<Message> status message...</Message>
</Status>
<Signature></Signature>
</Response root tag>
.
Типи запитів
- CardZoneRequest
- TransactionRequest
- Card-to-Card
- Card-To-Account
- Account-To-Card
- Reversal on funding
- StatusRequest
.
Короткий опис операцій
1 . CardZoneRequest- запит дозволяє визначити тип переказу ( local , domestic) , приналежність карти до платіжної системи , а також тип карткового продукту .
.
Механізми та типи переказів
Local - тип переказу з картки на картку який здійснюється однією транзакцією , всередині одного банку. Визначення переказу, як Local , можливо тільки для card-to-card переказу, і не застосовується до переказів Account-To-Card і Card-To-Account .
Domestic - внутрішньодержавний переказ між картами різних банків . Банки-емітенти є резидентами країни банка -екваєра . Переказ здійснюється з використанням VPP MT і / або MC MS .
CardZoneRequest доцільно використовувати для переказів Card-to-Card, оскільки інші види переказів апріорі мають тип domestic.
2 . TransactionRequest - дозволяє зробити переказ грошових коштів з банківської картки відправника на іншу картку одержувача , перевести кошти з картки на банківській рахунок і кошти з рахунку на банківську карту, та виконати повернення на картку.
3 . StatusRequest - дозволяє з легкістю дізнатися статус транзакції маючи мінімальний набір даних.
Формування підпису
Підпис XML документу залежить від мови програмування яку використовує клієнт.
Підпис має відповідати стандарту W3C XML Signature Syntax and Processing.
Приклад на мові PHP з використанням бібліотеки для підпису xmlseclibs.
1.Формуєм запит XML (приклад для Card-to-Card).
<CardZoneRequest> <MerchantId>1752739</MerchantId> <TerminalId>E7880539</TerminalId> <TrackingId>fd4e1c67a28</TrackingId>
<CardFromNumber>4999999999990011</CardFromNumber>
<CardToNumber>5559490000000148</CardToNumber>
</CardZoneRequest>
2. Підключаємо бібліотеку - require_once dirname(__FILE__) .'/xmlseclibs/xmlseclibs.php';
3.Функція для підпису
Вхідні параметри
$fxml – xml запит.
$fpkey – згенерований приватний ключ.
Результат – підписаний XML запит.
Перевірка відповіді шлюзу
Функція для перевірки підпису
Вхідні параметри
$fxmlsigned – xml-відповідь сервера.
$crt_server – сертифікат сервера.
Тільки на основі перевірки валідності XML можна оброблювати отримані дані, впевнившись що вони отримані з шлюзу УПЦ.
Підпис XML потрібно використовувати без виключення для всіх запитів. (В подальших прикладах елемент <Signature></Signature> опускається, оскільки принцип його формування викладений вище.)
II. TransactionRequest
.
.
.
TransactionRequest CardToAccount и AccountToCard
Request CardToAccount a. TEST url - https://ecg.test.upc.ua/mt/tran c. WORK url - https://secure.upc.ua/mt/tran |
Request AccountToCard | |
<TransactionRequest> <MerchantId>9752130</MerchantId> <TerminalId>E9879930</TerminalId> <TrackingId>fd4e1c67a2846ce</TrackingId> <Amount> <Value>10000</Value> <CurrencyCode>980</CurrencyCode> <Surcharge>100</Surcharge> </Amount> <Funding> <CardInfo> <CardNumber>4999999999990011</CardNumber> <ExpYear>2017</ExpYear> <ExpMonth>12</ExpMonth> </CardInfo>
якщо Status не Y то CVV2 обов’язкове <CVV2>123</CVV2> </Funding> </TransactionRequest> |
<TransactionRequest> <MerchantId>9752130</MerchantId> <TerminalId>E9879930</TerminalId> <TrackingId>fd4e1c67a2846ced849ee1bb76e739asd3563eb12</TrackingId> <Amount> <Value>10000</Value> <CurrencyCode>980</CurrencyCode> <Surcharge>100</Surcharge> </Amount> <Payment> <RecipientCardNumber>5559490000000148</RecipientCardNumber> <SenderAccountNumber>26385001215533</SenderAccountNumber> </Payment> </TransactionRequest> |
.
Опис полів | Опис полів |
MerchantId - унікальний ідентифікатор торговця. TerminalId - унікальний ідентифікатор терміналу. TrackingId - унікальний ідентифікатор транзакції. (Значення має складатися з маленьких і великих букв англійського алфавіту і цифр довжиною не більше 16 символів) CardNumber - номер картки відправника |
MerchantId - унікальний ідентифікатор торговця. TerminalId - унікальний ідентифікатор терміналу. TrackingId - унікальний ідентифікатор транзакції. (Значення має складатися з маленьких і великих букв англійського алфавіту і цифр довжиною не більше 16 символів) RecipientCardNumber - карта одержувача SenderAccountNumber - номер рахунку відправника |
Reversal on funding
Request a. TEST url - https://ecg.test.upc.ua/mt/reversal d. WORK url - https://secure.upc.ua/mt/reversal |
Response |
<ReversalRequest> <MerchantId>9752130</MerchantId> <TerminalId>E9879930</TerminalId> <TrackingId>trantest2</TrackingId> <Amount> <Value>100</Value> <CurrencyCode>980</CurrencyCode> <Surcharge>100</Surcharge> </Amount> <Funding> <ApprovalCode>019997</ApprovalCode> <RRN>511110701902</RRN> </Funding> </ReversalRequest> |
<ReversalResponse> <TrackingId>trantest2</TrackingId> <Status> <Code>000</Code> <Message>Approved</Message> </Status> <ReversalResult> <Date>2015-04-21 10:30:05 +0300</Date> <MerchantCliche> <MerchantId>9752130</MerchantId> <TerminalId>E9879930</TerminalId> <MCC>6012</MCC> </MerchantCliche> <ApprovalCode>040529</ApprovalCode> <AuthCode>000</AuthCode> <RRN>511110701902</RRN> </ReversalResult> </ReversalResponse> . |
Опис полів | Опис полів |
. MerchantId - унікальний ідентифікатор торговця. TerminalId - унікальний ідентифікатор терміналу. TrackingId - унікальний ідентифікатор транзакції. (Значення має складатися з маленьких і великих букв англійського алфавіту і цифр довжиною не більше 16 символів) |
. Code - код транзакції Message - повідомлення транзакції Date - час виконання транзак Payment або Funding у форматі YYYY-MM-DD HH: MI: SS + TimeZone; MerchantCliche – інформація по кліше з яким була виконана транзакція. ApprovalCode - код авторизації; RRN - Retrieval Reference Number; |
III . Transaction StatusRequest (CardToCard)
Request a. TEST url - https://secure.upc.ua/mt_test/status d. WORK url - https://secure.upc.ua/mt/status |
Response |
<StatusRequest> <MerchantId>1752739</MerchantId> <TerminalId>E7880539</TerminalId> <TrackingId> fd4e1c67a2846ce</TrackingId> </StatusRequest> |
<StatusResponse> <TransactionResponses> <TransactionResponse> <Status> <Code>000</Code> <Message>Approved</Message> </Status> <FundingResult> <Date>2014-02-07 09:13:25 +0200</Date> <CVResult>M</CVResult> <MerchantCliche> <MerchantId>1234567</MerchantId> <TerminalId>E1234567</TerminalId> <MCC>6012</MCC> </MerchantCliche> <ApprovalCode>053949</ApprovalCode> <AuthCode>000</AuthCode> <RRN>403809390850</RRN> </FundingResult>
<PaymentResult> <Date>2014-02-07 09:13:25 +0200</Date> <MerchantCliche> <MerchantId>1234567</MerchantId> <TerminalId>E1234567</TerminalId> <MCC>6012</MCC> </MerchantCliche> <ApprovalCode>050020</ApprovalCode> <AuthCode>000</AuthCode> <RRN>403809390387</RRN> </PaymentResult> </TransactionResponse> </TransactionResponses> </StatusResponse> . |
Опис полів | Опис полів |
. MerchantId - унікальний ідентифікатор торговця. TerminalId - унікальний ідентифікатор терміналу. TrackingId - унікальний ідентифікатор транзакції. (Значення має складатися з маленьких і великих букв англійського алфавіту і цифр довжиною не більше 16 символів) |
. Code - код транзакції Message - повідомлення транзакції Date - час виконання транзак Payment або Funding у форматі YYYY-MM-DD HH: MI: SS + TimeZone; CVResult - результат аутентифікації карти MerchantCliche – інформація по кліше з яким була виконана транзакція. ApprovalCode - код авторизації; AuthCode - код відповіді авторизаційної системи; RRN - Retrieval Reference Number; |