Beispiel #1
0
            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));
                }
            }
Beispiel #2
0
            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));
                }
            }
Beispiel #3
0
            public static StairSupplies.Payments.Transactions.Payeezy.Item ParseXML(String response)
            {
                try
                {
                    StairSupplies.Payments.Transactions.Payeezy.Item paymentTransactionPayeezy = new StairSupplies.Payments.Transactions.Payeezy.Item();
                    XmlDocument xmldoc = new XmlDocument();
                    XmlNode     nodeBankResponseCode;
                    XmlNode     nodeBankMessage;
                    XmlNode     nodeCardType;
                    XmlNode     nodeExactID;
                    XmlNode     nodeDollarAmount;
                    XmlNode     nodeCardHoldersName;
                    XmlNode     nodeTransactionTag;
                    XmlNode     nodeAuthorizationNum;
                    XmlNode     nodeExactResponseCode;
                    XmlNode     nodeExactMessage;
                    XmlNode     nodeSequenceNo;
                    XmlNode     nodeRetrievalRefNo;
                    XmlNode     nodeExpiryDate;
                    XmlNode     nodeTransarmorToken;
                    XmlNode     nodeApproved;

                    xmldoc.LoadXml(response);

                    foreach (XmlNode node in xmldoc.GetElementsByTagName("TransactionResult"))
                    {
                        nodeBankResponseCode  = node.SelectSingleNode("Bank_Resp_Code");
                        nodeBankMessage       = node.SelectSingleNode("Bank_Message");
                        nodeCardType          = node.SelectSingleNode("CardType");
                        nodeExactID           = node.SelectSingleNode("ExactID");
                        nodeDollarAmount      = node.SelectSingleNode("DollarAmount");
                        nodeCardHoldersName   = node.SelectSingleNode("CardHoldersName");
                        nodeTransactionTag    = node.SelectSingleNode("Transaction_Tag");
                        nodeAuthorizationNum  = node.SelectSingleNode("Authorization_Num");
                        nodeExactResponseCode = node.SelectSingleNode("EXact_Resp_Code");
                        nodeExactMessage      = node.SelectSingleNode("EXact_Message");
                        nodeSequenceNo        = node.SelectSingleNode("SequenceNo");
                        nodeRetrievalRefNo    = node.SelectSingleNode("Retrieval_Ref_No");
                        nodeExpiryDate        = node.SelectSingleNode("Expiry_Date");
                        nodeTransarmorToken   = node.SelectSingleNode("TransarmorToken");
                        nodeApproved          = node.SelectSingleNode("Transaction_Approved");

                        if (nodeBankResponseCode != null)
                        {
                            paymentTransactionPayeezy.BankResponseCode = nodeBankResponseCode.InnerText;
                        }
                        if (nodeBankMessage != null)
                        {
                            paymentTransactionPayeezy.BankMessage = nodeBankMessage.InnerText;
                        }
                        if (nodeCardType != null)
                        {
                            paymentTransactionPayeezy.CardType = nodeCardType.InnerText;
                        }
                        if (nodeExactID != null)
                        {
                            paymentTransactionPayeezy.ExactID = nodeExactID.InnerText;
                        }
                        if (nodeDollarAmount != null)
                        {
                            paymentTransactionPayeezy.DollarAmount = Double.Parse(nodeDollarAmount.InnerText);
                        }
                        if (nodeCardHoldersName != null)
                        {
                            paymentTransactionPayeezy.CardHoldersName = nodeCardHoldersName.InnerText.Replace("%20", " ");
                        }
                        if (nodeTransactionTag != null)
                        {
                            paymentTransactionPayeezy.TransactionTag = nodeTransactionTag.InnerText;
                        }
                        if (nodeAuthorizationNum != null)
                        {
                            paymentTransactionPayeezy.AuthorizationNum = nodeAuthorizationNum.InnerText;
                        }
                        if (nodeExactResponseCode != null)
                        {
                            paymentTransactionPayeezy.ExactResponseCode = nodeExactResponseCode.InnerText;
                        }
                        if (nodeExactMessage != null)
                        {
                            paymentTransactionPayeezy.ExactMessage = nodeExactMessage.InnerText;
                        }
                        if (nodeSequenceNo != null)
                        {
                            paymentTransactionPayeezy.SequenceNo = nodeSequenceNo.InnerText;
                        }
                        if (nodeRetrievalRefNo != null)
                        {
                            paymentTransactionPayeezy.RetrievalRefNo = nodeRetrievalRefNo.InnerText;
                        }
                        if (nodeExpiryDate != null)
                        {
                            paymentTransactionPayeezy.ExpiryDate = nodeExpiryDate.InnerText;
                        }
                        if (nodeTransarmorToken != null)
                        {
                            paymentTransactionPayeezy.TransarmorToken = nodeTransarmorToken.InnerText;
                        }
                        if (nodeApproved != null)
                        {
                            paymentTransactionPayeezy.Approved = PeakeyTools.Database.MySQL.NullBoolean(nodeApproved.InnerText);
                        }
                    }

                    return(paymentTransactionPayeezy);
                }
                catch (Exception ex)
                {
                    PeakeyTools.Api.Log(PeakeyTools.Api.ApiName.payeezy, "Could not parse XML from Payeezy payment API response.", ex, "EXCEPTION");
                    throw new Exception("Could not parse XML from Payeezy payment API response.", ex);
                }
            }
        public static Boolean Save(StairSupplies.Payments.Transactions.Payeezy.Item item)
        {
            MySqlConnection cn  = null;
            MySqlCommand    cmd = null;

            try
            {
                PeakeyTools.Database.MySQL.OpenConnection(ref cn, ref cmd);
                cmd.CommandText = @"
INSERT INTO TblPaymentTransactions_Payeezy 
( 
	PaymentTransactionID, 
";

                if (item.PaymentTransactionReferenceID != 0)
                {
                    cmd.CommandText += "PaymentTransaction_Payeezy_ReferenceID, ";
                }

                cmd.CommandText += @"
	ExactID, 
	DollarAmount, 
	Transaction_Tag, 
	Authorization_Num, 
	CardHoldersName, 
	Exact_Response_Code, 
	Exact_Message, 
	Bank_Response_Code, 
	Bank_Message, 
	Sequence_No, 
	Retrieval_Ref_No, 
	CardType, 
	TransactionType, 
	Expiry_Date, 
	TransarmorToken 
) 
VALUES 
( 
	@PaymentTransactionID, 
";

                if (item.PaymentTransactionReferenceID != 0)
                {
                    cmd.CommandText += "@PaymentTransaction_Payeezy_ReferenceID, ";
                }

                cmd.CommandText += @"
	@ExactID, 
	@DollarAmount, 
	@Transaction_Tag, 
	@Authorization_Num, 
	@CardHoldersName, 
	@Exact_Response_Code, 
	@Exact_Message, 
	@Bank_Response_Code, 
	@Bank_Message, 
	@Sequence_No, 
	@Retrieval_Ref_No, 
	@CardType, 
	@TransactionType, 
	@Expiry_Date, 
	@TransarmorToken 
)
";

                PeakeyTools.Database.MySQL.AddParameter(cmd, "@PaymentTransactionID", MySqlDbType.Int32, item.PaymentTransactionID);
                PeakeyTools.Database.MySQL.AddParameter(cmd, "@PaymentTransaction_Payeezy_ReferenceID", MySqlDbType.Int32, item.PaymentTransactionReferenceID);
                PeakeyTools.Database.MySQL.AddParameter(cmd, "@ExactID", MySqlDbType.VarChar, item.ExactID);
                PeakeyTools.Database.MySQL.AddParameter(cmd, "@DollarAmount", MySqlDbType.VarChar, item.DollarAmount.ToString("F2"));
                PeakeyTools.Database.MySQL.AddParameter(cmd, "@Transaction_Tag", MySqlDbType.VarChar, item.TransactionTag);
                PeakeyTools.Database.MySQL.AddParameter(cmd, "@Authorization_Num", MySqlDbType.VarChar, item.AuthorizationNum);
                PeakeyTools.Database.MySQL.AddParameter(cmd, "@CardHoldersName", MySqlDbType.VarChar, item.CardHoldersName);
                PeakeyTools.Database.MySQL.AddParameter(cmd, "@Exact_Response_Code", MySqlDbType.VarChar, item.ExactResponseCode);
                PeakeyTools.Database.MySQL.AddParameter(cmd, "@Exact_Message", MySqlDbType.VarChar, item.ExactMessage);
                PeakeyTools.Database.MySQL.AddParameter(cmd, "@Bank_Response_Code", MySqlDbType.VarChar, item.BankResponseCode);
                PeakeyTools.Database.MySQL.AddParameter(cmd, "@Bank_Message", MySqlDbType.VarChar, item.BankMessage);
                PeakeyTools.Database.MySQL.AddParameter(cmd, "@Sequence_No", MySqlDbType.VarChar, item.SequenceNo);
                PeakeyTools.Database.MySQL.AddParameter(cmd, "@Retrieval_Ref_No", MySqlDbType.VarChar, item.RetrievalRefNo);
                PeakeyTools.Database.MySQL.AddParameter(cmd, "@CardType", MySqlDbType.VarChar, item.CardType);
                PeakeyTools.Database.MySQL.AddParameter(cmd, "@TransactionType", MySqlDbType.VarChar, item.TransactionType);
                PeakeyTools.Database.MySQL.AddParameter(cmd, "@Expiry_Date", MySqlDbType.VarChar, item.ExpiryDate);
                PeakeyTools.Database.MySQL.AddParameter(cmd, "@TransarmorToken", MySqlDbType.VarChar, item.TransarmorToken);

                PeakeyTools.Database.MySQL.TrimCommandText(cmd);
                cmd.ExecuteNonQuery();
                return(true);
            }
            catch (Exception ex)
            {
                PeakeyTools.Api.Log(PeakeyTools.Api.ApiName.payeezy, "Could not save Payeezy Payment Transaction data.", ex, "EXCEPTION");
                throw new Exception("Could not save Payeezy Payment Transaction data.", ex);
            }
            finally
            {
                PeakeyTools.Database.MySQL.CleanUp(cn, cmd, null);
            }
        }