Wypłaty wielowalutowe
Wypłaty wielowalutowe rozszerzają API wypłat o wypłaty w walucie innej niż waluta sklepu. Przewalutowanie jest dostępne między walutami PLN, CZK, EUR i HUF.
Wypłaty wielowalutowe wymagają specjalnej konfiguracji po stronie PayU i spełnienia określonych wymagań formalnych.
Wypłaty wielowalutowe są dostępne tylko przy wypłatach na rachunek bankowy submerchanta marketplace.
Pobieranie tabeli kursów
Do przewalutowania wypłat używaj kursów udostępnianych przez PayU. Aby pobrać tabelę kursów, wygeneruj token OAuth i wyślij żądanie HTTP GET na endpoint /api/v2_1/mcp-partners/{fxPartnerId}/fx-table.
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.
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 PayU zwraca obiekt zawierający pary walutowe wraz z ich kursami.
Zawsze korzystaj z najnowszej tabeli kursów. Nową tabelę pobieraj natychmiast po wygaśnięciu poprzedniej.
{
"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, wyślij rozszerzone żądanie wypłaty metodą HTTP POST na endpoint /api/v2_1/payouts. Dodaj do żądania następujące obiekty:
account– zawierający identyfikator submerchanta,payout– zawierający walutę sklepu i kwotę wypłaty,fxData– zawierający dane potrzebne do przewalutowania.
{
"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śli wypłata została zlecona poprawnie, PayU zwraca potwierdzenie z danymi wypłaty.
{
"payout": {
"payoutId": "bd71af6089ed4723b8699a9b4d14432c",
"extPayoutId": "my_payout_id_123455",
"extCustomerId": "submerchant1",
"amount": 49,
"currencyCode": "PLN",
"status": "PENDING",
"fxData": {
"currencyCode": "EUR",
"amount": 11,
"rate": 0.22458,
"partnerId": "9999e44b-f68f-42e1-ad6c-3735ba1e2954",
"tableId": "2055"
}
},
"status": {
"statusCode": "SUCCESS"
}
}
Pobieranie danych wypłaty wielowalutowej
Aby pobrać dane wypłaty wielowalutowej, wyślij żądanie HTTP GET na endpoint /api/v2_1/payouts/{payoutId}. Parametr payoutId jest zwracany w odpowiedzi na żądanie wypłaty.
Odpowiedź zawiera dane wypłaty i jej bieżący status.
{
"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:
{
"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 samo dotyczy zestawień generowanych w panelu menedżerskim. Zestawienie zawiera kwotę potrąconą z salda submerchanta bez szczegółów przewalutowania.
Kody błędów dla wypłat wielowalutowych
Poniżej znajdziesz listę błędów odnoszących się konkretnie do wypłat wielowalutowych.
| Status HTTP | Status | Kod błędu | Opis |
|---|---|---|---|
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 obsługiwany. |
400 | ERROR_VALUE_INVALID | FX_BASE_CURRENCY_NOT_SUPPORTED | Podany kod waluty, z której ma nastąpić przewalutowanie, nie jest obsługiwany. |
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. |