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.
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.
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 na żądanie, PayU zwraca obiekt z zawierający pary walutowe razem z kursem ich przewalutowania.
Należy zawsze korzystać z najnowszej tabeli kursów wymiany. Nową tabelę pobieraj natychmiast po wygaśnięciu starej.
{
    "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.
{
  "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.
{
    "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 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.
| 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 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. |