Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
            }
        }