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;
}