Member 13779417 Ответов: 0

Как исключить сделках на eBay из моих сайтов платежной системы PayPal для IPN слушателя


Ниже приведен мой IPN-слушатель, который всегда отлично работал на моем веб-сайте для платежей клиентов PayPal. Он устанавливает заказы для моего сайта в формате Guid (32 цифры с 4 тире). Однако я использую тот же счет PayPal для своих продаж на Ebay, и я только что продал товар, который при оплате вызвал следующую ошибку..

System.FormatException
Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).


В истории IPN статус оплаты завершен, но код ответа HTTP равен 500, а статус доставки - "повторная попытка". Я получаю предупреждения по электронной почте от PayPal об этом, которые беспокоят меня, так как мне нужен IPN для моего сайта.

Я проверил транзакцию Ebay, и "Custom" - это EBAY_ENSDX00001030330553110, так что я предполагаю, что моему IPN-коду это не нравится. Есть ли способ, которым я могу держать транзакции Ebay подальше от моего IPN-слушателя в PayPal? Или есть способ отредактировать свой IPN-код ниже, чтобы иметь дело с пользовательским идентификатором, который не находится в 32-значном формате?

Слушатель IPN..

Imports System.Net
Imports System.IO
Imports System.Net.Cache

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 strSandbox As String = "https://www.sandbox.paypal.com/cgi-bin/webscr"
        Dim strLive As String = "https://ipnpb.paypal.com/cgi-bin/webscr"

        'SSL Error Code
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

        Dim req As HttpWebRequest = CType(WebRequest.Create(strLive), HttpWebRequest)

        'Set values for the request back
        req.Method = "POST"
        req.ContentType = "application/x-www-form-urlencoded"
        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"), "ERROR")
        End If
    End Sub
End Class


Что я уже пробовал:

Я попытался найти какие-либо настройки на PayPal, но не уверен, можно ли исключить транзакции за пределами моего веб-сайта из прослушивателя IPN. Могу ли я проверить Guid в коде IPN ?

F-ES Sitecore

Какая строка создает исключение?

Member 13779417

В коде orders.vb, который он вызывает, а затем также в строке выше: order.UpdateOrderFromPaypal(qscoll("custom"), qscoll("txn_id"), qscoll("payment_status"))

F-ES Sitecore

Разве вы не можете просто проверить, начинается ли идентификатор транзакции "EBAY", и не запускать какой-либо из ваших кодов, если это произойдет?

Member 13779417

Спасибо за вашу помощь. Да, это хорошая идея. Я добавил IF LEN(qscoll("custom")) >= 32 затем в код, чтобы посмотреть, как это происходит.

0 Ответов