簡體   English   中英

PayPal:IPN和PDT協同工作-單項付款系統-無需購物車

[英]PayPal: IPN and PDT working together - Single Item Payment System - NO SHOPPING CART

我使用在PHP中使用MySQL數據庫創建的自定義在線預訂系統。 目前,付款是在客戶面對面以現金面對面預訂時進行的,我現在正在將Paypal的IPN和PDT付款設置實施到系統中,以用作單項付款/“立即付款”選項系統(因此沒有購物車) ) 價格,日期和用戶信息僅有所不同。

經過數月的研究,人們對各種辯論和安全問題進行了研究,得出的結論是,將IPN和PDT系統一起使用的最佳方法是,在先到先得的基礎上 ,為每個腳本編寫腳本。 無論是PDT還是IPN腳本都在處理,無論哪個先發送確認電子郵件並將相關信息添加到數據庫。 如果PDT或IPN進行了處理,並且發現另一個已經處理過,則它更新缺少的數據庫信息,因為另一個腳本已經發送了電子郵件。

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

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

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

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

MySQL數據庫現已進行了修改,並具有一個新表,其中包含從Paypal的IPN或PDT回復成功或失敗返回的所有字段,以及有關預訂的基本信息。

我遇到的問題是:

  • 可以偽造PDT。 如何避免這種情況發生,就好像發送了來自PDT腳本的電子郵件一樣,他們已經收到確認,這會引起問題? 我可以通過只發送帶有IPN腳本的電子郵件並告訴PDT流程僅向客戶顯示預訂信息來避免這種情況,但聲明將發送確認電子郵件,但有時IPN可能需要一段時間,因此需要立即向客戶保證該預訂已被確認,因為該預訂可能是在接下來的30分鍾內進行的預訂。

  • 我已經嘗試使用Xcommerce Paypal開發人員網站,Paypal和許多其他網站,基於網絡上的示例創建了幾個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

我找到一個站點。 查看此人的腳本:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM