繁体   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