2011-11-22 38 views
9

Tôi sẽ cố gắng đi thẳng vào vấn đề. Tôi hiện đang làm việc với PayPal IPN và chưa từng gặp vấn đề này trước đây. Tôi đã sử dụng PayPal IPN và việc triển khai của tôi luôn giống nhau. Tuy nhiên, lần này nó đang tạo ra một số kết quả rất lạ.ASP.NET Paypal IPN trả về VERIFIED nhưng IPN không gửi

Tôi hiện đang lưu trữ với WinHost.com

Mã sử ​​dụng:

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 
     } 

    } 

Ý tưởng ở đây là tôi sẽ kiểm tra tình trạng của trật tự và sau đó chèn hoặc không chèn các bản ghi cơ sở dữ liệu nhưng mã này vẫn còn trong các bài kiểm tra nên không có gì là chính thức.

Sự cố tôi gặp phải là khi tôi chạy qua hộp cát và thực hiện thanh toán qua trang web của tôi, paypal sẽ gửi yêu cầu IPN. Các mục nhập được ném vào cơ sở dữ liệu và tất cả các dữ liệu được gửi lại một cách chính xác tuy nhiên PayPal cho thấy rằng IPN Post "Thất bại" và luôn luôn bị mắc kẹt trên "Thử lại". Tuy nhiên tôi nhận được "VERIFIED" trở lại trong strResponse. Điều này lần lượt gây ra lên đến 8 hồ sơ cho mỗi giao dịch. Lỗi mà paypal báo cáo là 500 - Lỗi Máy chủ Nội bộ. Bất kỳ sự giúp đỡ nào sẽ được đánh giá điên rồ vì đây là cuộc đua marathon kéo dài 2 ngày đến thời điểm này!

Cảm ơn bạn đã giúp đỡ hoặc giải quyết!

P.S Tôi đã đọc gần như tất cả các câu hỏi IPN trên stackoverflow và đã thấy không có gì như thế này.

Trả lời

6

Hành động điều khiển của bạn không thành công nếu PayPal báo cáo số 500. Bạn cần phải gỡ lỗi mã đó và xem những gì không thành công. Nếu bộ điều khiển của bạn không gửi lại 200, PayPal sẽ tiếp tục thử.

tôi luôn luôn làm điều này:

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

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

// bạn có thể biết điều này, nhưng đối với những người khác, đây là một quá trình ví dụ chảy

  1. thanh toán/giao dịch thực hiện để PayPal
  2. địa chỉ IPN được định cấu hình cho giao dịch PayPal, sau đó đăng lên địa chỉ IPN tức là: http://yourdomain.com/IPN.aspx
  3. IPN.aspx xử lý bài đăng IPN và ghi PaypalPaymentHistory thành db.
+0

Tôi có bộ điều khiển mà các cuộc gọi mà chức năng WWW.site.com/payment/processpayment đó là liên kết trong hộp paypal IPN – jhartzell

+0

Tôi nhận được vùng hẻo lánh từ paypal Hiển thị xác nhận tuy nhiên paypal được thể hiện thất bại và không ngừng nghỉ hưu bài viết để điều khiển hành động của tôi ProcessPayment mà gọi MakeHttpPost – jhartzell

+0

Bộ điều khiển là xương rất trần, chỉ có trong đó là đối tượng của tôi PPIPN PP = new PPIPN ("TEST") và sau đó PP.MakeHttpPost(). Tôi không thấy nó có thể thất bại như thế nào. http://www.mysite.com/payment/processpayment Đây có phải là địa chỉ IPN không chính xác để nhập vào paypal không? Thực sự đánh giá cao sự giúp đỡ của bạn Rick. – jhartzell

Các vấn đề liên quan