public ActionResult IPN(string orderGuid) { Request.InputStream.Position = 0; var content = new StreamReader(Request.InputStream).ReadToEnd(); var state = repository.GetPurchaseState(orderGuid); if (state != null) { var api = new PaysonApi(state.UserId, state.UserKey, ApplicationId, true); var response = api.MakeValidateIpnContentRequest(content); if (response.Success) { var status = response.ProcessedIpnMessage.PaymentStatus.HasValue ? response.ProcessedIpnMessage.PaymentStatus.ToString() : "N/A"; state.Updates[DateTime.Now] = "IPN: " + status; state.LatestStatus = status; } else { state.Updates[DateTime.Now] = "IPN: IPN Failure"; state.LatestStatus = "Failure"; } } return(new EmptyResult()); }
public ActionResult IPN(int?id) { var host = Request.Url.Host; if (!id.HasValue) { LogError(log, "IPN, id har inget värde"); SendMail.SendErrorMessage("IPN, id har inget värde", host); return(new EmptyResult()); } LogDebug(log, string.Format("IPN id: {0}", id)); try { var registrering = smuService.GetRegistrering(id.Value, true); if (registrering != null) { Request.InputStream.Position = 0; var content = new StreamReader(Request.InputStream).ReadToEnd(); var org = smuService.HamtaOrganisation(registrering.Evenemang.OrganisationsId); var api = new PaysonApi(org.Betalningsmetoder.PaysonUserId, org.Betalningsmetoder.PaysonUserKey, ApplicationId, false); var response = api.MakeValidateIpnContentRequest(content); var statusText = response.ProcessedIpnMessage.PaymentStatus.HasValue ? response.ProcessedIpnMessage.PaymentStatus.ToString() : "N/A"; var status = response.ProcessedIpnMessage.PaymentStatus; LogDebug(log, string.Format("IPN message, status: {0}. regId: {1} success: {2}", statusText, id, response.Success)); if (status == PaymentStatus.Completed) { if (!registrering.HarBetalt) { smuService.HarBetalt(registrering); SkickaRegMail(registrering); Session["VM"] = null; } else { LogDebug(log, "Registreringen var redan markerad som betald. Skickar inget meddelande."); } } else { SendMail.SendErrorMessage("IPN message for non complete transaction. regId: " + id + ". Status: " + statusText, host); LogDebug(log, string.Format("IPN message for non complete transaction. regId: {0}. Status: {1}", id, statusText)); } } else { LogError(log, string.Format("Got IPN with wrong regId as query parameter: {0}", id)); SendMail.SendErrorMessage("Got IPN with wrong regId as query parameter: " + id, host); } } catch (Exception exc) { LogError(log, "Ett fel inträffade i IPN metoden.", exc); SendMail.SendErrorMessage(string.Format("Ett fel inträffade i IPN metoden. Exception: {0}", exc.ToString()), host); } return(new EmptyResult()); }