IPN ASP.NET Paypal возвращает ПОДТВЕРЖДЕННЫЙ, но IPN не может отправить

Я постараюсь перейти прямо к делу. В настоящее время я работаю с PayPal IPN и никогда раньше не сталкивался с этой проблемой. Я использовал PayPal IPN, и мои реализации всегда были одинаковыми. Однако на этот раз он дает очень странные результаты.

В настоящее время я работаю на WinHost.com

Используемый код:

public void MakeHttpPost()
    {

        ErrorLog log = new ErrorLog();
        //Post back to either sandbox or live
        string strSandbox = "https://www.sandbox.paypal.com/cgi-bin/webscr";
        string strLive = "https://www.paypal.com/cgi-bin/webscr";
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strSandbox);

        //Set values for the request back
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        byte[] param = HttpContext.Current.Request.BinaryRead(HttpContext.Current.Request.ContentLength);
        string strRequest = Encoding.ASCII.GetString(param);
        strRequest += "&cmd=_notify-validate";
        req.ContentLength = strRequest.Length;

        //for proxy
        //WebProxy proxy = new WebProxy(new Uri("http://url:port#"));
        //req.Proxy = proxy;

        //Send the request to PayPal and get the response
        StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
        streamOut.Write(strRequest);
        streamOut.Close();
        StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
        string strResponse = streamIn.ReadToEnd();
        streamIn.Close();
        log.error = strResponse;
        log.Insert();

        if (strResponse == "VERIFIED")
        {
            PaypalPaymentHistory PPH = new PaypalPaymentHistory();

            PPH.LastName = HttpContext.Current.Request["last_name"];
            PPH.FirstName = HttpContext.Current.Request["first_name"];
            PPH.State = HttpContext.Current.Request["address_state"];
            PPH.Zipcode = HttpContext.Current.Request["address_zip"];
            PPH.Address = HttpContext.Current.Request["address_street"];
            PPH.UserName = HttpContext.Current.Request["option_name2"];
            PPH.PaymentStatus = HttpContext.Current.Request["payment_status"];
            PPH.SelectedPackage = HttpContext.Current.Request["option_selection1"];
            PPH.PayerStatus = HttpContext.Current.Request["payer_status"];
            PPH.PaymentType = HttpContext.Current.Request["payment_type"];
            PPH.PayerEmail = HttpContext.Current.Request["payer_email"];
            PPH.ReceiverId = HttpContext.Current.Request["receiver_id"];
            PPH.TxnType = HttpContext.Current.Request["txn_type"];
            PPH.PaymentGross = HttpContext.Current.Request["payment_gross"];

            PPH.Insert();

        }
        else if (strResponse == "INVALID")
        {
            //log for manual investigation
        }
        else
        {
            //log response/ipn data for manual investigation
        }

    }

Идея заключается в том, что я проверю статус заказа, а затем вставляю или не вставляю запись в базу данных, но этот код все еще находится в тесты так что ничего официального.

Моя проблема заключается в том, что когда я прохожу через песочницу и совершаю платеж через свой сайт, PayPal отправляет запрос IPN.Запись добавляется в базу данных, и все данные отправляются обратно правильно, однако PayPal показывает, что сообщение IPN «Не выполнено» и всегда застревает на «Повторная попытка». Однако в strResponse я получаю «ПОДТВЕРЖДЕНО». Это, в свою очередь, вызывает до 8 записей на транзакцию. Ошибка, о которой сообщает PayPal, - это 500 - Внутренняя ошибка сервера. Любая помощь будет безумно признательна, так как до этого момента это был двухдневный марафон!

Спасибо за любую помощь или решения!

P.S Я прочитал почти все вопросы IPN о stackoverflow и не видел ничего подобного.

9
задан jhartzell 22 November 2011 в 19:04
поделиться