jxycms
11/28/2017 - 3:58 AM

payway payment

payway payment and set customer to order and save in kentico

// PayWay Payment Constant
using CMS.Helpers;
public static class PayWayConstant
{
    // Payment Result
    public const string PAYWAY_PAYMENT_RESULT_HEADER_SETTLEMENTDATE = "PayWayPaymentResult.SettlementDate";
    public const string PAYWAY_PAYMENT_RESULT_HEADER_RESPONSECODE = "PayWayPaymentResult.ResponseCode";
    public const string PAYWAY_PAYMENT_RESULT_HEADER_CREDITGROUP = "PayWayPaymentResult.CreditGroup";
    public const string PAYWAY_PAYMENT_RESULT_HEADER_CARDSCHEMENAME = "PayWayPaymentResult.CardSchemeName";

    public const string PAYWAY_PAYMENT_RESULT_HEADERVALUE_SETTLEMENTDATE = "Settlement Date:";
    public const string PAYWAY_PAYMENT_RESULT_HEADERVALUE_RESPONSECODE = "Response Code:";
    public const string PAYWAY_PAYMENT_RESULT_HEADERVALUE_CREDITGROUP = "Credit Group:";
    public const string PAYWAY_PAYMENT_RESULT_HEADERVALUE_CARDSCHEMENAME = "Card Scheme Name:";

    public const string PAYWAY_PAYMENT_RESULT_ITEM_SETTLEMENTDATE = "SettlementDate";
    public const string PAYWAY_PAYMENT_RESULT_ITEM_RESPONSECODE = "ResponseCode";
    public const string PAYWAY_PAYMENT_RESULT_ITEM_CREDITGROUP = "CreditGroup";
    public const string PAYWAY_PAYMENT_RESULT_ITEM_CARDSCHEMENAME = "CardSchemeName";

    // Payment Setting Keys
    public const string PAYWAY_PAYMENT_SETTINGKEY_ENABLED = "PayWayEnabled";
    public const string PAYWAY_PAYMENT_SETTINGKEY_USERNAME = "PayWayUsername";
    public const string PAYWAY_PAYMENT_SETTINGKEY_PASSWORD = "PayWayPassword";
    public const string PAYWAY_PAYMENT_SETTINGKEY_MERCHANT_ID = "PayWayMerchantID";
    public const string PAYWAY_PAYMENT_SETTINGDISPLAYNAME_ENABLED = "Enabled";
    public const string PAYWAY_PAYMENT_SETTINGDISPLAYNAME_USERNAME = "Username";
    public const string PAYWAY_PAYMENT_SETTINGDISPLAYNAME_PASSWORD = "Password";
    public const string PAYWAY_PAYMENT_SETTINGDISPLAYNAME_MERCHANT_ID = "Merchant ID";
    public const string PAYWAY_PAYMENT_SETTINGDESCRIPTION_ENABLED = "PayWay Payment Setting Keys Status";
    public const string PAYWAY_PAYMENT_SETTINGDESCRIPTION_USERNAME = "PayWay Payment Username";
    public const string PAYWAY_PAYMENT_SETTINGDESCRIPTION_PASSWORD = "PayWay Payment Password";
    public const string PAYWAY_PAYMENT_SETTINGDESCRIPTION_MERCHANT_ID = "PayWay Payment Merchant ID";

    public const string PAYWAY_PAYMENT_SETTING_TEST_MODE = "test";
    public const string PAYWAY_PAYMENT_SETTING_PARENT_CATEGORY = "Custom Payment Settings";
    public const string PAYWAY_PAYMENT_SETTING_CATEGORY = "PayWay Payment Gateway";

    public const string PAYWAY_PAYMENT_ERROR_EVENT_CODE = "Payment Failed: {0}";
    
    // Payment Request
    public const string PAYWAY_PAYMENT_REQUEST_ORDERINFO = "Order{0}";

    // Payment Response
    public const string PAYWAY_PAYMENT_RESPONSE_SUMMARYCODE = "response.summaryCode";
    public const string PAYWAY_PAYMENT_RESPONSE_RESPONSECODE = "response.responseCode";
    public const string PAYWAY_PAYMENT_RESPONSE_RESPONSETEXT = "response.text";
    public const string PAYWAY_PAYMENT_RESPONSE_RECEIPTNO = "response.receiptNo";
    public const string PAYWAY_PAYMENT_RESPONSE_CREDITGROUP = "response.creditGroup";
    public const string PAYWAY_PAYMENT_RESPONSE_CARDSCHEMENAME = "response.cardSchemeName";
    public const string PAYWAY_PAYMENT_RESPONSE_TRANSACTIONDATE = "response.transactionDate";
    public const string PAYWAY_PAYMENT_RESPONSE_CVNRESPONSE = "response.cvnResponse";
    public const string PAYWAY_PAYMENT_RESPONSE_SETTLEMENTDATE = "response.settlementDate";
    public const string PAYWAY_PAYMENT_RESPONSE_CVNMATCHED = "M";
    public const string PAYWAY_PAYMENT_RESPONSE_APPROVED = "0";

    // Payment Error Message
    public const string PAYWAY_PAYMENT_ERRORMSG_GENERAL = "Your credit card details are not valid. Please try again.";
    public const string PAYWAY_PAYMENT_ERRORMSG_CARTNOTEXIST = "Shopping Cart data is not available.";
    public const string PAYWAY_PAYMENT_ERRORMSG_PAYMENTSETTINGSINVALID = "Invalid PayWay Payment Gateway settings.";
    public const string PAYWAY_PAYMENT_ERRORMSG_PAYMENTPARAMSINVALID = "Payment request is invalid.";
    public const string PAYWAY_PAYMENT_ERRORMSG_TRANSACTIONFAILED = "Transaction failed. <br />Error summary: ";
    public const string PAYWAY_PAYMENT_ERRORMSG_PAYMENTFORM = "Payment Form cannot be loaded.";
    public const string PAYWAY_PAYMENT_ERRORMSG_PAYMENTSETTINGSDISABLED = "Payment settings for '{0}' site are disabled. Order '{1}' will use Global payment settings instead.";

    // Payment Form
    public const string PAYWAY_PAYMENTFORM_PATH = "~/CMSModules/CustomPaymentGateway/PayWay/PayWayPaymentForm.ascx";
    public const string PAYWAY_PAYMENTFORM_CUSTOMDATA_CCNUMBER = "CCNumber";
    public const string PAYWAY_PAYMENTFORM_CUSTOMDATA_CCVERIFICATIONNUMBER = "CCVerificationNumber";
    public const string PAYWAY_PAYMENTFORM_CUSTOMDATA_CCEXPIRATION = "CCExpiration";
    public const string PAYWAY_PAYMENTFORM_ERRORMSG_CCNUMBER_CODE = "PayWayPaymentForm.CardNumberError";
    public const string PAYWAY_PAYMENTFORM_ERRORMSG_CCNUMBER_TEXT = "Please enter your credit card number.";
    public const string PAYWAY_PAYMENTFORM_ERRORMSG_CCVERIFICATIONNUMBER_CODE = "PayWayPaymentForm.CardVerificationNumberError";
    public const string PAYWAY_PAYMENTFORM_ERRORMSG_CCVERIFICATIONNUMBER_TEXT = "Please enter your credit card verification number.";
    public const string PAYWAY_PAYMENTFORM_ERRORMSG_CCEXPIRATION_CODE = "PayWayPaymentForm.CardExpirationError";
    public const string PAYWAY_PAYMENTFORM_ERRORMSG_CCEXPIRATION_TEXT = "Please enter your credit card expiration.";
    public const string PAYWAY_PAYMENTFORM_LABEL_CCTITLE_CODE = "PayWayPaymentForm.CardTitleLabel";
    public const string PAYWAY_PAYMENTFORM_LABEL_CCTITLE_TEXT = "Credit Card Details";
    public const string PAYWAY_PAYMENTFORM_LABEL_CCNUMBER_CODE = "PayWayPaymentForm.CardNumberLabel";
    public const string PAYWAY_PAYMENTFORM_LABEL_CCNUMBER_TEXT = "Card Number:";
    public const string PAYWAY_PAYMENTFORM_LABEL_CCVERIFICATIONNUMBER_CODE = "PayWayPaymentForm.CardVerificationNumberLabel";
    public const string PAYWAY_PAYMENTFORM_LABEL_CCVERIFICATIONNUMBER_TEXT = "Card Verification Number:";
    public const string PAYWAY_PAYMENTFORM_LABEL_CCEXPIRATION_CODE = "PayWayPaymentForm.CardExpirationLabel";
    public const string PAYWAY_PAYMENTFORM_LABEL_CCEXPIRATION_TEXT = "Card Expiration Date (mm/yyyy):";

    // Payment Option
    public const string PAYWAY_PAYMENTOPTION_DISPLAYNAME = "Credit Card (PayWay)";
    public const string PAYWAY_PAYMENTOPTION_CODENAME = "PayWayCreditCard";
    public const string PAYWAY_PAYMENTOPTION_CLASSNAME = "PayWayProvider";
    public const string PAYWAY_PAYMENTOPTION_DESCRIPTION = "Credit card for PayWay payment gateway";
    public const string PAYWAY_PAYMENTOPTION_SUCCESSSTATUS = "PaymentReceived";
    public const string PAYWAY_PAYMENTOPTION_FAILEDSTATUS = "PaymentFailed";

    // PayWay Certificate file and Log directory
    public const string PAYWAY_LOGDIRECTORY = @"\App_Code\NR\PayWay\PayWayLog\";
    public const string PAYWAY_CERTIFICATEFILE = "ccapi.q0";
    
    // PayWay Params 
    public const string PAYWAY_PAYMENTPARAM_ORDERECI = "SSL";
    public const string PAYWAY_PAYMENTPARAM_ORDERTYPE = "capture";
}
using System;
using System.Linq;
using System.Collections;
using System.Web.UI.WebControls;
using CMS.PortalControls;
using CMS.Ecommerce;
using CMS.Helpers;
using CMS.Globalization;
using CMS.EventLog;
using CMS.Base;
using CMS.SiteProvider;
using CMS.DataEngine;
using Qvalent.PayWay;

protected void btnPaywayDonate_Click(object sender, EventArgs e)
{
    ShoppingCartInfo cart = ECommerceContext.CurrentShoppingCart;
    string successDonation = ("http://" + CurrentSite.DomainName + "/support-us/confirm-donation/success").ToLower();
    string failDonation = ("http://" + CurrentSite.DomainName + "/Support-Us/Confirm-Failed").ToLower();
    if (cart.CartItems.Count > 0)
    {
        for (int i=0; i<cart.CartItems.Count; i++) {
            ShoppingCartItemInfo cartItem = cart.CartItems[i];
            cart.RemoveShoppingCartItem(cartItem.CartItemID);
            ShoppingCartItemInfoProvider.DeleteShoppingCartItemInfo(cartItem);
        }
    }

    SKUInfo product = SKUInfoProvider.GetSKUs()
                        .WhereEquals("SKUName", "Donation")
                        .WhereNull("SKUOptionCategoryID")
                        .FirstObject;

    if (product != null)
    {
        // Saves the cart to the database
        ShoppingCartInfoProvider.SetShoppingCartInfo(cart);

        CustomerInfo customerCheck = CustomerInfoProvider.GetCustomers()
                                            .WhereEquals("CustomerEmail", txtEmailCreditCard.Text)
                                            .FirstObject;
        CustomerInfo customerPayway = null;
        if (customerCheck != null)
        {
            customerPayway = customerCheck;
        }
        else {
            CustomerInfo customer = new CustomerInfo
            {
                CustomerFirstName = txtFirstNameCreditCard.Text,
                CustomerLastName = txtLastNameCreditCard.Text,
                CustomerPhone = txtPhoneCreditCard.Text,
                CustomerEmail = txtEmailCreditCard.Text,
                CustomerEnabled = true,
                CustomerSiteID = CurrentSite.SiteID
            };
            customerPayway = customer;
            CustomerInfoProvider.SetCustomerInfo(customer);
        }
        // Creates a new customer object
        
        CountryInfo country = CountryInfoProvider.GetCountryInfo("Australia");
        StateInfo state = StateInfoProvider.GetStateInfo(drpStateCreditCard.SelectedValue);
        AddressInfo address = new AddressInfo
        {
            AddressLine1 = txtAddr1CreditCard.Text,
            AddressLine2 = txtAddr2CreditCard.Text,
            AddressCity = txtSuburbCreditCard.Text,
            AddressZip = txtPostcodeCreditCard.Text,
            AddressIsBilling = true,
            AddressIsShipping = false,
            AddressIsCompany = false,
            AddressEnabled = true,
            AddressPersonalName = txtFirstNameCreditCard.Text + " " + txtLastNameCreditCard.Text,
            AddressCountryID = country.CountryID,
            AddressStateID = state.StateID,
            AddressName = txtFirstNameCreditCard.Text + " " + txtLastNameCreditCard.Text,
            AddressCustomerID = customerPayway.CustomerID
        };
        // Prepares a shopping cart item representing 1 unit of the product
        ShoppingCartItemParameters parameters = new ShoppingCartItemParameters(product.SKUID, 1);
        ShoppingCartItemInfo cartItem = cart.SetShoppingCartItem(parameters);

        // Get price from selected value
        double selectedValue = ValidationHelper.GetDouble(Request.Form["donationAmountSelected"], 0);

        if (selectedValue == 0)
            selectedValue = double.Parse(txtCustomAmount.Text);

        cartItem.CartItemPrice = selectedValue;
        SessionHelper.SetValue("donation_amount", selectedValue);
        cart.ShoppingCartCustomerID = customerPayway.CustomerID;
        cart.ShoppingCartBillingAddress = address;
        cart.ShoppingCartShippingAddress = address;
        // Saves the shopping cart item to the shopping cart
        ShoppingCartInfoProvider.SetShoppingCartInfo(cart);
        ShoppingCartItemInfoProvider.SetShoppingCartItemInfo(cartItem);
        ShoppingCartInfoProvider.SetOrder(cart);
        OrderInfo newOrder = OrderInfoProvider.GetOrderInfo(cart.OrderId);
        //OrderInfoProvider.SetOrderInfo(newOrder);
        //if (ShoppingCartInfoObj != null)
        //{
        // Get Payment settings

        string username = SettingsKeyInfoProvider.GetValue(PayWayConstant.PAYWAY_PAYMENT_SETTINGKEY_USERNAME, SiteContext.CurrentSiteID);
        string password = SettingsKeyInfoProvider.GetValue(PayWayConstant.PAYWAY_PAYMENT_SETTINGKEY_PASSWORD, SiteContext.CurrentSiteName);
        string merchant = SettingsKeyInfoProvider.GetValue(PayWayConstant.PAYWAY_PAYMENT_SETTINGKEY_MERCHANT_ID, SiteContext.CurrentSiteName);

        if (ValidatePaymentSettings(username, password, merchant))
        {
            try
            {
                string logPath = SystemContext.WebApplicationPhysicalPath + PayWayConstant.PAYWAY_LOGDIRECTORY;
                string curPath = logPath + PayWayConstant.PAYWAY_CERTIFICATEFILE;
                String initParams = @"certificateFile=" + curPath + "&" + @"logDirectory=" + logPath;
                PayWayAPI payWayAPI = new PayWayAPI();
                payWayAPI.Initialise(initParams);

                if (payWayAPI != null)
                {
                    // Populate Payment Request
                    PayWayRequest requestParams = new PayWayRequest();

                    requestParams.CustomerUsername = username;
                    requestParams.CustomerPassword = password;
                    requestParams.CustomerMerchant = merchant;

                    requestParams.CardNumber = txtCardNumber.Text;
                    requestParams.CardVerificationNumber = txtCardVerificationNumber.Text;

                    requestParams.CardExpiryYear = drpYears.SelectedValue.ToString().Substring(2, 2);
                    requestParams.CardExpiryMonth = drpMonths.SelectedValue.ToString();

                    bool isTestMode = requestParams.CustomerMerchant.ToLower().Equals(PayWayConstant.PAYWAY_PAYMENT_SETTING_TEST_MODE);
                    requestParams.CardCurrency = cart.Currency.CurrencyCode;
                    requestParams.AmountCents = GetMoneyWithCent(CurrencyInfoProvider.GetFormattedValue(selectedValue, cart.Currency), isTestMode);

                    // Note: you must supply a unique order number for each transaction request.
                    // We recommend that you store each transaction request in your database and
                    // that the order number is the primary key for the transaction record in that
                    // database.
                    requestParams.OrderNumber = cart.OrderId.ToString();
                    requestParams.OrderECI = PayWayConstant.PAYWAY_PAYMENTPARAM_ORDERECI;
                    requestParams.OrderType = PayWayConstant.PAYWAY_PAYMENTPARAM_ORDERTYPE;

                    Hashtable paymentRequest = requestParams.GetPaymentRequestParams();
                    if (paymentRequest != null)
                    {
                        // Format request parameters using PayWay API
                        string formattedRequest = payWayAPI.FormatRequestParameters(paymentRequest);

                        // Process credit card payment
                        string paymentResponse = payWayAPI.ProcessCreditCard(formattedRequest);

                        // Break the response string into its component parameters
                        IDictionary responseParameters = payWayAPI.ParseResponseParameters(paymentResponse);

                        // Get the required parameters from the response
                        string summaryCode = ValidationHelper.GetString(responseParameters[PayWayConstant.PAYWAY_PAYMENT_RESPONSE_SUMMARYCODE], string.Empty);
                        string responseCode = ValidationHelper.GetString(responseParameters[PayWayConstant.PAYWAY_PAYMENT_RESPONSE_RESPONSECODE], string.Empty);
                        string responseText = ValidationHelper.GetString(responseParameters[PayWayConstant.PAYWAY_PAYMENT_RESPONSE_RESPONSETEXT], string.Empty);
                        string receiptNo = ValidationHelper.GetString(responseParameters[PayWayConstant.PAYWAY_PAYMENT_RESPONSE_RECEIPTNO], string.Empty);
                        string settlementDate = ValidationHelper.GetString(responseParameters[PayWayConstant.PAYWAY_PAYMENT_RESPONSE_SETTLEMENTDATE], string.Empty);
                        string creditGroup = ValidationHelper.GetString(responseParameters[PayWayConstant.PAYWAY_PAYMENT_RESPONSE_CREDITGROUP], string.Empty);
                        string cardSchemeName = ValidationHelper.GetString(responseParameters[PayWayConstant.PAYWAY_PAYMENT_RESPONSE_CARDSCHEMENAME], string.Empty);
                        string transactionDate = ValidationHelper.GetString(responseParameters[PayWayConstant.PAYWAY_PAYMENT_RESPONSE_TRANSACTIONDATE], string.Empty);
                        string cvnResponse = ValidationHelper.GetString(responseParameters[PayWayConstant.PAYWAY_PAYMENT_RESPONSE_CVNRESPONSE], string.Empty);
                        EventLogProvider.LogInformation("PaywayResponse", string.Format(PayWayConstant.PAYWAY_PAYMENT_ERROR_EVENT_CODE, cvnResponse), responseCode);
                        // Payment succeed
                        if (summaryCode == PayWayConstant.PAYWAY_PAYMENT_RESPONSE_APPROVED)
                        {
                            newOrder.OrderIsPaid = true;
                            OrderInfoProvider.SetOrderInfo(newOrder);
                            PayWayResultInfo pfi = new PayWayResultInfo();
                            pfi.PaymentTransactionID = receiptNo;
                            pfi.PaymentDescription = responseText;
                            pfi.PaymentDate = DateTime.Parse(transactionDate);
                            pfi.PaymentIsCompleted = true;
                            pfi.PaymentMethodID = cart.ShoppingCartPaymentOptionID;
                            pfi.SettlementDate = settlementDate;
                            pfi.CreditGroup = creditGroup;
                            pfi.CardSchemeName = cardSchemeName;
                            pfi.ResponseCode = responseCode;
                            pfi.PaymentStatusValue = PayWayResponse.GetSummaryResponseDescription(summaryCode);
                        }
                        else
                        {
                            newOrder.OrderIsPaid = false;
                            OrderInfoProvider.SetOrderInfo(newOrder);
                            // Log error message if payment did not approved
                            string errorMessage = string.Empty;
                            if (!string.IsNullOrEmpty(cvnResponse) && !cvnResponse.Equals(PayWayConstant.PAYWAY_PAYMENT_RESPONSE_CVNMATCHED))
                            {
                                errorMessage = PayWayResponse.GetCVNResponseDescription(cvnResponse);
                            }
                            else
                            {
                                errorMessage = responseText;
                            }

                            EventLogProvider.LogInformation("PaywayProvider", string.Format(PayWayConstant.PAYWAY_PAYMENT_ERROR_EVENT_CODE, cvnResponse), string.Format("{0}: {1}", cvnResponse, errorMessage));
                            URLHelper.Redirect(failDonation);
                        }

                    }
                    else
                    {
                        newOrder.OrderIsPaid = false;
                        OrderInfoProvider.SetOrderInfo(newOrder);
                        // Log error message for invalid payment request parameters
                        EventLogProvider.LogInformation("PaywayProvider", PayWayConstant.PAYWAY_PAYMENT_ERRORMSG_PAYMENTPARAMSINVALID, PayWayConstant.PAYWAY_PAYMENT_ERROR_EVENT_CODE);
                        URLHelper.Redirect(failDonation);
                    }
                }
            }
            catch (Exception ex)
            {
                newOrder.OrderIsPaid = false;
                OrderInfoProvider.SetOrderInfo(newOrder);
                // Log error message 
                EventLogProvider.LogException("PaywayProvider", PayWayConstant.PAYWAY_PAYMENT_ERROR_EVENT_CODE, ex);
                URLHelper.Redirect(failDonation);
            }
        }
        else
        {
            newOrder.OrderIsPaid = false;
            OrderInfoProvider.SetOrderInfo(newOrder);
            URLHelper.Redirect(failDonation);
        }
    }
    else
    {
        // Log error message for null shopping cart
        EventLogProvider.LogInformation("PaywayProvider", PayWayConstant.PAYWAY_PAYMENT_ERRORMSG_CARTNOTEXIST, PayWayConstant.PAYWAY_PAYMENT_ERROR_EVENT_CODE);
        URLHelper.Redirect(failDonation);
    }
    URLHelper.Redirect(successDonation);

}

private string GetMoneyWithCent(string amount, bool isTestMode)
{
    //EventLogProvider ep = new EventLogProvider();

    if (amount.Contains("."))
    {
        string[] dollar = amount.Split('.');
        if (dollar[1].Length == 0)
            dollar[1] += "00";
        else if (dollar[1].Length == 1)
            dollar[1] += "0";
        else if (dollar[1].Length > 2)
            dollar[1] = dollar[1].Substring(0, 2);

        amount = dollar[0] + dollar[1];
    }
    else
    {
        amount = string.Format("{0}00", amount);
    }

    // If in Test Mode then add additional "00" next to the amount
    //if (isTestMode)
    //{
    //    amount = string.Format("{0}00", amount);
    //}

    EventLogProvider.LogInformation("PaywayProvider", "amount: " + amount, "custom");

    return amount;
}