public static String SubmitPaymentTransaction(TransactionData transactionData) { String response = ""; try { StringBuilder stringBuilder = new StringBuilder(); using (StringWriter stringWriter = new StringWriter(stringBuilder)) { using (XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter)) { DataTable billingInformation = StairSupplies.Database.TblOrdersBOM.LoadBillingInformation(transactionData.orderID); xmlWriter.Formatting = Formatting.Indented; xmlWriter.WriteStartElement("Transaction"); xmlWriter.WriteElementString("ExactID", StairSupplies.API.Payeezy.GatewayID); xmlWriter.WriteElementString("Password", StairSupplies.API.Payeezy.GatewayPassword); xmlWriter.WriteElementString("Transaction_Type", "00"); xmlWriter.WriteElementString("DollarAmount", transactionData.dollarAmount.ToString("F")); xmlWriter.WriteElementString("Expiry_Date", transactionData.expirationDate); xmlWriter.WriteElementString("CardHoldersName", transactionData.cardHoldersName.Replace("%20", " ")); xmlWriter.WriteElementString("Card_Number", transactionData.cardNumber); xmlWriter.WriteElementString("CVDCode", transactionData.securityCode); xmlWriter.WriteElementString("CVD_Presence_Ind", "1"); // 1 = Value provided by Cardholder xmlWriter.WriteElementString("Reference_No", transactionData.orderID.ToString()); xmlWriter.WriteStartElement("Address"); if (billingInformation.Rows.Count > 0) { String billingAddress1 = ""; String billingAddress2 = ""; String billingCity = ""; String billingState = ""; String billingPostalCode = ""; String billingCountryCode = ""; String billingPhoneNumber = ""; billingAddress1 = PeakeyTools.Database.MySQL.NullString(billingInformation.Rows[0]["BillAddress1"].ToString()); billingAddress2 = PeakeyTools.Database.MySQL.NullString(billingInformation.Rows[0]["BillAddress2"].ToString()); billingAddress2 += PeakeyTools.Database.MySQL.NullString(billingInformation.Rows[0]["BillAddress3"].ToString()); billingCity = PeakeyTools.Database.MySQL.NullString(billingInformation.Rows[0]["BillCity"].ToString()); billingState = PeakeyTools.Database.MySQL.NullString(billingInformation.Rows[0]["BillState"].ToString()); billingPostalCode = PeakeyTools.Database.MySQL.NullString(billingInformation.Rows[0]["BillPostalCode"].ToString()); billingCountryCode = PeakeyTools.Database.MySQL.NullString(billingInformation.Rows[0]["BillCountryCode"].ToString()); billingPhoneNumber = PeakeyTools.Database.MySQL.NullString(billingInformation.Rows[0]["BillPhoneNumber"].ToString()); xmlWriter.WriteElementString("Address1", billingAddress1); xmlWriter.WriteElementString("Address2", billingAddress2); xmlWriter.WriteElementString("City", billingCity); xmlWriter.WriteElementString("State", billingState); xmlWriter.WriteElementString("Zip", billingPostalCode); xmlWriter.WriteElementString("CountryCode", billingCountryCode); xmlWriter.WriteElementString("PhoneNumber", billingPhoneNumber); if (billingPhoneNumber != "") // PhoneType is required if phone # is provided { xmlWriter.WriteElementString("PhoneType", "H"); // H = Home; W = Work; D = Day; N = Night } } xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); } } StairSupplies.Payments.Transactions.Payeezy.Item paymentTransactionPayeezy = new StairSupplies.Payments.Transactions.Payeezy.Item(); response = Submit(stringBuilder); paymentTransactionPayeezy = ParseXML(response); paymentTransactionPayeezy.TransactionType = "payment"; // Save Payment Transaction item to database StairSupplies.Payments.Transactions.Item paymentTransaction = new StairSupplies.Payments.Transactions.Item(); paymentTransaction.OrderID = transactionData.orderID; paymentTransaction.OrderVersionID = transactionData.orderVersionID; paymentTransaction.ProcessedDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); paymentTransaction.EmployeeID = transactionData.employeeID; if (paymentTransactionPayeezy.Approved) { paymentTransaction.Approved = true; } if (!paymentTransaction.Save()) { PeakeyTools.Api.Log(PeakeyTools.Api.ApiName.payeezy, "Could not save Payment Transaction to database for payment. [OrderID]: " + transactionData.orderID + " [OrderVersionID]: " + transactionData.orderVersionID + " [CardHoldersName]: " + transactionData.cardHoldersName + " [Amount]: " + transactionData.dollarAmount, "EXCEPTION"); return(PeakeyTools.Api.ToJSON(false, true, "Could not save Payment Transaction to database for payment.")); } // Save Payeezy Payment Transaction item to database DataTable dt = StairSupplies.Payments.Transactions.Load_By_Order_ID_And_Processed_Date(transactionData.orderID, paymentTransaction.ProcessedDate); if (dt.Rows.Count > 0) // Find the PaymentTransactionID value from Payment Transaction table { paymentTransactionPayeezy.PaymentTransactionID = Int32.Parse(dt.Rows[0]["PaymentTransactionID"].ToString()); if (!paymentTransactionPayeezy.Save()) { PeakeyTools.Api.Log(PeakeyTools.Api.ApiName.payeezy, "Could not save Payeezy Payment Transaction to database for payment. [OrderID]: " + transactionData.orderID + " [OrderVersionID]: " + transactionData.orderVersionID + " [CardHoldersName]: " + transactionData.cardHoldersName + " [Amount]: " + transactionData.dollarAmount, "EXCEPTION"); return(PeakeyTools.Api.ToJSON(false, true, "Could not save Payeezy Payment Transaction to database for payment.")); } } // Was the payment successful? if (paymentTransactionPayeezy.Approved) { return(PeakeyTools.Api.ToJSON(true, false, "Credit card successfully processed.")); } PeakeyTools.Api.Log(PeakeyTools.Api.ApiName.payeezy, "Failed to process credit card. [Reason]: " + paymentTransactionPayeezy.BankMessage + " [OrderID]: " + transactionData.orderID + " [Full Response]: " + response, "FAILURE"); return(PeakeyTools.Api.ToJSON(false, false, "Failed to process credit card (" + paymentTransactionPayeezy.BankMessage + ").")); } catch (Exception ex) { PeakeyTools.Api.Log(PeakeyTools.Api.ApiName.payeezy, "An error has occurred while attempting to submit a Payeezy payment. [OrderID]: " + transactionData.orderID + " [Full Response]: " + response, ex, "EXCEPTION"); return(PeakeyTools.Api.ToJSON(false, true, "An error has occurred while attempting to submit a payment. " + ex.Message)); } }
public static dynamic IssueRefund(Int32 paymentTransactionPayeezyID, Double dollarAmount, Int32 orderID, Int32 orderVersionID, Int32 employeeID) { String response = ""; try { StringBuilder stringBuilder = new StringBuilder(); String authorizationNum = ""; // Retrieve needed data from record ID DataTable payeezyTransaction = StairSupplies.Payments.Transactions.Payeezy.Load(paymentTransactionPayeezyID); if (payeezyTransaction.Rows.Count == 0) { return(PeakeyTools.Api.ToDynamic(false, true, "Could not load Payeezy transaction by ID.")); } authorizationNum = PeakeyTools.Database.MySQL.NullString(payeezyTransaction.Rows[0]["Authorization_Num"].ToString()); using (StringWriter stringWriter = new StringWriter(stringBuilder)) { using (XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter)) { xmlWriter.Formatting = Formatting.Indented; xmlWriter.WriteStartElement("Transaction"); xmlWriter.WriteElementString("ExactID", StairSupplies.API.Payeezy.GatewayID); xmlWriter.WriteElementString("Password", StairSupplies.API.Payeezy.GatewayPassword); xmlWriter.WriteElementString("Transaction_Type", "34"); xmlWriter.WriteElementString("Transaction_Tag", PeakeyTools.Database.MySQL.NullString(payeezyTransaction.Rows[0]["Transaction_Tag"].ToString())); xmlWriter.WriteElementString("DollarAmount", dollarAmount.ToString("F")); xmlWriter.WriteElementString("Authorization_Num", authorizationNum); xmlWriter.WriteEndElement(); } } StairSupplies.Payments.Transactions.Payeezy.Item paymentTransactionPayeezy = new StairSupplies.Payments.Transactions.Payeezy.Item(); response = Submit(stringBuilder); paymentTransactionPayeezy = ParseXML(response); paymentTransactionPayeezy.TransactionType = "refund"; paymentTransactionPayeezy.PaymentTransactionReferenceID = paymentTransactionPayeezyID; // Save Payment Transaction item to database StairSupplies.Payments.Transactions.Item paymentTransaction = new StairSupplies.Payments.Transactions.Item(); paymentTransaction.OrderID = orderID; paymentTransaction.OrderVersionID = orderVersionID; paymentTransaction.ProcessedDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); paymentTransaction.EmployeeID = employeeID; if (paymentTransactionPayeezy.Approved) { paymentTransaction.Approved = true; } if (!paymentTransaction.Save()) { PeakeyTools.Api.Log(PeakeyTools.Api.ApiName.payeezy, "Could not save Payment Transaction to database for refund. [OrderID]: " + orderID + " [OrderVersionID]: " + orderVersionID + " [AuthorizationNum]: " + authorizationNum + " [Amount]: " + dollarAmount, "EXCEPTION"); return(PeakeyTools.Api.ToDynamic(false, true, "Could not save Payment Transaction to database for refund.")); } // Save Payeezy Payment Transaction item to database DataTable dt = StairSupplies.Payments.Transactions.Load_By_Order_ID_And_Processed_Date(orderID, paymentTransaction.ProcessedDate); if (dt.Rows.Count > 0) // Find the PaymentTransactionID value from Payment Transaction table { paymentTransactionPayeezy.PaymentTransactionID = Int32.Parse(dt.Rows[0]["PaymentTransactionID"].ToString()); if (!paymentTransactionPayeezy.Save()) { PeakeyTools.Api.Log(PeakeyTools.Api.ApiName.payeezy, "Could not save Payeezy Payment Transaction to database for refund. [OrderID]: " + orderID + " [OrderVersionID]: " + orderVersionID + " [AuthorizationNum]: " + authorizationNum + " [Amount]: " + dollarAmount, "EXCEPTION"); return(PeakeyTools.Api.ToDynamic(false, true, "Could not save Payeezy Payment Transaction to database for refund.")); } } // Was the payment successful? if (paymentTransactionPayeezy.Approved) { return(PeakeyTools.Api.ToDynamic(true, false, "Refund successfully processed.")); } PeakeyTools.Api.Log(PeakeyTools.Api.ApiName.payeezy, "Failed to refund credit card. [Reason]: " + paymentTransactionPayeezy.BankMessage + " [OrderID]: " + orderID + " [Full Response]: " + response, "EXCEPTION"); return(PeakeyTools.Api.ToDynamic(false, false, "Failed to refund credit card (" + paymentTransactionPayeezy.BankMessage + ").")); } catch (Exception ex) { PeakeyTools.Api.Log(PeakeyTools.Api.ApiName.payeezy, "An error has occurred while attempting to refund a transaction. [OrderID]: " + orderID + " [Full Response]: " + response, ex, "EXCEPTION"); return(PeakeyTools.Api.ToDynamic(false, true, "An error has occurred while attempting to refund a transaction. " + ex.Message)); } }