public async Task <IActionResult> Edit(int id, [Bind("Id,RequestBody,Verification")] IPNContext iPNContext) { if (id != iPNContext.Id) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(iPNContext); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!IPNContextExists(iPNContext.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } return(View(iPNContext)); }
private void VerifyTask(IPNContext ipnContext) { try { var verificationRequest = WebRequest.Create("https://www.sandbox.paypal.com/cgi-bin/webscr"); verificationRequest.Method = "POST"; verificationRequest.ContentType = "application/x-www-form-urlencoded"; string strRequest = "cmd=_notify-validate&" + ipnContext.RequestBody; verificationRequest.ContentLength = strRequest.Length; using (StreamWriter writer = new StreamWriter(verificationRequest.GetRequestStream(), Encoding.ASCII)) { writer.Write(strRequest); } using (StreamReader reader = new StreamReader(verificationRequest.GetResponse().GetResponseStream())) { ipnContext.Verification = reader.ReadToEnd(); } } catch (Exception exception) { Task.Factory.StartNew(async() => await _messager.LogVerifyTaskExceptionAsync(exception)); } Task.Factory.StartNew(async() => await ProcessVerificationResponse(ipnContext)); }
private string BuildEmailSubject(IPNContext ipn) { var subject = "IPN Notification: "; if (ipn != null && ipn.RequestBody != null) { var response = ipn.RequestBody; var keys = response.Split('&'); var data = new Dictionary <string, string>(); foreach (var key in keys) { //payment_type = instant var field = key.Split('='); data.Add(field[0], field[1]); } var firstName = data["first_name"]; var lastName = data["last_name"]; var email = data["payer_email"].Replace("%40", "@"); subject = $"{subject} : {firstName} {lastName} : {email}"; } return(subject); }
private void VerifyTask(IPNContext ipnContext) { try { var verificationRequest = WebRequest.Create("https://www.sandbox.paypal.com/cgi-bin/webscr"); //Set values for the verification request verificationRequest.Method = "POST"; verificationRequest.ContentType = "application/x-www-form-urlencoded"; //Add cmd=_notify-validate to the payload string strRequest = "cmd=_notify-validate&" + ipnContext.RequestBody; verificationRequest.ContentLength = strRequest.Length; //Attach payload to the verification request using (StreamWriter writer = new StreamWriter(verificationRequest.GetRequestStream(), Encoding.ASCII)) { writer.Write(strRequest); } //Send the request to PayPal and get the response using (StreamReader reader = new StreamReader(verificationRequest.GetResponse().GetResponseStream())) { ipnContext.Verification = reader.ReadToEnd(); } } catch (Exception exception) { //Capture exception for manual investigation } ProcessVerificationResponse(ipnContext); }
async Task VerifyTask(IPNContext ipnContext, bool useSandbox) { try { var url = useSandbox ? "https://ipnpb.sandbox.paypal.com/cgi-bin/webscr" : "https://ipnpb.paypal.com/cgi-bin/webscr"; var verificationRequest = WebRequest.Create(url); //Set values for the verification request verificationRequest.Method = "POST"; verificationRequest.ContentType = "application/x-www-form-urlencoded"; //Add cmd=_notify-validate to the payload string strRequest = "cmd=_notify-validate&" + ipnContext.RequestBody; verificationRequest.ContentLength = strRequest.Length; //Attach payload to the verification request using (StreamWriter writer = new StreamWriter(verificationRequest.GetRequestStream(), Encoding.ASCII)) { writer.Write(strRequest); } //Send the request to PayPal and get the response using (StreamReader reader = new StreamReader(verificationRequest.GetResponse().GetResponseStream())) { ipnContext.Verification = reader.ReadToEnd(); } } catch (Exception e) { Console.WriteLine(e); } await ProcessVerificationResponse(ipnContext); }
private void ProcessVerificationResponse(IPNContext ipnContext) { if (ipnContext.Verification.Equals("VERIFIED")) { var paymentInfo = ipnContext.RequestBody; var payment = new BL.Common.Models.UserPayment(); payment.Summ = decimal.Parse(GetFromSpam("mc_gross", paymentInfo).Replace(".", ",")); payment.PaymentID = GetFromSpam("payer_id", paymentInfo); payment.Result = GetFromSpam("payment_status", paymentInfo); payment.FirstName = GetFromSpam("first_name", paymentInfo); payment.CustomString = GetFromSpam("custom", paymentInfo); payment.Email = GetFromSpam("payer_email", paymentInfo); payment.LastName = GetFromSpam("last_name", paymentInfo); payment.Currentcy = GetFromSpam("mc_currency", paymentInfo); payment.UserId = GetFromSpam("custom", paymentInfo); _userPaymentService.AddUserPayment(payment); if ((payment.Result == "Completed") && (payment.Summ == 3)) { var accountLevel = new AccountLevel(); accountLevel.Id = 2; accountLevel.Name = "Премиум"; _userAccountLevelService.SetUserAccountLevel(int.Parse(payment.UserId), accountLevel); } } else if (ipnContext.Verification.Equals("INVALID")) { //Log for manual investigation } else { //Log error } }
private async Task ProcessVerificationResponse(IPNContext ipnContext) { Console.WriteLine(ipnContext.Verification); Console.WriteLine(ipnContext.RequestBody); try { if (ipnContext.Verification.Equals("VERIFIED")) { // check that Payment_status=Completed // check that Txn_id has not been previously processed // check that Receiver_email is your Primary PayPal email // check that Payment_amount/Payment_currency are correct // process payment if (ipnContext.Args["payment_status"] == "Completed") { Console.WriteLine(ipnContext.RequestBody); int userID = int.Parse(ipnContext.Args["item_number"]); decimal amount = decimal.Parse((string)ipnContext.Args["mc_gross"]) - decimal.Parse((string)ipnContext.Args["mc_fee"]); Console.WriteLine($"NEW PAYMENT COMPLETED USERID {userID} | AMOUNT : {amount}");// Newtonsoft.Json.JsonConvert.SerializeObject(ipnContext.RequestBody)); await balanceManager.addUserBalance(userID, amount); await csgo.core.logsManager.transactions.addTransactionLog(userID, await csgo.usersManager.getUsernameById(userID), csgo.core.logsManager.transactions.transactionType.deposit, csgo.core.logsManager.transactions.transactionStatus.complete, csgo.core.logsManager.transactions.methodType.paypal, (string)ipnContext.Args["payer_email"], amount); var usr = csgo.usersManager.users.Find(a => a.id == userID); if (usr != null) { await csgo.core.notifyManager.sendNotify(usr, core.notifyManager.notifyType.success, $"Your money have just arrived."); } } } else if (ipnContext.Verification.Equals("INVALID")) { Console.WriteLine(ipnContext.RequestBody); int userID = int.Parse(ipnContext.Args["item_number"]); decimal amount = decimal.Parse((string)ipnContext.Args["mc_gross"]); Console.WriteLine($"PAMENT FAILED");// Newtonsoft.Json.JsonConvert.SerializeObject(ipnContext.RequestBody)); await databaseManager.updateQuery($"INSERT INTO failedPayments (text) VALUES ('USERID {userID} FAILED PAYMENT EMAIL: {(string)ipnContext.Args["payer_email"]} AMOUNT: {amount}') ").Execute(); var usr = csgo.usersManager.users.Find(a => a.id == userID); if (usr != null) { await csgo.core.notifyManager.sendNotify(usr, core.notifyManager.notifyType.success, $"Your transaction failed."); } } else { //Log error } } catch { Console.WriteLine(ipnContext.RequestBody); decimal amount = decimal.Parse((string)ipnContext.Args["mc_gross"]); Console.WriteLine($"PAMENT FAILED");// Newtonsoft.Json.JsonConvert.SerializeObject(ipnContext.RequestBody)); await databaseManager.updateQuery($"INSERT INTO failedPayments (text) VALUES ('USERID 0 FAILED PAYMENT EMAIL: {(string)ipnContext.Args["payer_email"]} AMOUNT: {amount}') ").Execute(); } }
private async Task ProcessVerificationResponse(IPNContext ipnContext) { try { if (ipnContext.Verification.Equals("VERIFIED")) { var body = HttpUtility.ParseQueryString(ipnContext.RequestBody); int saleId; int.TryParse(body["custom"], out saleId); string transactionId = body["txn_id"]; string paymentStatus = body["payment_status"]; string receiverEmail = body["receiver_email"]; decimal paymentGross; decimal.TryParse(body["mc_gross"], out paymentGross); string currency = body["mc_currency"]; var sale = _database.GetSale(saleId); if (sale != null && paymentStatus == "Completed" && receiverEmail == _configuration["PayPalEmail"] && !_database.HasBeenProcessed(transactionId)) { if (sale.Price == paymentGross && sale.Currency == currency) { sale.PaymentType = body["payment_type"]; sale.PaymentStatus = paymentStatus; sale.PayerEmail = body["payer_email"]; sale.TransactionId = transactionId; sale.TransactionType = body["txn_type"]; _database.UpdateSale(sale); await Task.Factory.StartNew(async() => await GiveFeatures(saleId)); await _messager.SendPayPalMessage($"Successfull purchase for **{sale.Price} {currency}** from **{sale.PayerEmail}**"); } else { await _messager.SendPayPalMessage($"**[SALE {sale.SaleId}]** Price `{sale.Price}`!= `{paymentGross}` OR Currency `{sale.Currency}` != {currency}"); } } else { await _messager.SendPayPalMessage($"**[SALE {saleId}]** Status: `{paymentStatus}` Receiver: `{receiverEmail}` Already Processed: {_database.HasBeenProcessed(transactionId)}"); } } else if (ipnContext.Verification.Equals("INVALID")) { await _messager.SendPayPalMessage($"Verification Invalid: ```{ipnContext.RequestBody}```"); } else { await _messager.SendPayPalMessage($"Error: ```{ipnContext.RequestBody}```"); } } catch (Exception e) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(e); } }
public async Task <IActionResult> Create([Bind("Id,RequestBody,Verification")] IPNContext iPNContext) { if (ModelState.IsValid) { _context.Add(iPNContext); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } return(View(iPNContext)); }
private void LogRequest(IPNContext ipnContext) { try { CustomTaskFactory.Instance.Start(() => { var fileName = $"Transaction_{DateTime.Now.ToUnixTimestamp()}.txt"; var filePath = _appEnv.WebRootPath + $"\\contents\\socioboard\\Invoice\\{fileName}"; System.IO.File.WriteAllText(filePath, ipnContext.RequestBody); }); } catch (Exception ex) { _logger.LogError(ex.StackTrace); _logger.LogError(ex.Message); } }
public async Task <IActionResult> Receive() { IPNContext ipnContext = new IPNContext() { IPNRequest = Request }; using (StreamReader reader = new StreamReader(ipnContext.IPNRequest.Body, Encoding.ASCII)) { ipnContext.RequestBody = await reader.ReadToEndAsync(); } await LogRequest(ipnContext); await Task.Factory.StartNew(() => VerifyTask(ipnContext)); return(Ok()); }
async Task <IActionResult> ReceiveAsync() { IPNContext ipnContext = new IPNContext() { IPNRequest = Request }; using (StreamReader reader = new StreamReader(ipnContext.IPNRequest.Body, Encoding.ASCII)) { ipnContext.RequestBody = reader.ReadToEnd(); } //Fire and forget verification task await Task.Run(() => VerifyTask(ipnContext, false)); //Reply back a 200 code return(Ok()); }
private void ProcessVerificationResponse(IPNContext ipnContext) { if (ipnContext.Verification.Equals("VERIFIED")) { // check that Payment_status=Completed // check that Txn_id has not been previously processed // check that Receiver_email is your Primary PayPal email // check that Payment_amount/Payment_currency are correct // process payment } else if (ipnContext.Verification.Equals("INVALID")) { //Log for manual investigation } else { //Log error } }
public IHttpActionResult Receive() { IPNContext ipnContext = new IPNContext() { IPNRequest = Request }; string jsonContent = ipnContext.IPNRequest.Content.ReadAsStringAsync().Result; ipnContext.RequestBody = jsonContent; //Store the IPN received from PayPal LogRequest(ipnContext); //Fire and forget verification task Task.Run(() => VerifyTask(ipnContext)); //Reply back a 200 code return(StatusCode(HttpStatusCode.OK)); }
private async void ProcessVerificationResponse(IPNContext ipnContext) { IDataService _dataService = DeBank.Library.DAL.MockingData.GetMockDataService(); if (ipnContext.Verification.Equals("VERIFIED")) { var item = TempData.Peek("carryoverkey") as Transaction; BankLogic logic = new BankLogic(); await logic.SpendMoney(StaticResources.CurrentUser.CurrentBankAccount, item.Amount); } else if (ipnContext.Verification.Equals("INVALID")) { //Log for manual investigation } else { //Log error } }
public IActionResult Receive() { IPNContext ipnContext = new IPNContext() { IPNRequest = Request }; using (StreamReader reader = new StreamReader(ipnContext.IPNRequest.Body, Encoding.ASCII)) { ipnContext.RequestBody = reader.ReadToEnd(); } //Store the IPN received from PayPal LogRequest(ipnContext); //Fire and forget verification task Task.Run(() => VerifyTask(ipnContext)); //Reply back a 200 code return(Ok()); }
public IActionResult Notify() { var ipnContext = new IPNContext { IPNRequest = Request }; using (var reader = new StreamReader(ipnContext.IPNRequest.Body, Encoding.ASCII)) { ipnContext.RequestBody = reader.ReadToEnd(); } //Store the IPN received from PayPal //LogRequest(ipnContext); //Fire and forget verification task CustomTaskFactory.Instance.Start(() => { VerifyTask(ipnContext); }); //Reply back a 200 code return(Ok()); }
public async Task <IActionResult> Receive() { IPNContext ipnContext = new IPNContext() { IPNRequest = Request }; using (StreamReader reader = new StreamReader(ipnContext.IPNRequest.Body, Encoding.ASCII)) { ipnContext.RequestBody = await reader.ReadToEndAsync(); } ipnContext.Args = HttpUtility.ParseQueryString(ipnContext.RequestBody); //Store the IPN received from PayPal LogRequest(ipnContext); //Fire and forget verification task await Task.Run(async() => await VerifyTask(ipnContext)); //Reply back a 200 code return(Ok()); }
async Task ProcessVerificationResponse(IPNContext ipnContext) { if (ipnContext.Verification.Equals("VERIFIED")) { var ipnModel = new IPNModel(); var pairs = ParseIPN(ipnContext.RequestBody); ipnModel.Custom = pairs["custom"]; ipnModel.ItemName = pairs["item_name"]; ipnModel.PaymentStatus = pairs["payment_status"]; if (ipnModel.PaymentStatus.Equals("Completed")) { if (ipnModel.ItemName.Equals("1Unlimited") || ipnModel.ItemName.Equals("3Unlimited") || ipnModel.ItemName.Equals("6Unlimited") || ipnModel.ItemName.Equals("12Unlimited")) { if (ipnModel.ItemName.Equals("1Unlimited")) { await AddTimeToAccount(ipnModel.Custom, 1); } if (ipnModel.ItemName.Equals("3Unlimited")) { await AddTimeToAccount(ipnModel.Custom, 3); } if (ipnModel.ItemName.Equals("6Unlimited")) { await AddTimeToAccount(ipnModel.Custom, 6); } if (ipnModel.ItemName.Equals("12Unlimited")) { await AddTimeToAccount(ipnModel.Custom, 12); } await AddRewardTimeToAccount(ipnModel.Custom, 1); } } } }
private void LogRequest(IPNContext ipnContext) { // Persist the request values into a database or temporary data store }
private string BuildEmailMessage(IPNContext ipn) { var message = ""; if (ipn != null && ipn.RequestBody != null) { var response = ipn.RequestBody; var keys = response.Split('&'); var data = new Dictionary <string, string>(); foreach (var key in keys) { //payment_type = instant var field = key.Split('='); data.Add(field[0], field[1]); var param = field[0] + " : " + field[1] + Environment.NewLine; message += String.Concat(param); } var firstName = data["first_name"]; var lastName = data["last_name"]; var email = data["payer_email"].Replace("%40", "@"); var subject = $"{firstName} {lastName} : {email}"; ////check the transaction type //// recurring_payment_profile_created //// recurring_payment //// recurring_payment_failed //// recurring_payment_profile_cancel //// recurring_payment_suspended_due_to_max_failed_payment //var transactionType = data["txn_type"]; //var transactionAlert = ""; //var paymentStatus = ""; //var amountPaid = ""; //var currency = ""; //var payPalTransactionId = ""; //var product = ""; //var business = ""; //if (transactionType == "recurring_payment_profile_created") //{ // transactionAlert = "A new customer recurring payment profile has been created."; // paymentStatus = data["initial_payment_status"].ToUpper(); // amountPaid = data["initial_payment_amount"]; // currency = data["currency_code"]; // payPalTransactionId = data["initial_payment_txn_id"]; // product = data["product_name"].Replace("+", " "); //} //else if (transactionType == "recurring_payment") //{ // transactionAlert = "An existing customer has paid a recurring payment."; // paymentStatus = data["payment_status"].ToUpper(); // amountPaid = data["mc_gross"]; // currency = data["mc_currency"]; // payPalTransactionId = data["txn_id"]; // product = data["transaction_subject"].Replace("+", " "); // business = data["business"]; //} //else if (transactionType == "recurring_payment_failed") //{ // transactionAlert = "A recurring payment has failed"; //} //else if (transactionType == "recurring_payment_profile_cancel") //{ // transactionAlert = "A recurring payment profile has been cancelled."; //} //else if (transactionType == "recurring_payment_suspended_due_to_max_failed_payment") //{ // transactionAlert = "A recurring payment has been suspended due to max failed payments."; //} //else //{ // transactionAlert = "unknown event."; //} //var paymentDate = DateTime.Now; //var payerId = data["payer_id"]; //var payerFirstName = data["first_name"]; //var payerLastName = data["last_name"]; //var payerEmail = data["payer_email"].Replace("%40", "@"); //var buyerEmail = data["receiver_email"].Replace("%40", "@"); //var pendingReason = "Not pending"; //if (paymentStatus == "Pending") //{ // pendingReason = data["pending_reason"]; //} //message = $"{transactionAlert} A Payment of {amountPaid} recieved with status of {paymentStatus}. (TransactionId: {payPalTransactionId} ). " + // $"Payer {payerFirstName} {payerLastName} with PayPal Email {payerEmail} has PayPal Id {payerId}. " + // $"Payment of {amountPaid} is for product: {product} " + // $"Amount {amountPaid} will go to PayPal Email {buyerEmail}."; } return(message); }
private async Task LogAndEmailRequest(IPNLocalContext ipnContext) { var sendEmailsAndLog = true; // Persist the request values into a database or temporary data store IPNContext ipn = new IPNContext { RequestBody = ipnContext.RequestBody, Verification = ipnContext.Verification }; if (ipn != null && ipn.RequestBody != null) { var response = ipn.RequestBody; var keys = response.Split('&'); var data = new Dictionary <string, string>(); foreach (var key in keys) { //payment_type = instant var field = key.Split('='); data.Add(field[0], field[1]); } if (data["txn_type"] == "recurring_payment_profile_created") { if (data.ContainsKey("initial_payment_status")) { if (data["initial_payment_status"] == "Completed") { //do not send email sendEmailsAndLog = true; } } } if (data["txn_type"] == "recurring_payment") { if (data.ContainsKey("payment_status")) { if (data["payment_status"] == "Completed") { //do not send email sendEmailsAndLog = true; } } } //An existing customer has decided to cancel. Set Expiry date on the subscription. if (data["txn_type"] == "recurring_payment_profile_cancel") { //do not send email sendEmailsAndLog = true; } //An existing customer has SKIPPED their payment. NO ACTION REQUIRED AT THE MOMENT.. if (data["txn_type"] == "recurring_payment_skipped") { //do not send email sendEmailsAndLog = true; } //A new customer tried to subscribed but their payment is PENDING. Delete their subscription on the website and on PayPal side. if (data["txn_type"] == "recurring_payment_profile_created") { if (data.ContainsKey("initial_payment_status")) { if (data["initial_payment_status"] == "Pending") { //do not send email sendEmailsAndLog = true; } } } if (sendEmailsAndLog) { //send email var message = BuildEmailMessage(ipn); var subject = BuildEmailSubject(ipn); await EmailAdmin(message, subject); _dbcontext.IPNContexts.Add(ipn); _dbcontext.SaveChanges(); } } }
private async Task LogRequest(IPNContext ipnContext) { var parsed = HttpUtility.ParseQueryString(ipnContext.RequestBody); await Task.Factory.StartNew(async() => await _messager.SendPayPalMessage($"IPN Message received for transaction **{parsed["txn_id"]}** from **{parsed["payer_email"]}**! ```{ipnContext.RequestBody}```")); }
private async void ProcessVerificationResponse(IPNContext ipnContext) { #region Sample Response //mc_gross=19.99& //protection_eligibility=Eligible //&address_status=confirmed //&payer_id=J9VSKE27GQU6S //&address_street=1+Main+St //&payment_date=22%3A40%3A17+Dec+06%2C+2018+PST //&payment_status=Completed //&charset=windows-1252 //&address_zip=95131 //&first_name=Raushan //&mc_fee=0.88 //&address_country_code=US //&address_name=Raushan+Kumar //¬ify_version=3.9 //&subscr_id=I-KU5HKAR9DHJ9 //&custom=satishkumar%40globussoft.in_Socioboard //&payer_status=verified //&business=dina%40merchent.com //&address_country=United+States //&address_city=San+Jose //&verify_sign=AEG1gtsEQXalp1rIUipNGZfVSdbnApglfmb4V-KKjhy0JdI7U4uSbQYh //&payer_email=satishbuyer%40globussoft.in //&txn_id=31P59983HU0109310 //&payment_type=instant //&last_name=Kumar //&address_state=CA //&receiver_email=dina%40merchent.com //&payment_fee=0.88 //&receiver_id=WEZW9GMYEZM3L //&txn_type=subscr_payment //&item_name=Socioboard_Deluxe //&mc_currency=USD //&residence_country=US //&test_ipn=1 //&transaction_subject=Socioboard_Deluxe //&payment_gross=19.99 //&ipn_track_id=9d8b4603f06e2 #endregion if (ipnContext.Verification.Equals("VERIFIED")) { var transactionType = Utils.GetBetween(ipnContext.RequestBody, "txn_type=", "&"); if (!transactionType.Equals("subscr_payment")) { return; } var subscriptionId = Utils.GetBetween(ipnContext.RequestBody, "subscr_id=", "&"); var transactionId = Utils.GetBetween(ipnContext.RequestBody, "txn_id=", "&"); var customValue = Utils.GetBetween(ipnContext.RequestBody, "custom=", "&"); var emailInformation = Uri.UnescapeDataString(Utils.GetBetween(ipnContext.RequestBody, "custom=", "_Socioboard")); var userId = Utils.GetBetween(customValue + "<:>", "Id_", "<:>"); var amount = Utils.GetBetween(ipnContext.RequestBody, "payment_gross=", "&"); var payerEmail = Uri.UnescapeDataString(Utils.GetBetween(ipnContext.RequestBody, "payer_email=", "&")); var payerName = $"{Utils.GetBetween(ipnContext.RequestBody, "first_name=", "&")} {Utils.GetBetween(ipnContext.RequestBody, "last_name=", "&")}";; var paymentStatus = Utils.GetBetween(ipnContext.RequestBody, "payment_status=", "&"); var itemName = Utils.GetBetween(ipnContext.RequestBody, "item_name=", "&"); var charset = Utils.GetBetween(ipnContext.RequestBody, "charset=", "&"); var subscriptionDate = Uri.UnescapeDataString(Utils.GetBetween(ipnContext.RequestBody, "payment_date=", "&").Replace("+", " ")); var paymentTransaction = new PaymentTransaction { amount = amount, email = emailInformation, paymentdate = DateTime.UtcNow, userid = long.Parse(userId), PaymentType = PaymentType.paypal, trasactionId = transactionId, paymentId = subscriptionId, payeremail = payerEmail, Payername = payerName, paymentstatus = paymentStatus, itemname = itemName, media = charset, subscrdate = DateTime.Parse(subscriptionDate.Replace(" PDT", "").Replace(" PST", "")) }; var passingData = Newtonsoft.Json.JsonConvert.SerializeObject(paymentTransaction); var param = new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("information", passingData) }; await WebApiReq.PostReq("/api/PaymentTransaction/UpdatePaypalTransactions", param, "", "", _appSettings.ApiDomain); // check that Payment_status=Completed // check that Txn_id has not been previously processed // check that Receiver_email is your Primary PayPal email // check that Payment_amount/Payment_currency are correct // process payment } else if (ipnContext.Verification.Equals("INVALID")) { _logger.LogError(ipnContext.Verification + "_SocioboardPayment_Failed"); _logger.LogError(ipnContext.RequestBody); LogRequest(ipnContext); //Log for manual investigation } else { //Log error _logger.LogError(ipnContext.Verification + "_SocioboardPayment_Failed"); _logger.LogError(ipnContext.RequestBody); LogRequest(ipnContext); } }