protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { NVPAPICaller payPalCaller = new NVPAPICaller(); string retMsg = ""; string token = ""; string PayerID = ""; NVPCodec decoder = new NVPCodec(); token = Session["token"].ToString(); bool ret = payPalCaller.GetCheckoutDetails(token, ref PayerID, ref decoder, ref retMsg); if (ret) { Session["payerId"] = PayerID; var myOrder = new Order(); myOrder.OrderDate = Convert.ToDateTime(decoder["TIMESTAMP"].ToString()); myOrder.Username = User.Identity.Name; myOrder.FirstName = decoder["FIRSTNAME"].ToString(); myOrder.LastName = decoder["LASTNAME"].ToString(); myOrder.Address = decoder["SHIPTOSTREET"].ToString(); myOrder.City = decoder["SHIPTOCITY"].ToString(); myOrder.State = decoder.Get("SHIPTOSTATE") ?? ""; myOrder.PostalCode = decoder["SHIPTOZIP"].ToString() ?? ""; myOrder.Country = decoder["SHIPTOCOUNTRYCODE"].ToString() ?? ""; myOrder.Email = decoder["EMAIL"].ToString(); myOrder.Total = decimal.Parse(decoder.Get("AMT"), NumberStyles.Currency, PLNNumberFormat.GetPLNNumberFormat); // Verify total payment amount as set on CheckoutStart.aspx. try { decimal paymentAmountOnCheckout = decimal.Parse(Session["payment_amt"].ToString(), NumberStyles.Currency, PLNNumberFormat.GetPLNNumberFormat); decimal paymentAmoutFromPayPal = decimal.Parse(decoder.Get("AMT"), NumberStyles.Currency, PLNNumberFormat.GetPLNNumberFormat); if (paymentAmountOnCheckout != paymentAmoutFromPayPal) { Response.Redirect("CheckoutError.aspx?" + "Desc=Amount%20total%20mismatch."); } } catch (Exception) { Response.Redirect("CheckoutError.aspx?" + "Desc=Amount%20total%20mismatch."); } // Get DB context. ProductContext _db = new ProductContext(); // Add order to DB. _db.Orders.Add(myOrder); _db.SaveChanges(); // Get the shopping cart items and process them. using (WingtipToys.Logic.ShoppingCartActions usersShoppingCart = new WingtipToys.Logic.ShoppingCartActions()) { List <CartItem> myOrderList = usersShoppingCart.GetCartItems(); // Add OrderDetail information to the DB for each product purchased. for (int i = 0; i < myOrderList.Count; i++) { // Create a new OrderDetail object. var myOrderDetail = new OrderDetail(); myOrderDetail.OrderId = myOrder.OrderId; myOrderDetail.Username = User.Identity.Name; myOrderDetail.ProductId = myOrderList[i].ProductId; myOrderDetail.Quantity = myOrderList[i].Quantity; myOrderDetail.UnitPrice = myOrderList[i].Product.UnitPrice; // Add OrderDetail to DB. _db.OrderDetails.Add(myOrderDetail); _db.SaveChanges(); } // Set OrderId. Session["currentOrderId"] = myOrder.OrderId; // Display Order information. List <Order> orderList = new List <Order>(); orderList.Add(myOrder); ShipInfo.DataSource = orderList; ShipInfo.DataBind(); // Display OrderDetails. OrderItemList.DataSource = myOrderList; OrderItemList.DataBind(); } } else { Response.Redirect("CheckoutError.aspx?" + retMsg); } } }
protected void Page_Load(object sender, EventArgs e) { try { //Read The IPN POST string strFormValues = Encoding.ASCII.GetString(Request.BinaryRead(Request.ContentLength)); string strNewRequest; //Create IPN verification request HttpWebRequest req = WebRequest.Create("https://www.sandbox.paypal.com/cgi-bin/webscr") as HttpWebRequest; req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; strNewRequest = strFormValues + "&cmd=_notify-validate"; req.ContentLength = strNewRequest.Length; StreamWriter swOut = new StreamWriter(req.GetRequestStream(), Encoding.ASCII); swOut.Write(strNewRequest); swOut.Close(); HttpWebResponse httwebresponseResponse = req.GetResponse() as HttpWebResponse; Stream stIPNResponseStream = httwebresponseResponse.GetResponseStream(); Encoding encEncode = System.Text.Encoding.GetEncoding("utf-8"); StreamReader srStream = new StreamReader(stIPNResponseStream, encEncode); NVPCodec nvpResponse = new NVPCodec(); //Getting Name Value Pairs Collection nvpResponse.Decode(strFormValues); string strIPNResponse = srStream.ReadToEnd(); Label lblMessage = new Label(); lblMessage.Text = strIPNResponse; Page.Form.Controls.Add(lblMessage); //Creating new database object MyTestDBEntities MyTestDB = new MyTestDBEntities(); IPN_Main ipn_main = new IPN_Main() { IPN_Status = strIPNResponse, DateTimeStamp = DateTime.Now, RawString = strFormValues }; MyTestDB.IPN_Main.AddObject(ipn_main); MyTestDB.SaveChanges(); for (int intCounter = 0; intCounter < nvpResponse.Count; ++intCounter) { IPN_Variables ipn_variables = new IPN_Variables() { IPN_ID = ipn_main.IPN_ID, Name = nvpResponse.GetKey(intCounter), Variable = nvpResponse.Get(intCounter) }; MyTestDB.IPN_Variables.AddObject(ipn_variables); //Writing to debug stream for debugging pupose string strTemp = nvpResponse.GetKey(intCounter) + nvpResponse.Get(intCounter) + Environment.NewLine; Debug.Write(strTemp); } MyTestDB.SaveChanges(); srStream.Close(); } catch (Exception exErrors) { //generic exception handling: adding label on page with exception details Label lblErrorMessage = new Label(); lblErrorMessage.Text = "Exception: " + exErrors.Message + "<br/>" + exErrors.ToString(); form1.Controls.Add(lblErrorMessage); Debug.WriteLine("Exception: " + exErrors.Message + "\n\t" + exErrors.ToString()); } }