2011-11-22 33 views
9

Intentaré ir directo al grano. Actualmente estoy trabajando con PayPal IPN y nunca antes había visto este problema. He usado PayPal IPN y mis implementaciones siempre han sido las mismas. Esta vez, sin embargo, está produciendo resultados muy extraños.ASP.NET Paypal IPN vuelve VERIFICADO pero IPN no puede enviar

estoy actualmente alojado con WinHost.com

código utilizado:

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 
     } 

    } 

La idea aquí es que voy a comprobar el estado del pedido y luego insertar o no insertar el registro de la base de datos pero este código todavía está en pruebas, por lo que nada es oficial.

El problema que tengo es que cuando corro a través de sandbox y realizo un pago a través de mi sitio, PayPal envía la solicitud de IPN. La entrada se arroja a la base de datos y todos los datos se devuelven correctamente, sin embargo, PayPal muestra que la publicación IPN "Falló" y siempre está bloqueada en "Reintentar". Sin embargo, estoy recibiendo "VERIFICADO" en strResponse. Esto a su vez está causando hasta 8 registros por transacción. El error que está reportando PayPal es 500 - Error interno del servidor. ¡Cualquier ayuda sería increíblemente apreciada ya que ha sido un maratón de ataques de cabeza de 2 días hasta este momento!

¡Gracias por cualquier ayuda o resolución!

P.S He leído casi todas las preguntas de IPN en stackoverflow y no he visto nada como esto.

Respuesta

6

Su acción de controlador está fallando si PayPal informa un 500. Necesita depurar ese código y ver qué está fallando. Si su controlador no envía un 200, PayPal seguirá intentándolo.

siempre hago esto:

public ActionResult IPN() 
    {  
     //try catch log all my payment info 

     //always return blank page so paypal gets a HTTP 200 
     return View(); 
    } 

// se puede saber esto, pero para otros, aquí es un ejemplo de proceso fluya

  1. Pago/transacción realizada a PayPal
  2. dirección de IPN se configura para la transacción de PayPal y luego se publica en la dirección IPN, por ejemplo: http://yourdomain.com/IPN.aspx
  3. IPN.aspx maneja la publicación IPN y escribe PaypalPaymentHistory en db.
+0

tengo el controlador que llama que WWW.site.com/payment/processpayment función que es el enlace en la caja PayPal IPN – jhartzell

+0

estoy recibiendo el interior de paypal verificado que muestra sin embargo paypal es mostrar falló y se retira constantemente la publicación en mi acción de controladores ProcessPayment que llama a MakeHttpPost – jhartzell

+0

El controlador es muy básico, lo único que hay en él es mi objeto PPIPN PP = nuevo PPIPN ("TEST") y luego PP.MakeHttpPost(). No veo cómo podría estar fallando. http://www.mysite.com/payment/processpayment ¿No es esta una dirección IPN correcta para ingresar en paypal? Realmente aprecio su ayuda Rick. – jhartzell