Payment gateways in MVC

When you build the checkout process on your MVC site, you may want to enable customers to pay directly via a payment gateway (for example, PayPal or credit card) when they create an order.

When using the MVC development framework, you need to implement payment gateways for the payment methods in the MVC application and add the related payment methods to Kentico. You cannot use the default payment gateways in Kentico (PayPal and Authorize.NET).

On this page, you can find how to work with API of the Kentico.Ecommerceintegration package that deals with payment of orders. However, the specific implementation can differ for each service, and we recommend that you work closely with documentation of the implemented payment gateway provider.

Configuring payment methods in Kentico

Set up all payment methods, for which you want to implement a payment gateway, as manual payment methods.

See Configuring payment methods to learn more about manual payment methods.

When configuring the payment method, leave the Payment gateway URL and Payment gateways provider class fields blank. The MVC application decides which payment gateway to use based on the method’s code name.

Note: Payment gateways that you implement in your MVC application cannot be used from the administration interface of the Kentico application (for example when manually creating or editing orders).

Developing payment gateways in MVC applications

In the controller action of the last checkout process step (usually the preview step), redirect the customer to a controller that takes care of the specific payment gateway.

If you provide multiple payment methods and you need to distinguish their payment gateways, check the cart’s payment method code name. For example:




            if (shoppingCart.PaymentMethod.PaymentOptionName.Equals("PaymentMethodCodeName"))
            {
                return RedirectToAction("ActionForPayment", "MyPaymentGateway");
            }



Since most services require a different approach to connecting with them, you need to implement the connection based on their documentation.

The payment gateway then receives a response from the service. Create a new PaymentResultInfoobject with information from the response. Use the SetPaymentResult method of the Order class to save the payment result to the database. For example:




            if (response != null)
            {
                // Gets the order based on the invoice number from the response
                Order order = orderRepository.GetById(response.InvoiceNo);

                // Checks whether the paid amount of money matches the order price
                // and whether the payment was approved
                if (response.Amount == order.TotalPrice && response.Approved)
                {
                    // Creates a payment result object that will be viewable in Kentico
                    PaymentResultInfo result = new PaymentResultInfo
                    {
                        PaymentDate = DateTime.Now,
                        PaymentDescription = response.Message,
                        PaymentIsCompleted = response.Completed,
                        PaymentTransactionID = response.TransactionID,
                        PaymentStatusValue = response.ResponseCode,
                        PaymentMethodName = "PaymentName"
                    };

                    // Saves the payment result to the database
                    order.SetPaymentResult(result);
                }
            }



Kentico sets the order status as configured in the payment method.