Как исключить сделках на 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 затем в код, чтобы посмотреть, как это происходит.