2010-05-06 4 views
7

Mam poważne problemy z akceptowaniem płatności.W jaki sposób mogę zapobiec przesłanianiu przez użytkowników całkowitego kosztu z koszyka na zakupy po przesłaniu go jako ukryte pole wejściowe?

olewam łączną kwotę w ukrytym polu

<input type="hidden" 
    name="checkout-flow-support.merchant-checkout-flow-support.shipping-methods.flat-rate-shipping-1.price" 
    value="129.00"/> 

Niektórzy z użytkowników zmienił tę wartość do 2 używając Firebug i przesłaniu formularza. Zamiast zebrać 129 USD, otrzymaliśmy tylko 2 USD.

Nie mam pojęcia, jak to zrobić, nikt mi szybko nie pomoże.

Odpowiedz

9

im przekazując całkowitą kwotę w ukrytym polu

Nie rób tego!

Ponieważ wiesz, jakie przedmioty użytkownik chce kupić, obliczyć koszt po stronie serwera.

+0

oraz thanxs hobodave za informacje. po prostu masz sytuację, jeśli złożyłeś 15 dolarów na swojej stronie i jej tylko formularz HTML z ukrytymi polami w tym czasie, jak to pomoże :( – Gobi

+0

Jeśli to darowizna, to oczywiście kwota jest zdefiniowana przez użytkownika. Twoje pytanie nie wskazać, że jest to scenariusz typu darowizny. Jeśli tak, to dlaczego użytkownik, który przekazałby 2 dolary zamiast 129 $, miałby znaczenie? – hobodave

+2

Pierwszą zasadą klubu Distributed Computing Club jest: NIE ufasz klientowi. Druga zasada Distributed Computing Club to: NIE ufasz klientowi.Trzecią zasadą klubu Distributed Computing jest: Jeśli to Twoja pierwsza wizyta, złamiesz zasady, a my pobijemy Cię za to. – Jason

3

To błąd podręcznika, analogicznie do zapytania klienta w sklepie stacjonarnym, o ile przedmiot kosztuje i wierzy w tę odpowiedź. Jest to szczególny przypadek ogólnej zasady bezpieczeństwa: nie ufaj klientowi. Odpowiedź Hobodave'a jest poprawna; obliczyć ceny, podatki itp. po stronie serwera.

3

z dostawcami usług płatniczych (PSP), ogólna konfiguracja komunikacji zazwyczaj wychodzi coś takiego:

kontakty

1) Serwer PSP i konfiguruje transakcji, określenie wymaganej kwoty oraz danych konta PSP.

2) PSP odpowiada za pomocą identyfikatora transakcji, który następnie dodaje się do formularza. Ten identyfikator transakcji nie zawiera żadnych informacji o stosowanych cenach - jest po prostu identyfikatorem transakcji, który rejestruje serwer skonfigurowany za pomocą PSP.

3) Gość wypełnia formularz, który jest wysyłany do PSP. Następnie przekierowują użytkownika z powrotem do Twojej witryny.

4) Twój serwer odpytuje serwer PSP i sprawdza, że ​​transakcja powiodła (tj. Metoda odwiedzający płatność OK'd transakcji z PSP, itp)

Komunikacja serwer-PSP jest zazwyczaj wykonywane używając biblioteki takiej jak curl.

Google przewidują szereg libraries/przykładów, w jaki sposób prawidłowo przetwarzać transakcje (i większość innych PSP zrobić to samo, z mojego doświadczenia): http://code.google.com/apis/checkout/samplecode.html

Dokładne dane komunikacyjne mogą się różnić w zależności od PSP, ale zasadniczo nie powinno być potrzeby, aby "całkowita kwota" kiedykolwiek przechodziła przez formularz wyświetlany odwiedzającym. Wszystko odbywa się z serwera na serwer, aby odwiedzający nie mógł zmienić szczegółów.

+0

-1: Wydaje się, że zupełnie pomijasz punkt. To pytanie nie ma nic wspólnego z komunikacją PSP na serwerze, ale jest to poważny błąd programisty polegający na akceptacji kosztów przez użytkownika. – hobodave

+1

Co zazwyczaj się zdarza, ponieważ osoba zadająca pytanie nie rozumie, jak powinien wyglądać proces komunikacji między aplikacją, PSP i przeglądarką. Po prostu mówienie im "nie" lub "źle" nie jest na ogół bardzo pomocne. Tutaj próbowałem wytłumaczyć, co powinni robić zamiast tego. – AllenJB

+0

Myślę, że odpowiedź Allena jest sprawiedliwa. Ostatnie zdanie w odpowiedzi wyjaśnia część "dlaczego" ... –