2014-04-18 10 views
8

L'obiettivo: Ho una pagina html con due elementi diversi che è possibile acquistare. Uno è $ 5 e l'altro è $ 10. Sto usando la striscia per elaborare i pagamenti. Quando stripe crea un token di pagamento e lo invia al mio process_charge.php, desidero prelevare l'importo del costo dai dati inviati tramite POST. Quindi posso usare quell'importo per chiamare Stripe_Charge::create().Ottenere l'importo di addebito da un token stripe utilizzando l'API strip

Il problema: L'importo non viene inviato al mio modulo PHP e non sono sicuro di come ottenerlo.

La mia soluzione temporanea: Un modulo php diverso per ogni singolo articolo che sto vendendo. Quindi un NUOVO MODULO PHP PER OGNI NUOVO OGGETTO !!! non è l'ideale

Attualmente sto usando il metodo di modulo incorporato elencati qui: https://stripe.com/docs/tutorials/checkout

mio ordine pagina simile a questa.

<div class="payment-options"> 
    <form action="process_card.php" method="POST"> 
     <script 
      src="https://checkout.stripe.com/checkout.js" class="stripe-button" 
      data-key="pk_test_PUBLIC_KEY_FOR_TESTING" 
      data-amount="1000" 
      data-name="Nice Lint" 
      data-description="High quality belly button lint." 
      data-image="images/nice-lint.svg" 
      data-panel-label="Checkout {{amount}}" 
      data-label="Pay with Credit Card" 
      data-billing-address="true" 
      data-shipping-address="true"> 
     </script> 
    </form> 
</div> 

Quindi funziona perfettamente. Prende le informazioni del cliente, il loro indirizzo di spedizione/fatturazione e i dettagli della carta di credito. Quindi genera un token di addebito e lo invia a process_card.php. Ci posso prendere il gettone ed eseguire qualcosa di simile:

if ($_POST) { 
    Stripe::setApiKey("sk_test_SECRET_KEY_FOR_TESTING"); 
    try { 
    if (!isset($_POST['stripeToken'])) 
     throw new Exception("The Stripe Token was not generated correctly"); 
    Stripe_Charge::create(array("amount" => '1000'], 
           "currency" => "usd", 
           "card" => $_POST['stripeToken'])); 
    } 
    catch (Exception $e) { 
    $error = $e->getMessage(); 
    } 
} 

Qui prendo il token che è stato inviato tramite POST e inviare via che eseguire lo striping usando il loro API. L'importo, la valuta e il token della carta sono campi obbligatori. Puoi vedere che il token è stato estratto dai dati POST ma devo inviare una stringa letterale per l'importo. Tutto ciò è bello e dandy finché non ho più di un prodotto/servizio e ho forme diverse che generano token con quantità diverse e li inviano al mio process_card.php. Quindi quella stringa letterale non sembra più felice. Il suo stupido sorrisetto è cancellato dalla sua stupida faccia.

Quindi, in ogni caso, ho controllato tutti i dati POST per verificare se uno dei campi inviati contenesse l'importo in modo da poterlo passare. Così ho appena fatto un po 'di ciclo per vedere cosa è stato presentato:

foreach ($_POST as $key => $value) { 
    echo "key: " . $key . " - " . $value . "<br>"; 
} 

e mi dà questo:

key: stripeToken - tok_youShouldDefinitelyPostThisTokenOnAPublicWebsite 
key: stripeEmail - [email protected] 
key: stripeBillingName - asdf 
key: stripeBillingAddressLine1 - asdf 
key: stripeBillingAddressZip - 12345 
key: stripeBillingAddressCity - Schenectady 
key: stripeBillingAddressState - NY 
key: stripeBillingAddressCountry - United States 
key: stripeBillingAddressCountryCode - US 
key: stripeShippingName - asdf 
key: stripeShippingAddressLine1 - asdf 
key: stripeShippingAddressZip - 12345 
key: stripeShippingAddressCity - Schenectady 
key: stripeShippingAddressState - NY 
key: stripeShippingAddressCountry - United States 
key: stripeShippingAddressCountryCode - US 

Nessuna quantità. Shucks. Quindi via ai documenti API per vedere se riesco a trovare una soluzione. La cosa più vicina che ho trovato è stata Stripe_Charge::retrieve({CHARGE_ID}); che è stata trovata qui: https://stripe.com/docs/api/php#retrieve_charge. Questo tuttavia si applicava solo alle spese processate con successo.

Quindi sono bloccato. Non riesco a capirlo. La soluzione migliore che ho trovato è stata l'aggiunta di una riga <input type="hidden" name="amt" value="1000" /> all'interno del modulo incorporato che mi è stato fornito in modo da poter prelevare l'importo tramite $_POST['amt']. Il problema con questo è che non ho idea se è conforme PCI. In molti posti sul sito strip/api/doc ti dicono di non includere i campi dei nomi nei loro moduli in modo da non passare informazioni sensibili da una pagina all'altra sul tuo sito, quindi immagino "meglio prevenire che curare". C'è un modo alternativo di gestire questa o alcune buone pratiche di cui non sono a conoscenza?

** Mi dispiace che è stato così lungo. Ho fatto tutto il possibile per cercare di risolverlo da solo e volevo fornire quante più informazioni possibili.

+0

Stava anche chiedendo lo stesso, il loro esempio di checkout ha la quantità hardcoded. Guardando fare la stessa cosa con un campo nascosto con la quantità ma non posso fare a meno di pensare che questo sia sbagliato e insicuro, ma probabilmente farò quello che mi serve – Carlton

risposta

5

Non vedo alcun problema per quanto riguarda la conformità PCI inserendo il prezzo nel modulo (a condizione che si utilizzi SSL). Tuttavia questo permetterebbe loro di modificare semplicemente l'input HTML prima di inviare e ottenere l'oggetto molto più economico di quanto si vorrebbe. È possibile aggirare questo problema utilizzando un database con una tabella prodotti e fare riferimento all'ID prodotto in un campo di input nascosto.

+0

Grazie. Ho passato più tempo a guardare ciò che dovrebbe essere protetto per la conformità PCI. Dopo aver esaminato attentamente la [documentazione ufficiale] (https://www.pcisecuritystandards.org/security_standards/documents.php) e dopo aver letto un [post di blog informativo] (http://kencochrane.net/blog/2012/01/ sviluppatori-guida-to-pci-compliant-web-applications/# credit-card-data-che-può-essere-memorizzati) Ho scoperto che l'importo della transazione non è considerato dati protetti. –

+0

Inoltre, per quanto riguarda qualcuno che è in grado di modificare le quantità non siamo davvero preoccupati. Al momento siamo un'azienda con un volume molto basso, quindi non è abbastanza automatizzato perché qualcosa del genere possa passare. Se si è verificata qualche strana carica, credo che sia possibile utilizzare il dashboard Stripe per rimborsare, quindi possiamo contattare il cliente per vedere se si tratta di un errore strano e chiedere loro di ripetere l'addebito. Penso che l'unica ammontare di convalida che ho intenzione di fare sia assicurarsi che sia un numero, e assicurarmi che sia> 0. Grazie mille per il tuo aiuto. Vorrei poterti sopravanzare. –

Problemi correlati