public override CallbackResult ProcessCallback(OrderReadOnly order, HttpRequestBase request, OpayoSettings settings)
        {
            var callbackRequestModel = CallbackRequestModel.FromRequest(request);
            var client = new OpayoServerClient(
                logger,
                new OpayoServerClientConfig {
                ProviderAlias = Alias,
                ContinueUrl   = paymentProviderUriResolver.GetContinueUrl(Alias, order.GenerateOrderReference(), hashProvider),
                CancelUrl     = paymentProviderUriResolver.GetCancelUrl(Alias, order.GenerateOrderReference(), hashProvider),
                ErrorUrl      = GetErrorUrl(order, settings)
            });

            return(client.HandleCallback(order, callbackRequestModel, settings));
        }
        public override PaymentFormResult GenerateForm(OrderReadOnly order, string continueUrl, string cancelUrl, string callbackUrl, OpayoSettings settings)
        {
            var form   = new PaymentForm(cancelUrl, FormMethod.Post);
            var client = new OpayoServerClient(logger, new OpayoServerClientConfig
            {
                ContinueUrl   = continueUrl,
                CancelUrl     = cancelUrl,
                ErrorUrl      = GetErrorUrl(order, settings),
                ProviderAlias = Alias
            });

            var inputFields     = LoadInputFields(order, settings, callbackUrl);
            var responseDetails = client.InitiateTransaction(settings.TestMode, inputFields);

            var status = responseDetails[OpayoConstants.Response.Status];

            Dictionary <string, string> orderMetaData = null;

            if (status == OpayoConstants.Response.StatusCodes.Ok || status == OpayoConstants.Response.StatusCodes.Repeated)
            {
                orderMetaData = GenerateOrderMeta(responseDetails);
                if (orderMetaData != null)
                {
                    form.Action = responseDetails[OpayoConstants.Response.NextUrl];
                }
            }
            else
            {
                logger.Warn <OpayoServerPaymentProvider>("Opayo (" + order.OrderNumber + ") - Generate html form error - status: " + status + " | status details: " + responseDetails["StatusDetail"]);
            }

            return(new PaymentFormResult()
            {
                MetaData = orderMetaData,
                Form = form
            });
        }