PayPal IPN 侦听器保持“重试”HTTP 响应 500

PayPal IPN Listener keeps 'Retrying' HTTP Response 500

提问人:mark davies 提问时间:2/20/2020 更新时间:2/20/2020 访问量:202

问:

我的 IPN 侦听器在过去 6 个月中一直运行良好。不过,在上周,所有事务都在“重试”并导致 HTTP 500 响应。我没有更改 IPN 侦听器中的任何代码,也没有更改 PayPal 中的任何设置。我已经打电话给PayPal,他们说这不是问题。我的托管公司 1&1 Ionos 几乎不知道我在说什么。我的 IPN 侦听器代码如下。我的网站使用 Asp.Net/VB.Net..

Imports System.Net
Imports System.IO
Imports System.Web.Util
Imports System.Data.Common

Partial Class IPNListener
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        'Post back to either sandbox or live
        'Dim strURL As String = "https://www.sandbox.paypal.com/cgi-bin/webscr"
        Dim strURL As String = "https://www.paypal.com/cgi-bin/webscr"
        Dim req As HttpWebRequest = CType(WebRequest.Create(strURL), HttpWebRequest)

        'Set values for the request back
        req.Method = "POST"
        req.ContentType = "application/x-www-form-urlencoded"
        req.Proxy = New WebProxy("ntproxyus.lxa.perfora.net", 3128)

        Dim Param() As Byte = Request.BinaryRead(HttpContext.Current.Request.ContentLength)
        Dim strRequest As String = Encoding.ASCII.GetString(Param)
        strRequest = strRequest + "&cmd=_notify-validate"
        req.ContentLength = strRequest.Length

        'Send the request to PayPal and get the response
        Dim streamOut As StreamWriter = New StreamWriter(req.GetRequestStream(), Encoding.ASCII)
        streamOut.Write(strRequest)
        streamOut.Close()
        Dim streamIn As StreamReader = New StreamReader(req.GetResponse().GetResponseStream())
        Dim strResponse As String = streamIn.ReadToEnd()
        streamIn.Close()

        Dim qscoll As NameValueCollection = HttpUtility.ParseQueryString(strRequest)

        'Insert the paypal response
        Dim order As New orders
        order.InsertPaypalResponse(qscoll("txn_id"), qscoll("custom"), strRequest)

        If strResponse = "VERIFIED" Then
              order.UpdateOrderFromPaypal(qscoll("custom"), qscoll("txn_id"), qscoll("payment_status"))
        ElseIf strResponse = "INVALID" Then
            'log for manual investigation
            order.UpdateOrderFromPaypal(qscoll("custom"), qscoll("txn_id"), qscoll("payment_status"))
        Else
            'Response wasn't VERIFIED or INVALID, log for manual investigation
            order.UpdateOrderFromPaypal(qscoll("custom"), qscoll("txn_id"), qscoll("payment_status"))
        End If
    End Sub
End Class
asp.net vb.net PayPal-IPN

评论


答:

0赞 Preston PHX 2/20/2020 #1

您的 IPN 侦听器可能在连接到 https://www.paypal.com/cgi-bin/webscr 以验证其收到的 IPN 时遇到问题,因此拒绝处理 IPN 并返回 HTTP 500,导致PayPal重复重试其传送。

为了使您的侦听器能够连接到PayPal并验证IPN,您需要确保拥有更新的证书颁发机构捆绑包/列表,该捆绑包/列表能够验证PayPal服务器当前加密安全的SSL证书的颁发者。

当您使用它时,请更新您的 IPN 侦听器以使用而不是 www.paypal.com 请参阅当前文档:https://developer.paypal.com/docs/ipn/integration-guide/IPNImplementation/ipnpb.paypal.com

评论

0赞 mark davies 2/20/2020
感谢您的回复。我对这些东西了解不多,但正如您建议的那样,我已将上述代码中的 strURL 更改为包含 ipnpb.paypal.com 而不是 www.paypal.com 但仍然没有运气。我的主机是 1&1 ionos,我通过他们购买了 SSL 证书。当您说我需要更新我的证书颁发机构捆绑包时,这是我可以做的事情还是由托管公司决定?我不知道从哪里开始。我真的很感谢你的帮助。
0赞 mark davies 2/20/2020
我刚刚重新颁发了我的1&1 SSL证书,但仍然没有运气。
0赞 Preston PHX 2/20/2020
它与站点的证书无关。有问题的证书是PayPal服务器使用的证书。如果您的 IPN 侦听器无法验证他们正在使用的证书的颁发者,它将无法连接到 PayPal 的服务器。为此,您用于通过HTTPS连接到PayPal的软件需要信任证书颁发机构,该证书颁发机构信任签署PayPal服务器正在使用的证书的颁发者。因此,您需要在 Asp.Net/VB.Net 或 Web 服务器上进行更改以信任相关的证书颁发机构。
0赞 mark davies 2/20/2020
啊,我现在明白了。但是,我能做的 1&1 非常有限。他们的客户服务也不明白我在说什么。您知道我需要在 VB.Net 中进行哪些更改才能信任此证书吗?对于我对这一切的缺乏了解,我深表歉意,再次感谢。