经典 ASP Paypal IPN 退款

Posted

技术标签:

【中文标题】经典 ASP Paypal IPN 退款【英文标题】:Classic ASP Paypal IPN Refund 【发布时间】:2021-07-13 07:00:51 【问题描述】:

尝试对一些旧的 Classic ASP Paypal IPN 代码进行故障排除。遗留代码非常适合销售产品。但是,从 Paypal 帐户处理 REFUND 似乎会导致 Paypal IPN 出现一些问题。 IPN 监听器接收到 Refund IPN 消息并正确处理业务逻辑,将交易标记为 Refunded。但是,由于某种原因,Paypal 仍然将交易 IPN 历史记录为“重试”。下面是来自 GitHub 的示例代码,用于创建我们正在排除故障的 IPN 侦听器。

对于销售和退款,返回到 Paypal 的帖子是否需要不同?

非常感谢任何帮助。干杯

<%@LANGUAGE="VBScript"%>
<%
Dim Item_name, Item_number, Payment_status, Payment_amount
Dim Txn_id, Receiver_email, Payer_email
Dim objHttp, str
' read post from PayPal system and add 'cmd'
str = Request.Form & "&cmd=_notify-validate"
' post back to PayPal system to validate
set objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")
' set objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP.4.0")
' set objHttp = Server.CreateObject("Microsoft.XMLHTTP")
objHttp.open "POST", "https://www.paypal.com/cgi-bin/webscr", false
objHttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHttp.Send str
' assign posted variables to local variables
Item_name = Request.Form("item_name")
Item_number = Request.Form("item_number")
Payment_status = Request.Form("payment_status")
Payment_amount = Request.Form("mc_gross")
Payment_currency = Request.Form("mc_currency")
Txn_id = Request.Form("txn_id")
Receiver_email = Request.Form("receiver_email")
Payer_email = Request.Form("payer_email")
' Check notification validation
if (objHttp.status <> 200 ) then
' HTTP error handling
elseif (objHttp.responseText = "VERIFIED") then
' check that Payment_status=Completed and other variables
Execute business process code, mark transaction Completed or Refunded from payment_status works successfully
elseif (objHttp.responseText = "INVALID") then
' log for manual investigation
else
' error
end if
set objHttp = nothing%>

【问题讨论】:

【参考方案1】:

回发到 PayPal 不会影响 IPN 是否被标记为成功接收。回发步骤用于验证 IPN 来自 PayPal。

要成功接收 IPN,HTTP 响应状态必须为 200 OK。

【讨论】:

感谢您的快速回复和澄清。我的服务器端工作正常。这是 Paypal 识别我的服务器已收到我遇到问题的退款消息。在 IPN 历史记录中,退款消息始终显示为“正在重试”。受够了这些错误,IPN 就会自动关闭。销售 IPN 消息在 IPN 历史记录中标记为已发送。退款消息是否也应标记为已发送?​​ 要成功接收 IPN,HTTP 响应状态必须为 200 OK。 您是说我需要在我的 HTTP POST 中使 str 等于“OK”以进行退款吗?与带有通知验证的整个消息一起销售的 str 不同吗?非常感谢您的帮助,我只是不明白我的 IPN 侦听器代码需要更改什么。 否,收到 IPN 时的 HTTP 状态为 200。这与发布验证无关。 感谢您一直以来的帮助。我相信 Paypal 的 HTTP 状态是 200 OK,因为我的业务代码执行正确。脚本中的 IF 条件表示是否不是 200 报告和错误。如果是 200 执行业务逻辑,这就是正在发生的事情。我只是想知道为什么以及如何修复 Paypal,知道消息已被接受,并将 IPN 消息标记为已完成,而不是在 IPN 历史列表中“重试”。

以上是关于经典 ASP Paypal IPN 退款的主要内容,如果未能解决你的问题,请参考以下文章

PayPal 标准 IPN 退款结算消息缺少必填的“业务”字段

使用链接在经典 ASP 中提取 Paypal 交易详细信息

“PayPal Here”是不是发送 IPN 通知?

我的服务器突然不再接收来自 Paypal 的 IPN 请求,工作了多年

PayPal 即时付款通知 (IPN) 无法正常工作 ASP.NET C#

无法通过Paypal测试工具测试IPN(HTTP错误代码500)_Asp.net