2012-08-06 115 views
5

我已經做了一個表格。目前這種形式做如下操作:使用php提交成功paypal金錢交易後的表格

  1. 客戶填寫了表格(創建一個訂單)
  2. 點擊「提交」按鈕
  3. 所有表單條目被輸入數據庫。

我想改變它做如下操作:

  1. 客戶填寫了表格
  2. 形式的到底有多少顯示此訂單將花費一個文本框他。
  3. 點擊「提交」按鈕(如果接受的價格)
  4. 重定向到PayPal
  5. 如果支付成功 - >所有表單條目進入數據庫。否則 - >回顯「交易失敗」。

以下是我迄今所做的:

「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); 
} 
?> 

表格很大,但我簡化了stackoverflow的ve它的rsion。訂單的價格必須根據「varItem」和「varItemCount」值進行更改。基本上我想在向數據庫寫訂單之前添加「Pay with PayPal」選項。 P.S.我已經註冊了PayPal沙箱帳戶,並添加了「買方」和「賣方」。

接下來應該怎麼辦?

編輯:好的,所以這裏是一個小指南如何解決這個問題。下面是一些建議:

  • 第一,下載貝寶IPN監聽器的包裝:https://github.com/Quixotix/PHP-PayPal-IPN
  • 然後註冊的沙盒帳戶加1個買方和賣方1個ACC
  • 登錄作爲賣方,並創建一個形式(與非託管按鈕!)
  • 地方形式到您的網頁,並解析ID或通過「定製」輸入的任何其他必要信息(一些有用的建議可以在這裏找到:http://www.devshed.com/c/a/PHP/Creating-a-Paypal-IPN-System-in-PHP-Part-Two/
  • 現在將重定向到表格後,這個頁面提交
  • 不要忘了,在貝寶賣家賬戶,使IPN,進入IPNlistener鏈接到一個必要的地址字段
  • 提交貝寶的形式,等待監聽

全proccess響應看起來是這樣的:

  1. 客戶遞交表格後,填補了形式
  2. - 所有條目被寫入到數據庫+ ID + 1個附加字段名爲「祈禱,」它代表:1 - 如果客戶所許爲順序和0 - 如果不是
  3. 使用報頭(「位置:URL」)來從Form_Processing重定向到Paypal_Form
  4. 使用「會話」寫訂單ID到會話或使用POST消息
  5. 提交PaypalForm和使用「自定義」字段作爲我們的訂單ID號
  6. 設置偵聽器來更新數據庫,如下所示:如果事務成功 - >將數據庫列「更新」更新爲1(完成)。使用「自定義」字段中的ID來選擇所需順序,即:

$ sql =「UPDATE paypal_test SET payed ='1'WHERE id ='」。$ _ POST ['custom']。「'」;

現在我們有一個已完成和未完成表單的數據庫。此外,您可以編寫一個邏輯來刪除「舊」未完成的訂單。因此,您可以創建名爲「date」的附加列,然後比較:if(current_date.days - old_date.days> 7) - >從數據庫中刪除。而已!

+0

您的實際問題是什麼?在我看來,你仍然需要通過Paypal確認這筆交易(你的第5步)。你使用IPN機制嗎? – 2012-08-06 12:48:03

+0

確保您正在檢查付款人的金額 - 您可以將輸入的POST變量修改爲PayPal並進行一些客戶端黑客入侵,以便某人可以爲100美元的項目支付1美元,除非您檢查它,否則他們可能會逃脫。如果我沒有記錯的話,PayPal會回覆金額。此外,請確保這是正確的交易類型(我認爲「網上付款接受」,但有一些不同的代表,如「eCheque」,這不代表完成的交易--IPN發送所有通知,包括退款) – williamvicary 2012-08-07 14:06:48

+0

oops沒有足夠的時間編輯評論,所以我會盡快創建一個新的 – Alex 2012-08-07 19:15:35

回答

0

我不會接受什麼樣的貝寶回來後是給你,這是檢查的一個草率的方式認證用戶並期望用戶點擊「返回到網站」按鈕。請使用IPN(https://www.paypal.com/ipn/)並確保將回復郵寄給PayPal進行驗證。

從PayPal結賬該PHP示例:https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_admin_IPNImplementation

+0

謝謝!你的IPN建議很有幫助。看看「編輯」,看看我最終如何解決問題。 (如果你想要ofc);) – Alex 2012-08-06 20:28:16

1

那麼,你幾乎已經說明你需要做什麼:

  • 1:使一個onchange的JavaScript,凝聚了你想要的地方的價值並將其發佈;
  • 第二:提交後進行php值檢查(確保也檢查注射問題);
  • 第三:重定向到paypal並等待答案;
  • 4:按paypals回答回聲結果;

PS:我希望你是不是等着別人來實際重寫你的整個腳本;)