private static HttpResponseMessage ComposeResponseMessage(VisaEpmResponse response, CommerceContext context = null, string requestMessageId = null) { if (context != null) { context.Log.Verbose("Outgoing response for Message {0} : {1}", requestMessageId, General.SerializeJson(response)); } HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.OK); message.Content = new ObjectContent <VisaEpmResponse>(response, new JsonMediaTypeFormatter()); return(message); }
private HttpResponseMessage ProcessVisaEndpointMessage(VisaEPMRequestType type) { VisaEpmResponse response = new VisaEpmResponse { StatusCode = "0", ErrorMessage = "" }; CommerceContext context = null; string message = null; try { EndPointMessageRequest request = ParseRequest(); context = CommerceContext.BuildSynchronousContext("Incoming Visa Request", request, response); message = Request.Content.ReadAsStringAsync().Result; context.Log.Verbose("Incoming POST payload from Visa : \r\n\"{0}\".", message); //If Visa do not send StatementCredit message on a new endpoint then we have to detect from the message if it is StatementCredit message if (request.MessageName != null && request.MessageName.IndexOf("StatementCreditEndPoint", StringComparison.OrdinalIgnoreCase) >= 0) { type = VisaEPMRequestType.OnStatementCredit; } //if (IsAuthorized(context)) { Stopwatch callTimer = Stopwatch.StartNew(); var httpStatusCode = HttpStatusCode.OK; if (type == VisaEPMRequestType.OnClear) { httpStatusCode = ProcessVisaEndpointMessage(context, callTimer, () => { VisaRedeemDealExecutor visaEndpointMessageProcessor = new VisaRedeemDealExecutor(context); return(visaEndpointMessageProcessor.Execute()); }); } else if (type == VisaEPMRequestType.OnAuth) { httpStatusCode = ProcessVisaEndpointMessage(context, callTimer, () => { VisaAuthorizationExecutor visaEndpointMessageProcessor = new VisaAuthorizationExecutor(context); return(visaEndpointMessageProcessor.Execute()); }); } else if (type == VisaEPMRequestType.OnStatementCredit) { httpStatusCode = ProcessVisaEndpointMessage(context, callTimer, () => { VisaStatementCreditExecutor visaEndpointMessageProcessor = new VisaStatementCreditExecutor(context); return(visaEndpointMessageProcessor.Execute()); }); } else { httpStatusCode = HttpStatusCode.BadRequest; context.Log.Warning("Incoming request message is not of type auth, clearing or statementCredit. Request : {0} ", request.ToString()); } if (httpStatusCode != HttpStatusCode.OK) { response.StatusCode = "100"; response.ErrorMessage = "General Input Error"; context.Log.Warning("Incoming {0} request processing error. Request : {1} ", type, request.ToString()); } return(ComposeResponseMessage(response, context, request.MessageId)); } //return new HttpResponseMessage(HttpStatusCode.Unauthorized); } catch (Exception ex) { try { if (context == null) { context = CommerceContext.BuildSynchronousContext("Incoming Visa Request", Request, response); } if (message == null) { try { message = Request.Content.ReadAsStringAsync().Result; } catch { } } context.Log.Error("{0} call ended with an error. Message:{1}", ex, context.ApiCallDescription, message); } catch { } response.StatusCode = "100"; response.ErrorMessage = "General Input Error"; return(ComposeResponseMessage(response)); } }