2013-02-11 30 views
6

Zajmuję się tworzeniem systemu biletów online na wydarzenia (np. Koncerty). Podstawową częścią jest tabela miejsc siedzących, na której goście będą mogli przedstawić dostępne miejsca/bilety do wyboru. Po dokonaniu selekcji system natychmiast próbuje zarezerwować bilety na 10 minut (wprowadzając identyfikatory biletów do tabeli, w której kluczem jest identyfikator biletu). Tylko w przypadku, gdy rezerwacja zakończyła się powodzeniem, zostanie przedstawiony przycisk paypal, aby dokonać płatności.Rezerwacja biletów online za pomocą systemu PayPal: Uniemożliwienie wielu odwiedzającym kupowanie tego samego biletu

Wszystko to działa dobrze. Rezerwacja biletów nie stanowi dla mnie problemu. Potrafię sobie z tym poradzić w moim systemie. Ale gdy pojawi się paypal, sprawy stają się trudne.

Problem: Jeśli użytkownik z jakiegoś powodu spędza dużo czasu w systemie Paypal (więcej niż 10 minut), rezerwacja biletu na mojej stronie wygaśnie, umożliwiając kupowanie biletów przez innego użytkownika, co może się zdarzyć przed odwiedzającym 1 dokonuje płatności. Gość 1 tego nie widzi, ponieważ wciąż jest w systemie PayPal ... W pewnym momencie uda mu się dokonać płatności (np. Po 15 minutach), co doskonale zadziała, ponieważ system PayPal nie wie nic o wygasłych rezerwacjach .

W końcu mogę mieć dwóch odwiedzających, którzy zapłacili za ten sam bilet/miejsce!

Jak mogę temu zapobiec? Jak radzisz sobie z warunkami wyścigu, jeśli zaangażowane są dwa systemy i jeden z nich jest poza twoją kontrolą?

Moje myślenie było następujące: W rzeczywistości czek należy dokonać tuż przed dokonaniem płatności, ale oczywiście nie mam kontroli nad tym, co dzieje się w systemie PayPal!

Wiem, że mogę korzystać z IPN Paypal i takie, ale to się dzieje tylko PO płatności, która jest za późno.

Byłoby świetnie, gdyby system PayPal poprosił mnie przez interfejs API o potwierdzenie płatności. Wtedy mógłbym powiedzieć "nie", gdyby bilety zostały sprzedane komuś innemu. Ale nie sądzę, że jest to możliwe w systemie PayPal.

Odpowiedz

2

Polecam używanie ekspresowej kasy. Ekspresowa realizacja transakcji pozwala kontrolować, kiedy nastąpi płatność, ponieważ wywołasz wywołanie API do systemu PayPal, aby faktycznie przetworzyć płatność.

Inną możliwością zaglądnięcia jest użycie autoryzacji zamiast transakcji sprzedaży. W ten sposób, jeśli inny nabywca zajmie miejsce, możesz unieważnić autoryzację, a kupujący nie zostanie obciążony. (Najprawdopodobniej PayPal prawdopodobnie obciąży Cię za unieważnienie autoryzacji.)

+0

dziękuję. Ekspresowa realizacja transakcji brzmi dobrze, a ja to zbadam. O drugiej części: czy jest to szczególna cecha systemu PayPal? Szukałem i nie znalazłem nic na temat "autoryzacji". – user1595494

+0

Nie, autoryzacje są standardem w branży kart kredytowych. Ta strona zawiera całkiem niezłe informacje o różnych typach płatności oferowanych przez usługę Express Checkout: https://www.x.com/developers/paypal/documentation-tools/express-checkout/integration-guide/ECRelatedAPIOps –

1

Jednym z rozwiązań zaproponowanych przez Matta Cole'a było użycie "autoryzacji" zamiast "sprzedaży".

Możesz to zrobić, ustawiając "zamiar" na "autoryzuj" zamiast "wyprzedaż" ({zamiar: "autoryzuj"}) w swoich rozmowach z API Paypal, gdy tworzysz płatność Paypal. Gdy klient zatwierdzi transakcję, autoryzacja tej transakcji należy zatwierdzić, przechwytując płatność.