Слушатель PayPal IPN продолжает «повторять» HTTP-ответ 500 - PullRequest
1 голос
/ 20 февраля 2020

Мой прослушиватель 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

1 Ответ

0 голосов
/ 20 февраля 2020

Вероятно, у вашего прослушивателя IPN возникли проблемы с подключением к https://www.paypal.com/cgi-bin/webscr для проверки получаемых IPN, поэтому он отказывается обрабатывать IPN и возвращает HTTP 500, в результате чего PayPal повторяет попытку доставки. несколько раз.

Чтобы ваш слушатель мог подключаться к PayPal и проверять IPN, вам необходимо убедиться, что у вас есть обновленный пакет / список центра сертификации, который может проверять издателя текущего, криптографически действующего сервера PayPal. защищенные сертификаты SSL.

Пока вы работаете, обновите прослушиватель IPN, чтобы использовать ipnpb.paypal.com вместо www.paypal.com См. текущую документацию: https://developer.paypal.com/docs/ipn/integration-guide/IPNImplementation/

...