2014-04-18 7 views
8

का उपयोग कर एक पट्टी टोकन से चार्ज राशि प्राप्त करना लक्ष्य: मेरे पास एक HTML पृष्ठ है जिसमें दो अलग-अलग आइटम हैं जिन्हें आप खरीद सकते हैं। एक $ 5 है और दूसरा $ 10 है। मैं भुगतान संसाधित करने के लिए पट्टी का उपयोग कर रहा हूँ। जब पट्टी भुगतान टोकन बनाता है और मेरे process_charge.php को सबमिट करता है तो मैं POST के माध्यम से सबमिट किए गए डेटा से चार्ज राशि खींचना चाहता हूं। तो मैं Stripe_Charge::create() पर कॉल करने के लिए उस राशि का उपयोग कर सकता हूं।पट्टी एपीआई

समस्या: राशि मेरे PHP फॉर्म में जमा नहीं की जा रही है और मुझे यकीन नहीं है कि इसे कैसे प्राप्त किया जाए।

मेरा अस्थायी समाधान: प्रत्येक आइटम के लिए एक अलग PHP फॉर्म मैं बेच रहा हूं। फिर हर नए आइटम के लिए एक नया PHP फार्म !!! नहीं आदर्श

मैं वर्तमान में यहां सूचीबद्ध एम्बेडेड प्रपत्र विधि का उपयोग कर रहा हूँ: https://stripe.com/docs/tutorials/checkout

मेरा आदेश पेज इस तरह दिखता है।

<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> 

तो यह बहुत अच्छा काम करता है। यह ग्राहक की जानकारी, उनके शिपिंग/बिलिंग पते और उनके क्रेडिट कार्ड के विवरण लेता है। फिर यह चार्ज टोकन उत्पन्न करता है और process_card.php पर सबमिट करता है। वहाँ मैं टोकन लेने के लिए और कुछ इस तरह कर सकते हैं:

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(); 
    } 
} 

यहाँ मैं टोकन कि POST के माध्यम से प्रस्तुत की गई थी और उस बंद भेजने उनके एपीआई का उपयोग कर पट्टी करने के लिए ले लो। राशि, मुद्रा, और कार्ड टोकन आवश्यक फ़ील्ड हैं। आप देख सकते हैं कि टोकन POST डेटा से खींचा जा रहा है लेकिन मुझे राशि के लिए एक शाब्दिक स्ट्रिंग भेजनी है। यह सब ठीक और बेवकूफ है जब तक कि मेरे पास एक से अधिक उत्पाद/सेवा नहीं है और मेरे पास अलग-अलग रूप हैं जो टोकन उत्पन्न करते हैं और उन्हें process_card.php पर भेजते हैं। तब वह शाब्दिक स्ट्रिंग अब खुश नहीं दिख रही है। उसका बेवकूफ मुस्कुराहट उसके बेवकूफ चेहरे से मिटा दिया गया है।

तो वैसे भी, मैंने यह देखने के लिए सभी POST डेटा की जांच की है कि सबमिट किए गए फ़ील्ड में से कोई राशि कितनी है, इसलिए मैं इसे पास कर सकता हूं। तो मैं सिर्फ देखने के लिए प्रस्तुत किया गया था एक छोटे से पाश किया:

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

और यह मुझे इस देता है:

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 

कोई राशि। ओह। इसलिए एपीआई दस्तावेज़ों को देखने के लिए कि क्या मुझे कोई समाधान मिल सकता है या नहीं। सबसे नज़दीकी चीज़ जो मुझे मिल सकती थी वह Stripe_Charge::retrieve({CHARGE_ID}); थी जो 0 मिलीथी। हालांकि यह केवल सफलतापूर्वक संसाधित शुल्कों पर लागू होता है।

तो मैं अटक गया हूं। इसे समझ नहीं सकता। सबसे अच्छा समाधान जो मैं आ सकता था, उसमें एम्बेडेड फॉर्म के अंदर <input type="hidden" name="amt" value="1000" /> लाइन जोड़ रहा था, इसलिए मैं $_POST['amt'] के माध्यम से राशि खींच सकता था। इसके साथ समस्या यह है कि मुझे कोई जानकारी नहीं है कि यह पीसीआई अनुपालन है या नहीं। पट्टी साइट/एपीआई/डॉक्स पर कई स्थानों पर वे आपको अपने फॉर्म में नाम फ़ील्ड्स शामिल न करने के लिए कहते हैं ताकि आप अपनी साइट पर पृष्ठ से पृष्ठ पर संवेदनशील जानकारी नहीं दे रहे हैं, इसलिए मुझे "क्षमा से बेहतर सुरक्षित" लगता है। क्या इस या कुछ बेहतरीन अभ्यासों को संभालने का कोई वैकल्पिक तरीका है, मुझे पता नहीं है?

** क्षमा करें यह इतना लंबा था। मैंने वास्तव में जितना प्रयास किया उतना प्रयास किया क्योंकि मैं इसे स्वयं हल करने की कोशिश कर सकता था और मैं जितना संभव हो उतना जानकारी प्रदान करना चाहता था।

+0

यह भी सोच रहा था, उनके चेकआउट उदाहरण में हार्डकोड की मात्रा है। राशि के साथ एक छिपे हुए क्षेत्र के साथ एक ही चीज़ करने के लिए देख रहे हैं लेकिन मदद नहीं कर सकते हैं लेकिन लगता है कि यह गलत और असुरक्षित है, लेकिन संभवतः मुझे – Carlton

उत्तर

5

मुझे पीसीआई अनुपालन के संबंध में अपनी कीमत को फॉर्म में डालकर (जब तक आप SSL का उपयोग कर रहे हैं) के संबंध में कोई समस्या नहीं देखते हैं। हालांकि इससे उन्हें सबमिट करने और आइटम को बहुत सस्ता होने से पहले HTML इनपुट को संपादित करने की अनुमति मिल जाएगी। आप किसी उत्पाद तालिका के साथ डेटाबेस का उपयोग करके और एक छिपे हुए इनपुट फ़ील्ड में उत्पाद आईडी का संदर्भ देकर इसे प्राप्त कर सकते हैं।

+0

धन्यवाद चाहिए। मैंने पीसीआई अनुपालन के लिए क्या संरक्षित किया जाना है, यह देखने के लिए और अधिक समय बिताया। [आधिकारिक दस्तावेज] (https://www.pcisecuritystandards.org/security_standards/documents.php) के माध्यम से और [सूचनात्मक ब्लॉग पोस्ट] के माध्यम से पढ़ने के बाद (http://kencochrane.net/blog/2012/01/ डेवलपर्स-गाइड-टू-पीसीआई-अनुपालन-वेब-एप्लिकेशन/# क्रेडिट-कार्ड-डेटा-जिसे-स्टोर किया जा सकता है) मैंने पाया कि यह लेनदेन की राशि को संरक्षित डेटा नहीं माना जाता है। –

+0

इसके अलावा, किसी को राशि बदलने में सक्षम होने के संबंध में हम इसके बारे में वास्तव में चिंतित नहीं हैं। हम अभी बहुत कम मात्रा वाली कंपनी हैं इसलिए इस तरह से कुछ चीज के लिए स्वचालित नहीं है। अगर कुछ अजीब चार्ज से गुजरता है तो मेरा मानना ​​है कि आप रिश्वत के लिए स्ट्रिप डैशबोर्ड का उपयोग कर सकते हैं, तो हम यह देखने के लिए ग्राहक से संपर्क कर सकते हैं कि यह एक अजीब त्रुटि है और उन्हें चार्ज फिर से करने के लिए कहें। मुझे लगता है कि मैं केवल एक ही राशि सत्यापन करने की योजना बना रहा हूं, यह सुनिश्चित कर रहा है कि यह एक संख्या है, और यह सुनिश्चित कर रहा है कि यह 0 है। 0 आपकी मदद के लिए बहुत बहुत धन्यवाद। इच्छा है कि मैं तुम्हें उखाड़ फेंक सकता हूं। –

संबंधित मुद्दे