PayPal:IPN和PDT一起工作 - 单项付款系统 - 没有购物车

时间:2012-10-06 05:14:50

标签: php paypal paypal-ipn payment-processing eclipse-pdt

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

经过数月对不同辩论和安全问题的研究,我得出的结论是,一起使用IPN和PDT系统的最佳方式是在首先进行 - 先到先得,每个都有一个脚本。无论是PDT还是IPN脚本处理,无论哪个是首先发送确认电子邮件并将相关信息添加到数据库。如果PDT或IPN处理并发现另一个已经处理,则更新缺少的数据库信息,因为其他脚本已经发送了电子邮件。

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

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

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

1 个答案:

答案 0 :(得分:0)

我找到了一个网站。看看这个人的剧本:

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