多次接收Paypal IPN响应

时间:2013-06-05 14:22:43

标签: php paypal payment-gateway

我在我的应用程序中使用paypal支付网关IPN付款。

付款成功后,我正确收到IPN回复。

收到后我将其退回验证。

$ch = curl_init();

$paypalUrl = PAYPAL_URL;
curl_setopt($ch, CURLOPT_URL, $paypalUrl); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_field); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$res = curl_exec($ch);

现在我多次收到相同的IPN响应(大约9次)。我按以下格式发送变更的IPN响应:

    cmd=_notify-validate&orderUUID=eac962fe-3a0a-4b26-be89-e5ccf54ee2cb&
    mc_gross=15.00&settle_amount=11.58&
     protection_eligibility=Ineligible&payer_id=LR3LZ8R978ZK8&tax=0.00
    &payment_date=06%3A55%3A17+Jun+05%2C+2013+PDT&payment_status=Completed
  &charset=windows1252&first_name=abc&option_selection1=&option_selection2=&
 mc_fee=0.74&exchange_rate=0.812061&notify_version=3.7
  &settle_currency=USD&custom=&payer_status=verified&business=business%40mydomain.com
  &quantity=1&verify_sign=AFcWxV21C7fd0v3bYYYRCpSSRl31AlU7JAwS8--HoB6lJfimizlVxnVa&payer_email=personal%40mydomain.com&option_name1=tour&option_name2=abc+abc&txn_id=6RU07240YB682730C&payment_type=instant&last_name=abc&receiver_email=business%40mydomain.com&payment_fee=&receiver_id=LW9JSM57BYH5Q&txn_type=web_accept&item_name=ite  m+name&mc_currency=AUD&item_number=&residence_country=US&test_ipn=1&handling_amount=0.00 &transaction_subject=item+reserva!tion+for+1+spaces+on+Jun+06&payment_gross=&shipping=0.00&ipn_track_id=b85bc954da9e5

多次接收相同响应的原因是什么?

正如我所说的那样,我们需要向PayPal发送200 OK以获取IPN响应,如果Paypal没有获得200 OK,它会再次重试......它是否相同?

3 个答案:

答案 0 :(得分:3)

我在这里遇到过一件事。假设我的原始主机名是abc.com,我已经创建了一个测试实例。现在我的新主机名将是testing.abc.com。当我从上面的测试实例进行交易时,问题正在发生(多次接收IPN响应)。我正确地处理了响应(即检查了这个重复的响应或新的响应)。现在我的应用程序在生产环境中移动,我的主机名是abc.com,一切正常! (仅接收一次IPN响应)。我认为paypal无法从我的测试实例中获得成功状态,因为它试图多次发送相同的响应。

答案 1 :(得分:2)

如果您在PayPal帐户中查看了您的IPN历史记录,是否显示状态代码为200?通常,这是多次看IPN的常见原因。

答案 2 :(得分:0)

刚检查了我正在使用的IPN处理程序,我将“& cmd = _notify-validate”附加到请求的末尾,而不是将其放在开头