php

2012-08-06 21 views
5

का उपयोग कर सफल पेपैल मनी लेनदेन के बाद फॉर्म जमा करना मैंने एक फॉर्म बनाया है। वर्तमान में इस फार्म निम्न कार्रवाई करता है:php

  1. ग्राहक प्रपत्र (एक आदेश बनाता है) पर
  2. क्लिक्स भरता "भेजें" बटन
  3. सभी प्रपत्र प्रविष्टियों एक डेटाबेस में प्रवेश कर रहे हैं।

मैं निम्न कार्रवाई करने के लिए इसे बदलने के लिए करना चाहते हैं:

  1. ग्राहक फार्म के अंत में प्रपत्र
  2. भरता वहाँ ज्यादा इस आदेश खर्च होंगे दिखा एक पाठ बॉक्स है उसे। पर बटन "भेजें" (अगर कीमत को स्वीकार करता है)
  3. PayPal पर भुगतान सफल होने पर पुनः निर्देशित
  4. क्लिक -> सभी प्रपत्र प्रविष्टियों एक डेटाबेस में प्रवेश कर रहे हैं। अन्य -> ​​गूंज "लेनदेन विफल"।

    "form.php" सामग्री

    <html><head><title>Title</title></head><body> 
    <form action="php-form-processor.php" method="post"> 
        <table border="0" cellspacing="5" width = "500"> 
         <tr> 
          <td align="right" width="160">Choose an Item:</td> 
          <td align="left"> 
          <select name="formItem" value="<?=$varItem;?>" class="input_full" > 
           <option value="1">Cheese</option> 
          </select> 
          </td> 
         </tr> 
         <tr bgcolor="#D0E8F5"> 
          <td align="right" >Item count:</td> 
          <td align="left"> 
           <input type="text" name="formItemCount" maxlength="50" value="<?=$varItemCount = 1;?>" class="input_full" /> 
          </td> 
         </tr> 
        </table> 
        <p align="center"> 
        <input type="submit" name="formSubmit" align = "center" value="Submit" /> 
        </p> 
    </form></body></html> 
    

    "php फार्म-processor.php" सामग्री

    :

यहाँ मैं अब तक क्या किया है है

<?php 
if($_POST['formSubmit'] == "Submit") 
{ 
    $varItem = $_POST['formItem']; 
    $varItemCount = $_POST['formItemCount']; 

    //database stuff 
    $username = "..."; 
    $password = "..."; 
    $hostname = "..."; 
// connect and add to the database varItem and varItemCount 
    mysql_query($sql); 
    mysql_close($dbhandle); 
} 
?> 

फॉर्म बहुत बड़ा है लेकिन मैंने स्टैक ओवरफ्लो के ve को सरल बना दिया है इसके बारे में rsion। ऑर्डर की कीमत "varItem" और "varItemCount" मान के अनुसार बदलनी चाहिए। असल में मैं डेटाबेस में ऑर्डर लिखने से पहले "पेपैल के साथ भुगतान करें" विकल्प जोड़ना चाहता हूं। पीएस मैंने पहले ही पेपैल सैंडबॉक्स खाता पंजीकृत कर लिया है और "क्रेता" और "विक्रेता" जोड़ा है।

मुझे आगे क्या करना चाहिए?

संपादित करें: ठीक है, तो समस्या को हल करने के लिए यहां एक छोटी सी गाइड है। यहाँ कुछ सलाह देता हैं:

  • पहले, डाउनलोड paypal IPN श्रोता आवरण: https://github.com/Quixotix/PHP-PayPal-IPN
  • तो सैंडबॉक्स खाते प्लस 1 खरीदार और विक्रेता 1 एसीसी एक विक्रेता के रूप में
  • लॉगिन रजिस्टर और एक फ़ॉर्म बनाते हैं (गैर के साथ होस्ट किया गया बटन!)
  • जगह अपने पेज में फार्म और आईडी या के माध्यम से "कस्टम" इनपुट अन्य आवश्यक जानकारियां (कुछ उपयोगी यहां पाया जा सकता सलाह पार्स: http://www.devshed.com/c/a/PHP/Creating-a-Paypal-IPN-System-in-PHP-Part-Two/)
  • अब फार्म के बाद इस पृष्ठ पर रीडायरेक्ट जगह प्रस्तुत
  • paypal विक्रेता खाते में IPN सक्षम है और एक आवश्यक पते के क्षेत्र
  • में IPNlistener लिंक दर्ज एक पेपैल पत्र भरना होगा और श्रोता

पूरे प्रक्रिया किया पर प्रतिक्रिया के लिए प्रतीक्षा करने के लिए मत भूलना इस तरह दिखता है:

  1. ग्राहक प्रपत्र
  2. भरता प्रपत्र जमा करने के बाद - सभी प्रविष्टियों डेटाबेस + आईडी + 1 अतिरिक्त क्षेत्र "Payed" कहा जाता है जो का प्रतिनिधित्व करता है में लिखा जाता है: - यदि ग्राहक के लिए भुगतान किया 1 आदेश और 0 - नहीं तो
  3. उपयोग हैडर ("स्थान: URL") Form_Processing से पुनर्निर्देशित करने के लिए Paypal_Form को
  4. "सत्र" का उपयोग एक सत्र या उपयोग पोस्ट संदेश में आदेश आईडी लिखने के
  5. PaypalForm सबमिट करें और हमारे ऑर्डर आईडी
  6. के लिए एक कैरियर के रूप में "कस्टम" फ़ील्ड का उपयोग करें
  7. डेटाबेस को निम्नानुसार अद्यतन करने के लिए श्रोता सेट अप करें: यदि लेनदेन सफल हुआ -> डेटाबेस कॉलम को "भुगतान" 1 (पूर्ण) में अपडेट करें। आदेश की जरूरत को चुनने के लिए यानी .:

$ sql = "कस्टम" क्षेत्र से आईडी का उपयोग करें "अद्यतन paypal_test सेट भुगतान = '1' कहां आईडी =" [कस्टम ']। "'" $ _ पोस्ट। ';

अब हमारे पास पूर्ण और गैर-पूर्ण रूपों वाला डेटाबेस है। Additionaly आप एक तर्क लिख सकते हैं जो "पुराना" अपूर्ण आदेश निकाल देगा। इस कारण से आप "दिनांक" नामक अतिरिक्त कॉलम बना सकते हैं और फिर तुलना करें: यदि (current_date.days - old_date.days> 7) -> डीबी से हटाएं। बस!

+0

अपने वास्तविक प्रश्न क्या है? ऐसा लगता है कि आपको अभी भी इस लेनदेन पर पेपैल से पुष्टि की आवश्यकता है (आपका चरण 5)। क्या आप इसके लिए आईपीएन तंत्र का उपयोग कर रहे हैं? –

+0

सुनिश्चित करें कि आप भुगतान किए गए व्यक्ति की राशि की जांच कर रहे हैं - आप कुछ क्लाइंट हैकिंग के साथ पेपैल में इनपुट POST चर को संशोधित कर सकते हैं ताकि कोई $ 100 आइटम के लिए $ 1 का भुगतान कर सके और जब तक कि आप इसे चेक न करें, वे इससे दूर हो सकते हैं। यदि मुझे सही याद है तो पेपैल राशि के साथ प्रतिक्रिया देगा। यह भी सुनिश्चित करें कि यह सही प्रकार का लेनदेन है (मुझे लगता है कि "वेब भुगतान स्वीकृति" है लेकिन "ईकेक" जैसे विभिन्न प्रकार के लोड हैं जो पूर्ण लेनदेन का प्रतिनिधित्व नहीं करते हैं - आईपीएन धनवापसी सहित सभी अधिसूचनाएं भेजता है) – williamvicary

+0

ओह पर्याप्त समय नहीं है टिप्पणी को संपादित करने के लिए, इसलिए मैं जल्द ही एक नया निर्माण करूंगा – Alex

उत्तर

0

मैं क्या पेपैल वापस आप दे रहा है पोस्ट स्वीकार नहीं करेगा, उसकी जांच करने की लापरवाही रास्ता है उपयोगकर्ता का प्रमाणीकरण और उपयोगकर्ता को "वेबसाइट पर वापस जाएं" बटन पर क्लिक करने की अपेक्षा करता है। इसके बजाय आईपीएन (https://www.paypal.com/ipn/) का उपयोग करें और सुनिश्चित करें कि आप सत्यापन के लिए पेपैल पर प्रतिक्रिया पोस्ट करें।

चेकआउट पेपैल से इस पीएचपी उदाहरण: https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_admin_IPNImplementation

+0

धन्यवाद! आपका आईपीएन सुझाव सहायक था। यह देखने के लिए "संपादन" देखें कि मैंने अंत में समस्या का समाधान कैसे किया। (यदि आप काटना चाहते हैं);) – Alex

1

ठीक है, आप काफी पहले से ही वर्णित आप क्या करने की जरूरत:

  • 1: एक onChange जावास्क्रिप्ट, उस जगह आप चाहते हैं पर मूल्य और यह पोस्ट का सार है;
  • 2: जमा करने के बाद मूल्यों का एक PHP जांच करें (इंजेक्शन मुद्दों की जांच भी सुनिश्चित करें);
  • तीसरा: पेपैल पर रीडायरेक्ट करें और उत्तर के लिए प्रतीक्षा करें;
  • चौथा: पेपल्स के अनुसार परिणाम परिणाम गूंजते हैं;

पुनश्च: मुझे आशा है कि आप किसी को वास्तव में आप के लिए पूरी स्क्रिप्ट के पुनर्लेखन के लिए प्रतीक्षा नहीं कर रहे हैं;)