Przejdź do głównej zawartości

Wypłaty wielowalutowe

Usługa wypłat wielowalutowych jest rozszerzeniem API przeznaczonego do wypłat. Usługa ta pozwala na realizację wypłat w walucie innej niż waluta sklepu. Aktualnie możliwe jest przewalutowanie w zakresie kombinacji walut: PLN, CZK, EUR, HUF.

Wymagania

Aby korzystać z wypłat wielowalutowych, konieczna jest specjalna konfiguracja po stronie PayU i należy spełnić określone wymagania formalne.


Obsługa wypłat wielowalutowych aktualnie jest dostępna jedynie w przypadku wypłaty na rachunek bankowy submerchanta marketplace.

Pobieranie tabeli kursów

Do przewalutowania wypłat powinieneś użyć kursów udostępnianych przez PayU. W celu pobrania tabeli kursów, musisz wygenerować token OAuth, a następnie wykonać żądanie z metodą HTTP GET na endpoint /api/v2_1/mcp-partners/{fxPartnerId}/fx-table.

Ciało żądania metody GET

Wysyłając żądania z metodą GET upewnij się, że w ciele żądania nie przesyłasz żadnych danych. Zgodnie ze standardem RFC 9110 żądania, które nie spełniają tego wymogu, zostaną odrzucone przez PayU i zwrócony zostanie kod HTTP 403.

Przykład żądania pobrania tabeli kursów
curl -X GET https://secure.payu.com/api/v2_1/mcp-partners/9999e44b-f68f-42e1-ad6c-3735ba1e2954/fx-table \
-H "Authorization: Bearer 3e5cac39-7e38-4139-8fd6-30adc06a61bd"

Szczegóły parametrów znajdziesz w sekcji Retrieve Rate Table w naszej referencji API.

W odpowiedzi na żądanie, PayU zwraca obiekt z zawierający pary walutowe razem z kursem ich przewalutowania.

Odświeżanie tabeli kursów

Należy zawsze korzystać z najnowszej tabeli kursów wymiany. Nową tabelę pobieraj natychmiast po wygaśnięciu starej.

Przykład odpowiedzi na żądanie pobrania tabeli kursów
{
"id": "3050",
"validTo": "2024-05-12T20:20:00Z",
"currencyPairs": [
{
"baseCurrency": "EUR",
"exchangeRate": 4.2556,
"termCurrency": "PLN"
}
...
]
}

Rozszerzenie żądania wypłaty

Aby wykonać wypłatę z przewalutowaniem, musisz wysłać rozszerzone żądanie wypłaty, przy użyciu metody POST, na endpoint /api/v2_1/payouts. Żądanie należy rozszerzyć o sekcje:

  • account - zawierającą identyfikator submerchanta,
  • payout - zawierającą walutę sklepu i kwotę wypłaty,
  • fxData - zawierającą dane potrzebne do przewalutowania.
Przykład żądania wypłaty wraz z przewalutowaniem
{
"shopId": "JahDKDVm",
"account": {
"extCustomerId": "submerchant1",
},
"payout": {
"currencyCode": "PLN",
"description": "Some payout",
"extPayoutId": "my_payout_id_123455",
"amount": 49,
},
"fxData": {
"partnerId": "9999e44b-f68f-42e1-ad6c-3735ba1e2954",
"currencyCode": "EUR",
"amount": 11,
"rate": 0.22458,
"tableId": "2055",
}
}

Szczegółowe informacje na temat parametrów znajdziesz w sekcji Create a Payout w naszej referencji API.

Odpowiedź na żądanie wypłaty wielowalutowej

Jeżeli wypłata została zlecona poprawnie, w odpowiedzi otrzymasz potwierdzenie wysłania żądania z danymi wypłaty.

{
"payout": {
"payoutId": "bd71af6089ed4723b8699a9b4d14432c",
"extPayoutId": "my_payout_id_123455",
"extCustomerId": "my_payout_id_123455",
"amount": 49,
"currencyCode": "PLN",
"status": "PENDING",
"fxData": {
"currencyCode": "EUR",
"amount": 11,
"rate": 0.22458,
"partnerId": "9999e44b-f68f-42e1-ad6c-3735ba1e2954",
"tableId": "2055",
}
}
}

Pobieranie danych wypłaty wielowalutowej

Aby pobrać dane wypłaty wielowalutowej musisz wysłać żądanie, przy użyciu metody GET, na endpoint /api/v2_1/payouts/{payoutId}. Użyty w żądaniu parametr payoutId zwracany jest w odpowiedzi do żądania zlecenia wypłaty.

W odpowiedzi zwrócone zostaną informacje o danej wypłacie wraz z jej obecnym statusem.

Odpowiedź na żądanie pobrania danych wypłaty
{
"payout": {
"payoutId": "bd71af6089ed4723b8699a9b4d14432c",
"extPayoutId": "my_payout_id_123455",
"amount": 49,
"currencyCode": "PLN",
"description": "Billing: 5000000444",
"status": "PENDING",
"fxData": {
"currencyCode": "EUR",
"amount": 11,
"rate": 0.22458,
"partnerId": "9999e44b-f68f-42e1-ad6c-3735ba1e2954",
"tableId": "2055"
}
},
"status": {
"statusCode": "SUCCESS"
}
}

Szczegółowe informacje na temat parametrów znajdziesz w sekcji Retrieve a Payout w naszej referencji API.

Wypłaty wielowalutowe w historii operacji submerchanta

Wypłata wielowalutowa pobrana z historii operacji submerchanta nie zawiera danych konwersji. Oprócz innych danych wyświetlana jest tylko kwota, która została potrącona z salda submerchanta. Poniżej znajduje się przykład wypłaty wielowalutowej pobranej wraz z historią operacji:

Wypłata wielowalutowa widoczna w pobranej historii operacji submerchanta
{
"operations": [
...
{
"currencyCode": "PLN",
"amount": 49,
"type": "PAYOUT",
"description": "Billing: 5000000444",
"status": "COMPLETED",
"details": {
"payoutId": "bd71af6089ed4723b8699a9b4d14432c",
"extPayoutId": "my_payout_id_123455",
"accountNumber": "PL76804610704885900358890402",
"counterparties": [],
"funds": []
},
"eventDate": "2024-05-09T11:10:35+02:00",
"creationDate": "2024-05-09T11:09:39+02:00"
}
],
...
}

Więcej informacji na temat pobierania historii operacji submerchanta znajdziesz na stronie Marketplace.

To ograniczenie dotyczy także zestawień generowanych z panelu administracyjnego. Zestawienie będzie zawierać kwotę potrąconą z salda submerchanta bez szczegółów konwersji.

Kody błędów dla wypłat wielowalutowych

Poniżej znajdziesz listę błędów odnoszących się konkretnie do wypłat wielowalutowych.

Kody błędów dla wypłat wielowalutowych
Status HttpStatusKod błęduOpis
400
BUSINESS_ERROR
FX_PAYOUT_NOT_ALLOWED
Usługa wypłat wielowalutowych dla danego merchanta jest niedostępna. Wymagana jest specjalna konfiguracja po stronie PayU.
400
ERROR_VALUE_INVALID
FX_PARTNER_NOT_FOUND
Podany identyfikator partnera nie istnieje.
400
ERROR_VALUE_INVALID
FX_TABLE_OUTDATED
Użyta tabela kursowa jest już przeterminowana.
400
ERROR_VALUE_INVALID
FX_TERM_AMOUNT_INVALID
Niepoprawnie wyliczona kwota wypłaty po przewalutowaniu.
400
ERROR_VALUE_INVALID
FX_TABLE_NOT_FOUND
Nie znaleziono tabeli kursowej o podanym identyfikatorze w ramach wskazanego partnera.
400
ERROR_VALUE_INVALID
FX_RATE_INVALID
Podany kurs jest niepoprawny dla wskazanej pary walutowej.
400
ERROR_VALUE_INVALID
FX_CURRENCY_PAIR_NOT_SUPPORTED
Użyta para walutowa nie jest wspierana lub niedostępna.
400
ERROR_VALUE_INVALID
FX_TERM_CURRENCY_NOT_SUPPORTED
Podany kod waluty, do której ma nastąpić przewalutowanie nie jest wspierany.
400
ERROR_VALUE_INVALID
FX_BASE_CURRENCY_NOT_SUPPORTED
Podany kod waluty, z której ma nastąpić przewalutowanie nie jest wspierany.
400
ERROR_VALUE_INVALID
INCONSISTENT_PAYOUT_CURRENCY
Podana waluta nie jest zgodna ze zdefiniowaną walutą sklepu.
400
ERROR_VALUE_INVALID
MISSING_<fieldName>
Brakuje wskazanego pola.
400
ERROR_VALUE_INVALID
INVALID_<fieldName>
Wskazane pole jest niepoprawne.
400
ERROR_VALUE_INVALID
<fieldName>_TOO_LONG
Wskazane pole jest za długie.