Mam pytanie odnośnie integracji PayU. Chcę tworzyć zamówienie przez REST API, korzystam z dokumentacji https://github.com/PayU/openpayu_php . Mam pytanie odnośnie pola extOrderId , musi być ono unikalne. Czy mogę wykorzystać id zamównienia, które zostanie dodane do mojej bazy danych jako extOrderId, czy mam tam generować hash?
To jest identyfikator zamówienia po twojej stronie czyli np właśnie id płatności. Dlaczego płatności a nie zamówienia? Bo zamówienie może mieć kilka płatności. Te pole w obrębie twojego konkretnego sklepu na payu musi być unikalne. Jak wyślesz ponownie taką samą wartość to payu zwróci error.
a jeżeli chodzi o retrieveRequest, to powinienem je odbierać i dopiero wtedy wstawiać dane do bazy? Czy de facto wystarczy jak wyślę zamówienie i nie będę nic odbierał ? Bo nie bardzo rozumiem do czego służy odbieranie transakcji...
Tu masz przetwarzanie notyfikacji https://github.com/PayU/openpayu_php#handling-notifications-from-payu mając id i status z notyfikacji, robisz retrieve by potwierdzić że status który dostałeś jest prawdziwy. Nigdy nie wierz requestom od bramek płatności, zawsze to dodatkowo potwierdzaj.
Ok, rozumiem, i wtedy po sprawdzeniu, jeśli notyfikacja się zgadza, to powinienem wykonać dopiero wpis do bazy danych? (jako że transakcja przebiegła pomyślnie)
Nie. Cykl powinien wyglądać tak:
- tworzysz wpis w bazie w tabelce w payment, i ustawiasz tam sobie, że status płatności "before start" oraz orderId = null
- wysyłasz request do payu tworząc płatność po stronie payu, w odpowiedzi powinieneś dostac orderid oraz status "new" zapisujesz te wartości do utworzonego rekordu zgodnie z extOrderId
- payu przysyła do ciebie kolejne statusy poprzez notyfikacje i updatujesz rekord w bazie po sprawdzeniu poprzez retrieve czy status się zmienił rzeczywiście.
- wykonujesz odpowiednie akcje zgodne ze statusem np przy complete już wiesz, że opłacone więc możesz dać dostep do usługi/wysłać towar/etc,
Więcej informacji o restapi masz tutaj http://developers.payu.com/pl/restapi.html
Cykl statusów i co trzeba wykonać tutaj http://developers.payu.com/pl/restapi.html#notifications
Edit. To co opisałem jest dość uniwersalne i w zasadzie każda bramka płatności ma taki sam cykl.
Nie mogę sobie poradzić z jedną rzeczą - korzystam z konta sandboxowego. Jako parametr notifyUrl podałem ścieżkę do pliku, który ma odbierać powiadomienia od payu,
if ($result->getResponse()->order->orderId) {
/* Check if OrderId exists in Merchant Service, update Order data by OrderRetrieveRequest */
$order = OpenPayU_Order::retrieve($result->getResponse()->order->orderId);
if($order->getStatus() == 'SUCCESS'){
//the response should be status 200
//Tu chciałbym wykonać operacje na bazie
header("HTTP/1.1 200 OK");
}
}
Natomiast, te operacje na bazie, które chce wykonać, nie wykonują się
Musisz podać pełny url, jak testujesz lokalnie to musisz podać łącznie z ip oraz przekierować sobie porty na routerze by twój apache był dostepny z zewnątrz.