Płatności wielowalutowe
Jeśli korzystasz z formatek płatniczych PayU, Płatności wielowalutowe (ang. Multi-Currency Pricing) są włączone domyślnie w twoim sklepie. To rozwiązanie pozwala na obciążenie kart płatniczych klientów w różnych walutach, bez konieczności posiadania w PayU salda w tych walutach. Klient, po wyborze płatności kartą w formatce płatniczej, wybiera w jakiej walucie chce zapłacić, dzięki czemu nie ponosi kosztów przewalutowania.
Istnieją dwa rodzaje walut powiązanych z usługą Multi-Currency Pricing:
-
Term currency (waluta końcowa - waluta sklepu) - w tej walucie odbiorca otrzyma płatność (waluta ustawiona dla sklepu w systemie PayU).
-
Base currency (waluta początkowa - waluta płacącego) - w tej walucie zostanie obciążony płatnik (waluta rozliczeniowa karty płatniczej).
Term Currency (walute końcowa) | Base currency (waluta początkowa) |
---|---|
CZK | EUR |
CZK | GBP |
CZK | USD |
PLN | DKK |
PLN | EUR |
PLN | GBP |
PLN | NOK |
PLN | SEK |
PLN | USD |
Możliwości rozszerzenia usługi
Jeśli korzystasz z własnej strony płatności możesz rozbudować usługę płatności wielowalutowych w taki sposób, by klient mógł zobaczyć cenę produktu w Twoim sklepie w wybranej przez siebie walucie. W takim przypadku konieczna będzie implementacja dodatkowego żądania w celu pobrania tabeli kursowej. Ponadto zamówienie należy rozszerzyć o obiekt mcpData
.
Przed rozpoczęciem rozszerzonej integracji należy uzyskać mcpPartnerId
i odpowiednio skonfigurować POS - w tym celu prosimy o kontakt z opiekunem handlowym w PayU.
Jak działa usługa?
- Sklep pobiera kursy walut w trybie dziennym od PayU.
- Sklep przelicza swoje ceny towarów/usług z waluty sklepu (Term currency - np. CZK, PLN) do waluty płacącego (Base currency), wg kursów walut otrzymanych z PayU (np. EUR/PLN, GBP/CZK, USD/PLN).
- Klienci mogą wybrać opcję zapłaty kartą płatniczą w walucie sklepu (bez przeliczenia kursu) lub w walucie rozliczeniowej swojej karty płatniczej (wówczas kwota jest przeliczana wg kursu otrzymanego z PayU).
- Sklep otrzymuje środki z PayU w walucie końcowej (Term currency), nie ma więc konieczności utrzymywania salda w każdej z walut.
Pobieranie tebeli kursów
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.
W celu pobrania tabeli kursowej od PayU, należy pobrać token OAuth, a następnie wykonać żądanie z metodą HTTP GET na endpoint /api/v2_1/mcp-partners/{mcpPartnerId}/fx-table
.
Do celów testowych możesz użyć wartości 6283a549-8b1a-430d-8a62-eea64327440e jako mcpPartnerId
.
Możesz użyć dowolnego punktu płatności REST API, aby uzyskać token OAuth.
Przykład zamówienia
- Produkcja
- Sandbox
curl -X GET https://secure.payu.com/api/v2_1/mcp-partners/7124ecb8-a9a9-4dff-bdbc-520041eb05dd/fx-table \
-H "Authorization: Bearer 3e5cac39-7e38-4139-8fd6-30adc06a61bd"
curl -X GET https://secure.snd.payu.com/api/v2_1/mcp-partners/6283a549-8b1a-430d-8a62-eea64327440e/fx-table \
-H "Authorization: Bearer d9a4536e-62ba-4f60-8017-6053211d3f47"
Szczegóły parametrów znajdziesz w sekcji Retrieve Rate Table w naszej referencji API.
Przykład odpowiedzi
PayU udostępnia więcej par walutowych niż podano w przykładzie
{
"id": "3050",
"validTo": "2017-06-27T20:20:00Z",
"currencyPairs": [
{
"baseCurrency": "PLN",
"exchangeRate": 0.23753,
"termCurrency": "USD"
},
{
"baseCurrency": "USD",
"exchangeRate": 3.8125,
"termCurrency": "PLN"
},
{
"baseCurrency": "EUR",
"exchangeRate": 4.2556,
"termCurrency": "PLN"
}
]
}
Kursy referencyjne
Zgodnie z regulacjami obowiązującymi w krajach Unii Europejskiej, dostawcy usług płatniczych oraz strony oferujące w punkcie sprzedaży usługi przeliczenia waluty są zobowiązane podać kwotę łącznych opłat za przeliczenie waluty jako wartość procentową marży w stosunku do najbardziej aktualnego referencyjnego kursu wymiany euro ogłoszonego przez Europejski Bank Centralny (EBC).
Aby ułatwić spełnienie tego obowiązku, PayU oferuje możliwość pobrania odświeżanych codzienne kursów referencyjnych, gdzie dostępne są nie tylko kursy publikowane przez EBC względem EUR, ale także pary walutowe obliczane za pomocą tzw. triangulacji poprzez EUR (np. PLN/USD, PLN/GBP itp.).
Pobieranie kursów referencyjnych
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.
W celu pobrania tabeli kursowej od PayU, należy pobrać token OAuth, a następnie wykonać żądanie z metodą HTTP GET na endpoint /api/v2_1/fx-providers/ecb/fx-rates
.
Możnesz użyć dowolnego punktu płatności REST API, aby uzyskać token OAuth.
- Produkcja
- Sandbox
curl -X GET https://secure.payu.com/api/v2_1/fx-providers/ecb/fx-rates?termCurrency=PLN \
-H "Authorization: Bearer 3e5cac39-7e38-4139-8fd6-30adc06a61bd"
curl -X GET https://secure.snd.payu.com/api/v2_1/fx-providers/ecb/fx-rates?termCurrency=PLN \
-H "Authorization: Bearer d9a4536e-62ba-4f60-8017-6053211d3f47"
Parametr termCurrency
reprezentuje walutę do przeliczenia.
{
"effectiveDate": "2021-02-25",
"fxRates": [
{
"baseCurrency": "EUR",
"termCurrency": "PLN",
"midRate": 4.5122
},
{
"baseCurrency": "CZK",
"termCurrency": "PLN",
"midRate": 0.172815
}
]
}
Szczegóły parametrów znajdziesz w sekcji Retrieve Reference Rates w naszej referencji API.
Obliczanie marży
Marżę dla danej waluty wyliczysz według następującego wzoru
**(kurs referencyjny - kurs wymiany) / kurs referencyjny * 100%)
W przypadku:
- przewalutowanie z PLN do EUR (tj. chcemy otrzymać PLN, ale obciążyć płatnika w EUR),
- kurs wymiany to 4,2556 PLN
- kurs referencyjny to 4,5122 PLN
Wyliczona marża którą należy zaprezentować to 5,69%.
Roszerzenie zamówienia
Aby skorzystać z przewalutowania płatności, konieczna jest integracja white-label.
Obecnie opcja ta działa tylko dla płatności kartą, dlatego obiekt payMethods.payMethod
musi mieć parametr type
ustawiony jako CARD_TOKEN i zawierać token w polu value
.
Aby dowiedzieć się jak uzyskać token kartowy, przejdź do sekcji Odbieranie danych karty.
w polach currencyCode
i totalAmount
należy podać walutę sklepu w systemie PayU i oryginalną kwotę w tej walucie.
Ponadto, do żądania powinno się dodać obiekt mcpData
które zawiera m.in. kwotę po przewalutowaniu (tj. kwota w jakiej zostanie obciążony płatnik - mcpAmount
).
Szczegóły na temat obiektu mcpData
znajdziesz w sekcji Create an Order w naszej referencji API.
Oto jak obliczono mcpAmount
dla poniższego przykładu żądania
mcpAmount = totalAmount
/ mcpRate
mcpAmount = 1000 / 4.2556
mcpAmount = round(234,98) = 235
Przykład żądania
{
"continueUrl": "http://payer.will.be.redirected.here",
"notifyUrl": "https://notifications.will.be.sent.here",
"customerIp": "123.3.2.1",
"merchantPosId": "your POS ID",
"description": "multi-currency pricing",
"currencyCode": "PLN", // waluta sklepu
"totalAmount": 1000,
"products": [
{
"name": "a thing",
"unitPrice": 1000,
"quantity": 1
}
],
"buyer": {
"email": "some@email.com",
"firstName": "Some",
"lastName": "Person"
},
"payMethods": {
"payMethod": {
"type": "CARD_TOKEN",
"value": "TOK_1JJMRQ9EORTY62ixm0f8Ic9ySRZT"
}
},
"mcpData": {
"mcpFxTableId": "132331",
// baseCurrency z tabeli kursowej
"mcpCurrency": "EUR",
"mcpRate": "4.2556",
// totalAmount podzielona przez mcpRate (1000 / 4.2556)
// zaokrąglona do najbliższej liczby całkowitej
"mcpAmount": "235",
// tego ID można używać na Sandboksie
"mcpPartnerId": "6283a549-8b1a-430d-8a62-eea64327440e"
}
}