2012-10-06 15 views
1

我使用我在PHP中製作的定製在線預訂系統,使用MySQL數據庫。目前,當客戶以現金出席他們的預訂時,我們會付款,我現在正在實施Paypal的IPN和PDT將付款設置一起用於單個項目付款/「付款」選項系統(so沒有購物車)。價格,日期和用戶信息只有不同。PayPal:IPN和PDT一起工作 - 單個項目支付系統 - 沒有購物車

後研成不同的辯論和安全isses個月,我是來這使用IPN和PDT系統一起是做一個先來先服務的基礎上,最好的方式結束與每個腳本。無論PDT還是IPN腳本處理(無論哪個先發送確認電子郵件並將相關信息添加到數據庫)。如果PDT或IPN處理並且發現另一個已經處理,則其只有更新缺少的數據庫信息,因爲電子郵件已經由另一個腳本發送。

從頭開始的預訂系統已經使用了2年,沒有問題,但現在需要在線支付。

當在線預訂時,客戶輸入其詳細信息,選擇開始日期,結束日期,預訂時間,然後將信息POSTED(表單方法POST)到PHP腳本。該腳本將驗證,處理並輸出到預訂成功的確認頁面,並通過電子郵件發送客戶端和管理員電子郵件地址。

MYSQL數據庫目前不用於保存預訂詳細信息。

我現在想用相同的結構在線進行支付。

MySQL數據庫現在已被修改,並且有一個新表格,其中包含來自PayPal的IPN或PDT回覆,成功或失敗的回調以及有關預訂的基本信息的所有字段。

我的問題是這些:

  • 的PDT可以僞造。 如何避免這種情況,好像 PDT腳本發送的電子郵件,他們已經收到確認 這將導致問題?我可以只發送 電子郵件與IPN腳本,並告訴PDT進行,只顯示 預訂信息返回給客戶端,但狀態的確認電子郵件 避免這種情況將被髮送,但有時IPN可能需要一些時間和客戶端 需要立即保證預訂已被確認 ,因爲預訂可能會在接下來的30分鐘內預訂。

  • 我試圖創建基於與Xcommerce寶開發商網站,貝寶, 和其他許多人在網絡上 例子將近一個月,沒有幾個PDT和IPN腳本似乎正常工作。 任何人都可以提供一個PDT腳本和一個IPN腳本,它可以處理所有可能的變量,並驗證 命令的名稱,地址,郵政編碼和價格等關鍵基本信息?這個 對於任何人試圖用 IPN和PDT爲任何人創建支付過程將是有用的,因爲所有人需要做的是刪除每個腳本不需要的 。如果

正如一個音符,每個腳本檢查其他已經在MySQL表檢查的IPN或PDT領域的運行中有一個「1」。 「0」是默認值。

我期待着人們的回覆,因爲我相信無論使用哪種腳本,這都可以幫助任何人解決任何系統的問題。

謝謝大家提前。

請提供經過測試的MySQL表格,如果與以下不同,請提供幫助他人閱讀答案的答案。

我已經創建並正在使用下表:

CREATE TABLE `bookings` (
`id` int(11) NOT NULL AUTO_INCREMENT , 
`date1` char(2) NOT NULL default '', 
`month1` char(2) NOT NULL default '', 
`year1` char(2) NOT NULL default '', 
`date2` char(2) NOT NULL default '', 
`month2` char(2) NOT NULL default '', 
`year2` char(2) NOT NULL default '', 
`name` text NOT NULL , 
`address` text NOT NULL , 
`zippostcode` text NOT NULL , 
`email` text NOT NULL , 
`price` char(2) NOT NULL default '', 
`pdt` varchar(12) NOT NULL default '0', 
`ipn` varchar(12) NOT NULL default '0', 
`paypalstatus` varchar(12) NOT NULL default '', 
`datebooked` varchar(50) NOT NULL default '', 
`receiver_email` varchar(127) NOT NULL , 
`payment_status` varchar(25) NOT NULL , 
`pending_reason` varchar(25) NOT NULL , 
`payment_date` varchar(100) NOT NULL , 
`mc_gross` double NOT NULL , 
`mc_fee` double NOT NULL , 
`tax` double NOT NULL , 
`mc_currency` varchar(10) NOT NULL , 
`txn_id` varchar(25) NOT NULL , 
`txn_type` varchar(25) NOT NULL , 
`first_name` varchar(75) NOT NULL , 
`last_name` varchar(75) NOT NULL , 
`address_street` varchar(200) NOT NULL , 
`address_city` varchar(50) NOT NULL , 
`address_state` varchar(40) NOT NULL , 
`address_zip` varchar(20) NOT NULL , 
`address_country` varchar(64) NOT NULL , 
`address_status` varchar(25) NOT NULL , 
`payer_email` varchar(127) NOT NULL , 
`payer_status` varchar(25) NOT NULL , 
`payment_type` varchar(25) NOT NULL , 
`notify_version` varchar(50) NOT NULL , 
`verify_sign` varchar(255) NOT NULL , 
`address_name` varchar(130) NOT NULL , 
`protection_eligibility` varchar(50) NOT NULL , 
`ipn_status` varchar(25) NOT NULL , 
`subscr_id` varchar(25) NOT NULL , 
`reason_code` varchar(25) NOT NULL , 
`contact_phone` varchar(25) NOT NULL , 
`invoice` varchar(127) NOT NULL , 
`for_auction` tinyint(10) NOT NULL , 
`auction_buyer_id` varchar(75) NOT NULL , 
`auction_closing_date` varchar(100) NOT NULL , 
`auction_multi_item` double NOT NULL , 
`address_country_code` varchar(2) NOT NULL , 
`order_id` tinyint(10) NOT NULL , 
`item_name` varchar(130) NOT NULL , 
`item_number` varchar(130) NOT NULL , 
`os0` varchar(200) NOT NULL , 
`on0` varchar(75) NOT NULL , 
`os1` varchar(200) NOT NULL , 
`on1` varchar(75) NOT NULL , 
`quantity` double NOT NULL , 
`custom` varchar(255) NOT NULL , 
`mc_handling` double NOT NULL , 
`mc_shipping` double NOT NULL , 
`creation_timestamp` timestamp NOT NULL , 
PRIMARY KEY (`id`) 
) TYPE = MYISAM AUTO_INCREMENT =1 

回答

0

我發現了一個網站。看看這傢伙的腳本:

http://ksquared.de/blog/2011/10/paypal-generic-php-payment-pdtipn-script/

+0

歡迎來到堆棧溢出!雖然這可能在理論上回答這個問題,[這將是更可取的](http://meta.stackexchange.com/q/8259)在這裏包括答案的重要部分,並提供供參考的鏈接。 – Hasturkun

+0

謝謝你,但這是基於舊系統,只有部分工作。你知道其他任何地方,因爲目前沒有解決問題嗎?謝謝。 –