Przy ostatnim projekcie, klient poprosił mnie o zaimplementowanie płatności BlueMedia w naszej platformie opartej o PHP. Z uwagi na to, że powyższa firma oferuje tylko SDK na platformy mobilne stwierdziłem, że sam napiszę proste SDK, które będzie pokrywać dokumentację BlueMedia API.
Funkcjonalność | Dostępna |
---|---|
Odbiór notyfikacji ITN / IPN / ISTN | ✅ |
Potwierdzenie otrzymania ITN / IPN / ISTN | ✅ |
Utworzenie linku do sesji płatniczej bez koszyka | ✅ |
Utworzenie sesji płatniczej z koszykiem | ❌ |
Obsługa przekierowania z Blue Media | ✅ |
Odpytanie BM o listę kanałów płatności | ✅ |
composer require michalrokita/blue-media-sdk:dev-master
$serviceUrl = 'https://valid-url.com';
$serviceId = 'test';
$sharedKey = 'test';
$bmService = BMFactory::build($url, $serviceId, $sharedKey);
Notyfikacja ITN zawiera serviceID, parametry transakcji oraz hash. Metoda getNotification weryfikuje hash notyfikacji i jeżeli jest prawidłowy to zwraca tylko parametry transakcji, jako tablice. W celu prawidłowego przebiegu całej operacji, Blue Media oczekuje odpowiedzi z odpowiednim XMLem (patrz pkt 2.1).
$notification = $bmService->receiver()->getNotification();
Po tym jak już przeprowadzimy odpowiednie operacje w kodzie na podstawie danych z notyfikacji, musimy powiadomić Blue Media, że otrzymaliśmy wiadomość. W tym celu trzeba wywołać poniższy kod:
$bmService->receiver()->confirmReceivingNotification();
Metoda ta sporządzi odpowiednio spreparowany kod XML biorąc pod uwagę wcześniej odebraną notyfikację, a nastepnie zwróci go z odpowiednim nagłówkiem komendą echo
. Z tego też powodu nie należy ustalać nagłówka samemu.
Na początku należy zainicjalizować nową instancje klasy Transaction, która przetrzymuje dane na temat zawieranej transakcji. Przy tworzeniu instancji wymagane są tylko parametry niezbędne do utworzenia sesji wg specyfikacji Blue Media. Opcjonalne parametry można dodać do instancji wykorzystując wbudowane setter-y.
Jakoże Blue Media przyjmuję kwotę jako float skonwertowany na stringa, to do konstruktora Transaction należy podać float-a. Nie będziemy wykonywać żadnych operacji na tej liczbie ani też nie potrzebujemy dokładności, dlatego możemy sobie pozwolić na float.
$transaction = new Transaction('orderID', 100.00);
Pamiętaj o przestrzeni nazw: michalrokita\BlueMediaSDK\Transactions
--> use michalrokita\BlueMediaSDK\Transactions\Transaction;
Następnie, aby wygenerować link należy wywołać poniższy kod:
$paymentLink = $bmService->payment()->generatePaymentLink($transaction);
W celu pobrania danych o zamówieniu i automatycznej weryfikacji hasha w tle wywołaj poniższy kod. W przypadku błędu autoryzacji hasha metoda zwróci wyjątek.
$serviceId = $bmService->callback()->getServiceId();
$orderId = $bmService->callback()->getOrderId();
$amount = $bmService->callback()->getAmount();