我使用在PHP中使用MySQL数据库制作的自定义在线预订系统。目前,付款是在客户面对面以现金面对面预订时进行的,我现在正在将Paypal的IPN和PDT付款设置实施到系统中,以用作单项付款/“立即付款”选项系统(因此没有购物车) )。价格,日期和用户信息仅有所不同。

经过数月的研究,人们对各种辩论和安全问题进行了研究,得出的结论是,将IPN和PDT系统一起使用的最佳方法是,在先到先得的基础上,为每个脚本编写脚本。无论是PDT还是IPN脚本都在处理,无论哪个先发送确认电子邮件并将相关信息添加到数据库。如果PDT或IPN进行了处理,并且发现另一个已经处理过,则它仅更新丢失的数据库信息,因为另一个脚本已经发送了电子邮件。

从头开始制作的预订系统已经使用了两年,没有问题,但是现在需要在线付款。

在线预订时,客户输入他们的详细信息,选择预订的开始日期,结束日期,时间,然后将该信息发布到PHP脚本中(表单方法POST)。该脚本会验证,处理并输出到预订成功的确认页面,并通过电子邮件向客户和管理员电子邮件地址发送电子邮件。

MYSQL数据库当前未用于保存预订详细信息。

我现在想使用相同的结构在线进行付款。

MySQL数据库现已进行了修改,并具有一个新表,其中包含从Paypal的IPN或PDT答复(成功或失败)回叫可能返回的所有字段,以及有关预订的基本信息。

我遇到的问题是:


可以伪造PDT。如何避免这种情况,就像来自
发送了PDT脚本,他们将已经收到确认
会引起什么问题?我可以通过只发送来避免这种情况
带有IPN脚本的电子邮件,并告诉PDT流程仅显示
预订信息返回给客户,但要注明确认电子邮件
将被发送,但有时IPN可能需要一段时间,客户端
需要立即向预订的人保证
因为预订可能是在接下来的30分钟内进行的预订。
我已经尝试根据以下内容创建几个PDT和IPN脚本:
Xcommerce Paypal开发人员网站Paypal在网上的示例,
以及其他许多版本将近一个月,似乎都无法正常工作。
任何人都可以提供一个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/

10-07 16:04