Przejdź do głównej zawartości

MB WAY (Portugalia)

MB WAY to popularna metoda płatności mobilnych w Portugalii. Klient autoryzuje płatność bezpośrednio w aplikacji MB WAY na swoim telefonie, podajac jedynie numer telefonu.

Schemat działania

Endpoint

POST https://api-payments.dpay.pl/api/v1_0/payments/register
Content-Type: application/json

Parametry zapytania

PoleTypWymaganeOpis
transactionTypestringTak"mb_way_direct"
servicestringTakNazwa serwisu z panelu
valuestringTakKwota w EUR
currency_codestringTak"EUR"
channelstringTak"373"
phone_numberstringTakNumer telefonu w formacie 351#XXXXXXXXX
url_successstringTakURL po udanej płatności
url_failstringTakURL po nieudanej płatności
url_ipnstringTakURL do powiadomień IPN
checksumstringTakSuma kontrolna SHA-256
device_infoobjectTakInformacje o urządzeniu klienta

Format numeru telefonu

Numer telefonu musi byc w formacie:

351#XXXXXXXXX

Gdzie:

  • 351 - kierunkowy Portugalii
  • # - separator
  • XXXXXXXXX - 9-cyfrowy numer telefonu

Przykład: 351#912345678

Obiekt device_info

{
"browserJavaEnabled": false,
"browserLanguage": "pt-PT",
"browserColorDepth": "24",
"browserScreenHeight": "1080",
"browserScreenWidth": "1920",
"browserTZ": "0",
"browserUserAgent": "Mozilla/5.0 ...",
"browserAcceptHeader": "text/html,application/xhtml+xml",
"browserJavascriptEnabled": true
}

Przykład zapytania

cURL

curl -X POST https://api-payments.dpay.pl/api/v1_0/payments/register \
-H "Content-Type: application/json" \
-d '{
"transactionType": "mb_way_direct",
"service": "abc123",
"value": "14.99",
"currency_code": "EUR",
"channel": "373",
"phone_number": "351#912345678",
"url_success": "https://mojsklep.pl/sukces",
"url_fail": "https://mojsklep.pl/błąd",
"url_ipn": "https://mojsklep.pl/api/ipn",
"checksum": "e3b0c44298fc1c149afb...",
"device_info": {
"browserJavaEnabled": false,
"browserLanguage": "pt-PT",
"browserColorDepth": "24",
"browserScreenHeight": "1080",
"browserScreenWidth": "1920",
"browserTZ": "0",
"browserUserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
"browserAcceptHeader": "text/html,application/xhtml+xml",
"browserJavascriptEnabled": true
}
}'

PHP

<?php
$service = getenv('DPAY_SERVICE');
$secretHash = getenv('DPAY_SECRET_HASH');

$value = '14.99';
$urlSuccess = 'https://mojsklep.pl/sukces';
$urlFail = 'https://mojsklep.pl/błąd';
$urlIpn = 'https://mojsklep.pl/api/ipn';

$checksum = hash('sha256',
$service . '|' . $secretHash . '|' . $value . '|' .
$urlSuccess . '|' . $urlFail . '|' . $urlIpn
);

$payload = json_encode([
'transactionType' => 'mb_way_direct',
'service' => $service,
'value' => $value,
'currency_code' => 'EUR',
'channel' => '373',
'phone_number' => '351#' . $_POST['phone_number'],
'url_success' => $urlSuccess,
'url_fail' => $urlFail,
'url_ipn' => $urlIpn,
'checksum' => $checksum,
'device_info' => [
'browserJavaEnabled' => false,
'browserLanguage' => 'pt-PT',
'browserColorDepth' => '24',
'browserScreenHeight' => '1080',
'browserScreenWidth' => '1920',
'browserTZ' => '0',
'browserUserAgent' => $_SERVER['HTTP_USER_AGENT'],
'browserAcceptHeader' => 'text/html,application/xhtml+xml',
'browserJavascriptEnabled' => true,
],
]);

$ch = curl_init('https://api-payments.dpay.pl/api/v1_0/payments/register');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true,
]);

$response = curl_exec($ch);
curl_close($ch);

$result = json_decode($response, true);

Odpowiedz API

Sukces - oczekiwanie na potwierdzenie

{
"error": false,
"msg": "Waiting for MB WAY confirmation",
"status": "PENDING",
"transactionId": "abc-def-123-456"
}

Po otrzymaniu statusu PENDING, klient musi potwierdzić płatność w aplikacji MB WAY. Wynik płatności otrzymasz przez IPN.

Błąd

{
"error": true,
"msg": "Invalid phone number format",
"status": false
}

Przykład formularza

<form id="mbway-form">
<label for="phone">Numer telefonu (Portugalia)</label>
<div style="display: flex; align-items: center;">
<span>+351</span>
<input
type="tel"
id="phone"
name="phone_number"
maxlength="9"
pattern="[0-9]{9}"
placeholder="912345678"
required
/>
</div>
<button type="submit">Zapłać przez MB WAY</button>
</form>

<script>
document.getElementById('mbway-form').addEventListener('submit', async (e) => {
e.preventDefault();
const phone = document.getElementById('phone').value;

const response = await fetch('/api/pay/mb-way', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ phone_number: phone }),
});

const result = await response.json();
if (!result.error) {
// Pokaz komunikat o oczekiwaniu na potwierdzenie
alert('Potwierdz płatność w aplikacji MB WAY');
}
});
</script>

Najczęstsze błędy

BłądPrzyczynaRozwiązanie
Invalid phone number formatNieprawidłowy format numeruUżyj formatu 351#XXXXXXXXX
MB WAY not availableKlient nie ma MB WAYZaproponuj inną metode płatności
Transaction timeoutKlient nie potwierdził w czasięPopros o ponowną próbę
informacja

MB WAY jest dostępny wyłącznie dla klientow z portugalskim numerem telefonu i zainstalowaną aplikacja MB WAY.