Ich werde versuchen, direkt auf den Punkt zu kommen. Ich arbeite derzeit mit PayPal IPN und habe dieses Problem noch nie gesehen. Ich habe PayPal IPN verwendet und meine Implementierungen waren immer die gleichen. Dieses Mal jedoch führt es zu sehr merkwürdigen Ergebnissen.
Ich bin derzeit bei WinHost.com untergebracht.
Verwendeter Code:
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
}
}
Die Idee hier ist, dass ich den Status der Bestellung überprüfen und dann einfügen oder nicht den Datensatz in die Datenbank einfügen, aber dieser Code ist noch in Tests, so dass nichts offiziell ist.
Das Problem, das ich habe, ist, dass, wenn ich durch Sandbox laufen und machen eine Zahlung über meine Website Paypal sendet die IPN-Anfrage. Der Eintrag wird in die Datenbank geworfen und alle Daten werden korrekt zurückgesendet, aber PayPal zeigt an, dass die IPN-Post "fehlgeschlagen" ist und immer auf "Wiederholung" steht. Ich erhalte jedoch "VERIFIED" in strResponse zurück. Dies wiederum führt zu bis zu 8 Datensätzen pro Transaktion. Der Fehler, den paypal meldet, ist 500 - Internal Server Error. Jede Hilfe wäre wahnsinnig geschätzt, da dies ein 2 Tage Kopf bashing Marathon bis zu diesem Punkt gewesen ist!
Danke für jede Hilfe oder Lösung!
P.S. Ich habe fast jede IPN-Frage auf Stackoverflow gelesen und habe nichts dergleichen gesehen.