2015-04-04 33 views
1

我正在使用PayPal IPN,我有以下问题:是否有可能拥有两个具有相同txn_id和payment_status参数的IPN消息?txn_id和payment_status使PayPal IPN独一无二?

例如:

  1. IPN:txn_id = 4BB79227HY951745W & PAYMENT_STATUS =未决
  2. IPN:txn_id = 4BB79227HY951745W & PAYMENT_STATUS = idontknowwhat
  3. IPN:tnx_id = 4BB79227HY951745W & PAYMENT_STATUS =未决
  4. IPN :txn_id = 4BB79227HY951745W & payment_status =已完成

所以我的问题基本上是txn_id和payment_status一起使消息唯一或不是?

又如:

如果我有一个SQL查询,如:

SELECT * FROM交易WHERE txn_id = 4BB79227HY951745W AND PAYMENT_STATUS =东西

将其与一个以上的行返回? (如果我没有存储由PayPal重新发送的任何消息,因为缺少200 OK响应消息或响应时间较慢或类似此类情况。)

我之前阅读过此主题:PayPal IPN unique identifier。这听起来是这两个参数使消息独一无二,但我不确定。

+0

恕我直言,这不是关于“唯一性”本身,因为IPN是交易的消息服务(在**改变状态**)。它甚至具有“IPN协议”(https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNIntro/#protocol_and_arch)中所述的“重试”,这在答案中讨论过您引用/链接到的帖子。 – EdSF 2015-04-04 16:14:54

+0

谢谢你的回答。我理解这一点,但我想存储与交易相关的所有内容,但我不想多存储一次。因此,在将交易数据保存到我的数据库之后,我必须知道是否发送了新的IPN消息,因为该事务“更改了”,或者由于某种原因而被PayPal IPN服务重新发送。 – bazsibazsi 2015-04-04 16:26:10

回答

0

我认为txn_idpayment_status单独不足以使IPN独一无二。由于你的情况要保存相关的每个给定的交易IPN,您也应该检查pending_reason值:

比方说,你已经创建使用Authorization - Capture模型交易,您的交易经过Instant Payment Review (IPR)。你将有这样的事情作为IPN:

IPN 1:TXN进入,接受审议(IPR)

[payment_status] => Pending 
[txn_id] => 0CD48848U16230847 
[pending_reason] => paymentreview 
[txn_type] => express_checkout 
[auth_status] => Pending 
[ipn_track_id] => 8c7559d39005 

IPN 2:TXN已通过IPR(请注意,挂起原因已经改变!)

[payment_status] => Pending 
[txn_id] => 0CD48848U16230847 
[pending_reason] => authorization 
[txn_type] => express_checkout 
[auth_status] => Pending 
[ipn_track_id] => 8c7559d39005 
+0

我已经用db时间戳和其他'doublechecks'解决了这个问题,但是你说什么是有道理的,并且回答了我的问题。公认! – bazsibazsi 2015-10-04 15:05:08