我已經做了一個表格。目前這種形式做如下操作:使用php提交成功paypal金錢交易後的表格
- 客戶填寫了表格(創建一個訂單)
- 點擊「提交」按鈕
- 所有表單條目被輸入數據庫。
我想改變它做如下操作:
- 客戶填寫了表格
- 形式的到底有多少顯示此訂單將花費一個文本框他。
- 點擊「提交」按鈕(如果接受的價格)
- 重定向到PayPal
- 如果支付成功 - >所有表單條目進入數據庫。否則 - >回顯「交易失敗」。
以下是我迄今所做的:
「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響應看起來是這樣的:
- 客戶遞交表格後,填補了形式
- - 所有條目被寫入到數據庫+ ID + 1個附加字段名爲「祈禱,」它代表:1 - 如果客戶所許爲順序和0 - 如果不是
- 使用報頭(「位置:URL」)來從Form_Processing重定向到Paypal_Form
- 使用「會話」寫訂單ID到會話或使用POST消息
- 提交PaypalForm和使用「自定義」字段作爲我們的訂單ID號
- 設置偵聽器來更新數據庫,如下所示:如果事務成功 - >將數據庫列「更新」更新爲1(完成)。使用「自定義」字段中的ID來選擇所需順序,即:
$ sql =「UPDATE paypal_test SET payed ='1'WHERE id ='」。$ _ POST ['custom']。「'」;
現在我們有一個已完成和未完成表單的數據庫。此外,您可以編寫一個邏輯來刪除「舊」未完成的訂單。因此,您可以創建名爲「date」的附加列,然後比較:if(current_date.days - old_date.days> 7) - >從數據庫中刪除。而已!
您的實際問題是什麼?在我看來,你仍然需要通過Paypal確認這筆交易(你的第5步)。你使用IPN機制嗎? – 2012-08-06 12:48:03
確保您正在檢查付款人的金額 - 您可以將輸入的POST變量修改爲PayPal並進行一些客戶端黑客入侵,以便某人可以爲100美元的項目支付1美元,除非您檢查它,否則他們可能會逃脫。如果我沒有記錯的話,PayPal會回覆金額。此外,請確保這是正確的交易類型(我認爲「網上付款接受」,但有一些不同的代表,如「eCheque」,這不代表完成的交易--IPN發送所有通知,包括退款) – williamvicary 2012-08-07 14:06:48
oops沒有足夠的時間編輯評論,所以我會盡快創建一個新的 – Alex 2012-08-07 19:15:35