示例#1
0
        public async Task <string> Insert(Payment valPayment)
        {
            string vResult = string.Empty;

            try {
                ResponseGateway vProccessPayGateway = await InsertPaymentGateway(valPayment);

                GatewayService vGatewayService = new GatewayService();
                if (vProccessPayGateway != null && vProccessPayGateway.transactionResponse.state == "APPROVED")
                {
                    valPayment.IdTransaction   = vProccessPayGateway.transactionResponse.transactionId;
                    valPayment.GatewayJsonData = JsonConvert.SerializeObject(vProccessPayGateway);
                    SQLToolsLibrary     vSqlTools      = new SQLToolsLibrary();
                    List <SqlParameter> vParameterList = new List <SqlParameter> {
                        new SqlParameter("@Id", valPayment.Id),
                        new SqlParameter("@IdTransaction", !(valPayment.IdTransaction == Guid.Empty) ? valPayment.IdTransaction : Guid.Empty),
                        new SqlParameter("@GatewayJsonGata", !string.IsNullOrEmpty(valPayment.GatewayJsonData) ? valPayment.GatewayJsonData : "{}"),
                        new SqlParameter("@IdUser", valPayment.IdUser != Guid.Empty ? valPayment.IdUser : throw new Exception(GlobalValues.vTextExceptionParameterNull)),
                        new SqlParameter("@IdActivity", valPayment.IdActivity != Guid.Empty ? valPayment.IdActivity : throw new Exception(GlobalValues.vTextExceptionParameterNull)),
                        new SqlParameter("@Mount", valPayment.Mount),
                        new SqlParameter("@IdCurrency", valPayment.IdCurrency != Guid.Empty ? valPayment.IdCurrency : throw new Exception(GlobalValues.vTextExceptionParameterNull)),
                        new SqlParameter("@FirstName", !string.IsNullOrEmpty(valPayment.FirstName) ? valPayment.FirstName : throw new Exception(GlobalValues.vTextExceptionParameterNull)),
                        new SqlParameter("@LastName", !string.IsNullOrEmpty(valPayment.LastName) ? valPayment.LastName : throw new Exception(GlobalValues.vTextExceptionParameterNull)),
                        new SqlParameter("@TypeNumberDocument", !string.IsNullOrEmpty(valPayment.TypeNumberDocument) ? valPayment.TypeNumberDocument : throw new Exception(GlobalValues.vTextExceptionParameterNull)),
                        new SqlParameter("@NumberDocument", !string.IsNullOrEmpty(valPayment.NumberDocument) ? valPayment.NumberDocument : throw new Exception(GlobalValues.vTextExceptionParameterNull)),
                        new SqlParameter("@Email", !string.IsNullOrEmpty(valPayment.Email) ? valPayment.Email : throw new Exception(GlobalValues.vTextExceptionParameterNull)),
                        new SqlParameter("@Phone", !string.IsNullOrEmpty(valPayment.Phone) ? valPayment.Phone : throw new Exception(GlobalValues.vTextExceptionParameterNull)),
                        new SqlParameter("@Persons", valPayment.Persons),
                        new SqlParameter("@DateReserve", valPayment.DateReserve),
                        new SqlParameter("@State", valPayment.State),
                        new SqlParameter("@UserCreate", !string.IsNullOrEmpty(valPayment.UserCreate) ? valPayment.UserCreate : string.Empty),
                        new SqlParameter("@DateCreate", valPayment.DateCreate)
                    };
                    bool vInsert = vSqlTools.ExecuteIUWithStoreProcedure(vParameterList, "sp_Insert_Payment", vConnection);

                    if (vInsert)
                    {
                        SenderMail vSenderMail = new SenderMail();
                        await vSenderMail.SendEmailWithPayment(valPayment);

                        await vSenderMail.SendEmailToCompanies(valPayment);

                        vResult = "1";
                        vResult = "1";
                    }
                    else
                    {
                        vResult = "3";
                    }
                }
                else
                {
                    vResult = GatewayUtils.ProccessingResponseGateway(vProccessPayGateway.transactionResponse.state);
                }
            } catch (Exception vEx) {
                string vMessage = vEx.Message;
                vResult = "4";
            }
            return(vResult);
        }
        public Transaction_Result Sale(Sale_Details details)
        {
            System.Collections.Specialized.NameValueCollection parameters = new System.Collections.Specialized.NameValueCollection();
            parameters.Add("auth_id", authID);
            parameters.Add("auth_pass", authPass);
            parameters.Add("card_num", details.CardNumber);
            parameters.Add("card_cvv", details.CardCCV);
            parameters.Add("card_expiry", GatewayUtils.formatExpiryDateYY(details.CardExpiryMonth, details.CardExpiryYear));
            parameters.Add("cust_name", details.CustomerFirstName);
            parameters.Add("cust_address", details.CustomerAddress);
            parameters.Add("cust_postcode", details.CustomerZip);
            parameters.Add("cust_country", details.CustomerCountryCodeTwoLetter);
            parameters.Add("cust_ip", details.IPAddress);
            parameters.Add("cust_email", details.CustomerEmail);
            parameters.Add("cust_tel", details.CustomerPhone);
            parameters.Add("tran_ref", details.ExtRef);
            parameters.Add("tran_amount", details.Amount.ToString("F2"));
            parameters.Add("tran_currency", details.CurrencyCode);
            parameters.Add("tran_testmode", Mode);
            parameters.Add("tran_type", "sale");
            parameters.Add("tran_class", "cont");

            var result = DoUrlEncodedFormPost("https://secure.cashflows.com/gateway/remote", parameters);

            var result_set = result.Split('|');

            if (result_set.Length != 5)
            {
                throw new Exception("Response format invalid");
            }

            var status = result_set[0];
            var transactionIdentifier = result_set[1];
            var avs       = result_set[2];
            var auth_code = result_set[3];
            var message   = result_set[4];

            bool isSuccess = status == "A";

            return(new Transaction_Result
            {
                ApprovalCode = isSuccess ? auth_code : "",
                ErrorCode = !isSuccess ? auth_code : "",
                ErrorText = !isSuccess ? message : "",
                FullRequest = KeyValueToQueryString(parameters),
                FullResponse = result,
                hasServerError = false,
                isApproved = isSuccess,
                isPending = false,
                ResultCode = avs,
                ResultText = message,
                TransactionIndex = transactionIdentifier
            });
        }
        public StorePaymentMethod_Result StorePaymentMethod(StorePaymentMethod_Details details)
        {
            System.Collections.Specialized.NameValueCollection parameters = new System.Collections.Specialized.NameValueCollection();
            parameters.Add("auth_id", authID);
            parameters.Add("auth_pass", authPass);
            parameters.Add("card_num", details.CardNumber);
            parameters.Add("card_cvv", details.CardCVV);
            parameters.Add("card_expiry", GatewayUtils.formatExpiryDateYY(details.CardExpiryMonth, details.CardExpiryYear));
            parameters.Add("cust_name", "");
            parameters.Add("cust_address", "");
            parameters.Add("cust_postcode", "");
            parameters.Add("cust_country", "");
            parameters.Add("cust_ip", "");
            parameters.Add("cust_email", "");
            parameters.Add("cust_tel", "");
            parameters.Add("tran_ref", details.ClientIdentifier);
            parameters.Add("tran_amount", "1.00");
            parameters.Add("tran_currency", "");
            parameters.Add("tran_testmode", Mode);
            parameters.Add("tran_type", "verify");
            parameters.Add("tran_class", "ecom");

            var result = DoUrlEncodedFormPost("https://secure.cashflows.com/gateway/remote", parameters);

            var result_set = result.Split('|');

            if (result_set.Length != 5)
            {
                throw new Exception("Response format invalid");
            }

            var status = result_set[0];
            var transactionIdentifier = result_set[1];
            var avs       = result_set[2];
            var auth_code = result_set[3];
            var message   = result_set[4];

            bool isSuccess = status == "A";

            return(new StorePaymentMethod_Result
            {
                CardToken = transactionIdentifier,
                ErrorCode = !isSuccess ? auth_code : "",
                ErrorMessage = !isSuccess ? message : "",
                isSuccess = isSuccess
            });
        }
示例#4
0
 // GET /TbUsuarioAlias/token/colecao/campo/orderBy/pageSize/pageNumber?CAMPO1=VALOR&CAMPO2=VALOR
 public Retorno Get(string token, int colecao = 0, int campo = 0, int orderBy = 0, int pageSize = 0, int pageNumber = 0)
 {
     // Abre nova conexão
     using (ModelApiUnes _db = new ModelApiUnes())
     {
         try
         {
             Dictionary <string, string> queryString = Request.GetQueryNameValuePairs().ToDictionary(x => x.Key, x => x.Value);
             //if (Permissoes.Autenticado(token, _db))
             //{
             return(GatewayUtils.Get(token, colecao, campo, orderBy, pageSize, pageNumber, queryString, _db));
             // }
             //else
             //    return new Retorno() { Token = false }; //throw new Exception("Unauthorized");
         }
         catch (Exception e)
         {
             throw new Exception(e.Message);
         }
     }
 }
示例#5
0
        public Transaction_Result Sale(Sale_Details details)
        {
            try
            {
                var gateway = newClient();

                DoTransactionResponseMessage gateWayResult = gateway.doTransaction(
                    "ONE_ZERO",
                    SafeKey,
                    transactionType.PAYMENT,
                    authenticationType.NA,
                    new additionalInfo {
                    merchantReference = details.ExtRef
                },
                    new customer
                {
                    address1    = details.CustomerAddress,
                    addressCity = details.CustomerCity,

                    countryOfResidence = details.CustomerCountry,
                    firstName          = details.CustomerFirstName,
                    lastName           = details.CustomerLastName
                },
                    new basket {
                    amountInCents = (details.Amount * 100).ToString("F0"), currencyCode = details.CurrencyCode
                },
                    null,
                    new creditCard[]
                {
                    new creditCard
                    {
                        amountInCents = (details.Amount * 100).ToString("F0"),
                        cardExpiry    = GatewayUtils.formatExpiryDate(details.CardExpiryMonth, details.CardExpiryYear),
                        cardNumber    = details.CardNumber,
                        cvv           = details.CardCCV,
                        nameOnCard    = details.CustomerFirstName + " " + details.CustomerLastName
                    }
                },
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null
                    );

                var results = gateWayResult;


                if (results.successful)
                {
                    return(new Transaction_Result
                    {
                        isApproved = true,
                        ApprovalCode = results.resultCode,
                        ResultCode = results.resultCode,
                        ResultText = results.resultMessage,
                        TransactionIndex = results.payUReference,
                        hasServerError = false,
                        FullRequest = getXmlString(details),
                        FullResponse = getXmlString(results)
                    });
                }
                else
                {
                    return(new Transaction_Result
                    {
                        isApproved = false,
                        hasServerError = false,
                        ErrorCode = results.resultCode,
                        ErrorText = results.resultMessage,
                        FullResponse = getXmlString(results),
                        FullRequest = getXmlString(details)
                    });
                }
            }
            catch (Exception ex)
            {
                return(new Transaction_Result
                {
                    isApproved = false,
                    hasServerError = true,
                    ErrorText = ex.Message
                });
            }
        }
示例#6
0
        public Transaction_Result Refund(Refund_Details details)
        {
            try
            {
                var     xmlString = getRefundXML(PayGateID, Password, details.TransactionIndex, details.Amount.HasValue ? (details.Amount * 100).ToString() : "");
                var     xml       = GatewayUtils.PostXMLTransaction(url, xmlString);
                XmlNode protocol  = xml.GetElementsByTagName("protocol").Item(0);
                XmlNode errorNode = protocol.SelectNodes("errorrx").Item(0);

                var reqXmlDoc = new XmlDocument();
                reqXmlDoc.LoadXml(xmlString);

                var reqstringwriter = new System.IO.StringWriter();
                reqXmlDoc.Save(reqstringwriter);

                var respstringwriter = new System.IO.StringWriter();
                xml.Save(respstringwriter);

                if (errorNode == null)
                {
                    XmlNode successNode       = protocol.SelectNodes("refundrx").Item(0);
                    string  transactionID     = successNode.Attributes.GetNamedItem("tid").Value;   //The unique reference number assign by PayGate to the original transaction.
                    string  customerReference = successNode.Attributes.GetNamedItem("cref").Value;  //This is your reference number for use by your internal systems. Must be different per transaction
                    string  status            = successNode.Attributes.GetNamedItem("stat").Value;  //Transaction status.
                    string  statusDesc        = successNode.Attributes.GetNamedItem("sdesc").Value; //Transaction status description.
                    string  resultCode        = successNode.Attributes.GetNamedItem("res").Value;   //Result Code
                    string  resultDesc        = successNode.Attributes.GetNamedItem("rdesc").Value; //Result Code description.
                    return(new Transaction_Result
                    {
                        TransactionIndex = transactionID,
                        isApproved = status != "0" && status != "2",
                        ApprovalCode = statusDesc,
                        ResultCode = resultCode,
                        ResultText = resultDesc,
                        FullRequest = reqstringwriter.ToString(),
                        FullResponse = respstringwriter.ToString()
                    });
                }
                else
                {
                    string errorCode = errorNode.Attributes.GetNamedItem("ecode").Value;
                    string errorDesc = errorNode.Attributes.GetNamedItem("edesc").Value;

                    return(new Transaction_Result
                    {
                        isApproved = false,
                        hasServerError = false,
                        ErrorCode = errorCode,
                        ErrorText = errorDesc,
                    });
                }
            }
            catch (Exception ex)
            {
                return(new Transaction_Result
                {
                    isApproved = false,
                    hasServerError = true,
                    ErrorText = ex.Message
                });
            }
        }
示例#7
0
        public Transaction_Result Auth(Sale_Details details)
        {
            try
            {
                var xmlString = getAuthXML(
                    PayGateID,
                    Password,
                    details.ExtRef,
                    details.CustomerFirstName + " " + details.CustomerLastName,
                    details.CardNumber,
                    GatewayUtils.formatExpiryDate(details.CardExpiryMonth, details.CardExpiryYear),
                    "0",                                    //budget period 0 == Straight
                    (details.Amount * 100).ToString("F0"),  //takes amounts in cents
                    details.CurrencyCode,
                    details.CardCCV
                    );

                var     xml       = GatewayUtils.PostXMLTransaction(url, xmlString);
                XmlNode protocol  = xml.GetElementsByTagName("protocol").Item(0);
                XmlNode errorNode = protocol.SelectNodes("errorrx").Item(0);

                string cardnumber = details.CardNumber;
                Regex  rgx        = new Regex(@"[^\d]");
                cardnumber = rgx.Replace(cardnumber, String.Empty); //removes dashes spaces, etc
                string last4digits = cardnumber.Substring(details.CardNumber.Length - 4);

                var stringwriter = new System.IO.StringWriter();
                var serializer   = new XmlSerializer(details.GetType());
                serializer.Serialize(stringwriter, details);
                var fullrequest = stringwriter.ToString();

                fullrequest = fullrequest.Replace(cardnumber, last4digits);
                fullrequest = fullrequest.Replace(details.CardCCV, "***");

                var respstringwriter = new System.IO.StringWriter();
                xml.Save(respstringwriter);

                if (errorNode == null)
                {
                    XmlNode successNode       = protocol.SelectNodes("authrx").Item(0);
                    string  transactionID     = successNode.Attributes.GetNamedItem("tid").Value;   //The unique reference number assign by PayGate to the original transaction.
                    string  customerReference = successNode.Attributes.GetNamedItem("cref").Value;  //This is your reference number for use by your internal systems. Must be different per transaction
                    string  status            = successNode.Attributes.GetNamedItem("stat").Value;  //Transaction status.
                    string  statusDesc        = successNode.Attributes.GetNamedItem("sdesc").Value; //Transaction status description.
                    string  resultCode        = successNode.Attributes.GetNamedItem("res").Value;   //Result Code
                    string  resultDesc        = successNode.Attributes.GetNamedItem("rdesc").Value; //Result Code description.
                    string  authCode          = successNode.Attributes.GetNamedItem("auth").Value;  //The Authorisation code returned by the acquirer (bank).
                    string  risk         = successNode.Attributes.GetNamedItem("risk").Value;       //X - NA, A - Authenticated, N - Not Authenticated This is a 2-character field containing a risk indicator for this transaction.
                    string  cardTypeCode = successNode.Attributes.GetNamedItem("ctype").Value;      //Card type code 0 - Unknown, 1 - Visa, 2 - MasterCard, 3 - Amex, 4 - Diners
                    return(new Transaction_Result
                    {
                        TransactionIndex = transactionID,
                        isApproved = status != "0" && status != "2",
                        hasServerError = false,
                        ApprovalCode = statusDesc,
                        ResultCode = resultCode,
                        ResultText = resultDesc,
                        ProcessorCode = authCode,
                        FullRequest = fullrequest,
                        FullResponse = xml.OuterXml
                    });
                }
                else
                {
                    string errorCode = errorNode.Attributes.GetNamedItem("ecode").Value;
                    string errorDesc = errorNode.Attributes.GetNamedItem("edesc").Value;

                    return(new Transaction_Result
                    {
                        isApproved = false,
                        hasServerError = false,
                        ErrorCode = errorCode,
                        ErrorText = errorDesc,
                    });
                }
            }
            catch (Exception ex)
            {
                return(new Transaction_Result
                {
                    isApproved = false,
                    hasServerError = true,
                    ErrorText = ex.Message
                });
            }
        }
示例#8
0
        public Batch_Sale_Recon_Result Sale_Recon(Batch_Sale_Recon_Details details)
        {
            var returnBatch = new Batch_Sale_Recon_Result();

            returnBatch.Batches = new List <Batch_Sale_Recon_Result_batch>();

            //string dummySubIDxml = "<subs><sub><subid>183</subid><comref>THECODEGRO</comref><adate>04072015</adate><records>15</records><amount>1932.30</amount><status>1</status><rbr>1234</rbr><rej_records>2</rej_records><rej_amount>310.94</rej_amount>";
            //dummySubIDxml += "<unpiad_records>0</unpiad_records><unpaid_amount>0.00</unpaid_amount><lunpaid_records>0</lunpaid_records><lunpaid_amount>0.00</lunpaid_amount><retamount>0.00</retamount><debitfee>0.00</debitfee>";
            //dummySubIDxml += "<unpaidfee>0.00</unpaidfee><apiprocessing>3</apiprocessing></sub></subs>";

            Dictionary <string, string> ValidationReqParams = new Dictionary <string, string>();

            ValidationReqParams.Add("f", "subi");
            ValidationReqParams.Add("p", "1");
            ValidationReqParams.Add("cref", cref);
            ValidationReqParams.Add("subid", details.TransactionIdentifier);

            var statusCheck = GatewayUtils.PostMultiPartXMLTransaction(URL, ValidationReqParams, new XmlDocument[] { }, cookieJar);
            var stat_xml    = new XmlDocument();

            stat_xml.LoadXml(statusCheck);

            var subs = stat_xml.SelectNodes("/subs/sub");

            if (subs.Count == 0)
            {
                return(returnBatch);
            }

            var apiProcessingNode = stat_xml.SelectNodes("/subs/sub/apiprocessing")[0];
            var apiProcessing     = int.Parse(apiProcessingNode.InnerText);

            var statusNode = stat_xml.SelectNodes("/subs/sub/status")[0];
            var status     = int.Parse(statusNode.InnerText);

            if (apiProcessing > 3)
            {
                returnBatch.Batches.Add(new Batch_Sale_Recon_Result_batch
                {
                    BatchIdentifier = details.TransactionIdentifier,
                    isBatchSuccess  = false,
                    lines           = new List <Batch_Sale_Recon_Result_batch_line>()
                });

                return(returnBatch);
            }

            if (status > 3)
            {
                returnBatch.Batches.Add(new Batch_Sale_Recon_Result_batch
                {
                    BatchIdentifier = details.TransactionIdentifier,
                    isBatchSuccess  = false,
                    lines           = new List <Batch_Sale_Recon_Result_batch_line>()
                });

                return(returnBatch);
            }

            if (status > 0)
            {
                //check cdv  0 Not done/Processing 3 Accepted 4 Rejected
                Dictionary <string, string> DebitsValidationReqParams = new Dictionary <string, string>();
                DebitsValidationReqParams.Add("f", "subid");
                DebitsValidationReqParams.Add("p", "1");
                DebitsValidationReqParams.Add("cref", cref);
                DebitsValidationReqParams.Add("subid", details.TransactionIdentifier);

                var debitCall = GatewayUtils.PostMultiPartXMLTransaction(URL, DebitsValidationReqParams, new XmlDocument[] { }, cookieJar);

                var debitXml = new XmlDocument();
                debitXml.LoadXml(debitCall);
                var debits = debitXml.SelectNodes("/sub/debit");


                var batch = new Batch_Sale_Recon_Result_batch
                {
                    BatchIdentifier = details.TransactionIdentifier,
                    isBatchSuccess  = true,
                    lines           = new List <Batch_Sale_Recon_Result_batch_line>()
                };

                returnBatch.Batches.Add(batch);

                foreach (XmlNode node in debits)
                {
                    var cdv = int.Parse(node.SelectNodes("cdv")[0].InnerText);

                    if (cdv == 3)
                    {
                        var debitstatus = int.Parse(node.SelectNodes("debitstatus")[0].InnerText);

                        if (debitstatus == 1 || debitstatus == 3 || debitstatus == 6 || debitstatus == 7)
                        {
                            batch.lines.Add(new Batch_Sale_Recon_Result_batch_line
                            {
                                Amount         = decimal.Parse(node.SelectNodes("amount")[0].InnerText),
                                isLineSuccess  = false,
                                LineError      = node.SelectNodes("hmessage")[0].InnerText,
                                LineIdentifier = node.SelectNodes("description")[0].InnerText
                            });
                        }
                    }

                    if (cdv == 4 || cdv == 99)
                    {
                        batch.lines.Add(new Batch_Sale_Recon_Result_batch_line
                        {
                            Amount         = decimal.Parse(node.SelectNodes("amount")[0].InnerText),
                            isLineSuccess  = false,
                            LineError      = node.SelectNodes("hmessage")[0].InnerText,
                            LineIdentifier = node.SelectNodes("description")[0].InnerText
                        });
                    }
                }

                return(returnBatch);
            }

            return(returnBatch);
        }
示例#9
0
        public Batch_Sale_Submit_Result Sale_Submit(Batch_Sale_Submit_Details details)
        {
            var RequestParams = new JavaScriptSerializer().Deserialize <Dictionary <string, string> >(details.RequestParams);

            var xml = new XmlDocument();

            xml.LoadXml(details.RequestFile);

            var result = GatewayUtils.PostMultiPartXMLTransaction(URL, RequestParams, new XmlDocument[] { xml }, cookieJar);

            var res_xml = new XmlDocument();

            res_xml.LoadXml(result);
            if (res_xml.FirstChild.NodeType == XmlNodeType.XmlDeclaration)
            {
                XmlDeclaration xmlDeclaration = (XmlDeclaration)res_xml.FirstChild;
                xmlDeclaration.Encoding = "UTF-16";
            }
            //*[@note]
            string errors       = "";
            bool   hasAuthError = false;

            XmlNodeList auth_nodes = res_xml.SelectNodes("/API/auth/*[@note]");

            foreach (XmlNode tag in auth_nodes)
            {
                var note = tag.Attributes["note"].Value.ToLower();
                if (note.Contains("invalid") || note.Contains("fail"))
                {
                    hasAuthError = true;
                    errors      += note;
                }
            }

            if (hasAuthError)
            {
                return(new Batch_Sale_Submit_Result
                {
                    isSubmitSuccess = false,
                    ErrorCode = "AUTH",
                    ErrorMessage = errors
                });
            }

            XmlNodeList nodes = res_xml.SelectNodes("/API/sub/*[@note]");

            foreach (XmlNode tag in nodes)
            {
                var note = tag.Attributes["note"].Value.ToLower();
                if (note.Contains("invalid") || note.Contains("fail"))
                {
                    errors += tag.Name + ": " + note + ",";
                }
            }

            if (errors.Length > 0)
            {
                errors.Remove(errors.Length - 1);
            }

            var adate    = res_xml.SelectNodes("/API/sub/adate")[0];
            var xml_node = res_xml.SelectNodes("/API/sub/xml")[0];
            var records  = res_xml.SelectNodes("/API/sub/records")[0];
            var amount   = res_xml.SelectNodes("/API/sub/amount")[0];
            var subid_S  = res_xml.SelectNodes("/API/sub/subid")[0];

            int subid = 0;

            int.TryParse(subid_S.InnerText, out subid);

            if (subid <= 0)
            {
                return(new Batch_Sale_Submit_Result
                {
                    RequestXml = details.RequestFile + "<params>" + details.RequestParams + "</params>",
                    ResponseXml = res_xml.InnerXml,
                    isSubmitSuccess = false,
                    ErrorMessage = errors,
                    TransactionIdentifier = subid.ToString()
                });
            }
            else
            {
                Dictionary <string, string> ValidationReqParams = new Dictionary <string, string>();
                ValidationReqParams.Add("f", "subi");
                ValidationReqParams.Add("p", "1");
                ValidationReqParams.Add("cref", cref);
                ValidationReqParams.Add("subid", subid.ToString());

                int i = 0;
                while (i < 3)
                {
                    //check validation status

                    var status   = GatewayUtils.PostMultiPartXMLTransaction(URL, ValidationReqParams, new XmlDocument[] { }, cookieJar);
                    var stat_xml = new XmlDocument();
                    stat_xml.LoadXml(status);

                    var apiProcessingNode = stat_xml.SelectNodes("/subs/sub/apiprocessing")[0];
                    var apiProcessing     = int.Parse(apiProcessingNode.InnerText);

                    if (apiProcessing < 3)
                    {
                        i++;
                    }
                    else
                    {
                        i = 3; //kill while loop
                        if (apiProcessing == 3)
                        {
                            return(new Batch_Sale_Submit_Result
                            {
                                RequestXml = details.RequestFile + "<params>" + details.RequestParams + "</params>",
                                ResponseXml = res_xml.InnerXml,
                                isSubmitSuccess = true,
                                ErrorMessage = subid_S.Attributes["note"].InnerText,
                                TransactionIdentifier = subid.ToString()
                            });
                        }
                        else
                        {
                            return(new Batch_Sale_Submit_Result
                            {
                                RequestXml = details.RequestFile + "<params>" + details.RequestParams + "</params>",
                                ResponseXml = res_xml.InnerXml,
                                isSubmitSuccess = false,
                                ErrorMessage = "Failed Validation",
                                TransactionIdentifier = subid.ToString()
                            });
                        }
                    }
                }


                return(new Batch_Sale_Submit_Result
                {
                    RequestXml = (details.RequestFile + "<params>" + details.RequestParams + "</params>").Replace("UTF-8", "UTF-16"),
                    ResponseXml = res_xml.InnerXml,
                    isSubmitSuccess = subid > 0,
                    ErrorMessage = "Validation took too long, success was assumed.",
                    TransactionIdentifier = subid.ToString()
                });
            }
        }
示例#10
0
        public Lookup3dSecure_Result Lookup3dSecure(Lookup3dSecure_Details details)
        {
            var result = new Lookup3dSecure_Result();

            if (paymentOptions.ThreeDSecure)
            {
                var stringPost = "";

                if (details.isPayment)
                {
                    stringPost += @"<form action='https://www.vcs.co.za/vvonline/vcspay.aspx' method='post' target='_self'>";
                    stringPost += @"<input type='hidden' name='p1' value='" + userID + "' >";
                    stringPost += @"<input type='hidden' name='p2' value='" + details.SaleData.ExtRef + "'>";
                    stringPost += @"<input type='hidden' name='p3' value='" + details.SaleData.ProductDescription + "' >";
                    stringPost += @"<input type='hidden' name='p4' value='" + details.SaleData.Amount.ToString("F2") + "' >";
                    stringPost += @"<input type='hidden' name='p5' value='" + details.SaleData.CurrencyCode + "' >";
                    if (!details.isOnceoff)
                    {
                        //stringPost += @"<input type='hidden' name='p6' value='U' >";
                        //stringPost += @"<input type='hidden' name='p7' value='" + "O" + "' >";
                        stringPost += @"<input type='hidden' name='p12' value='" + "N" + "' >";
                        stringPost += @"<input type='hidden' name='p13' value='" + "0" + "' >";
                        stringPost += @"<input type='hidden' name='RecurReference' value='" + details.ProviderToken + "'>"; //recur ref
                    }
                    stringPost += @"<input type='hidden' name='m_1' value='" + details.TransactionToken + "'>";             //transactionID
                    stringPost += @"<input type='hidden' name='m_2' value='" + details.ExternalIdentifier1 + "'>";          //extref - AKA BA AccountID
                    stringPost += @"<input type='hidden' name='m_3' value='" + details.ExternalIdentifier2 + "'>";          //payment method token
                    stringPost += @"<input type='hidden' name='m_4' value='" + details.ExternalIdentifier3 + "'>";          //customerID
                    stringPost += @"<input type='hidden' name='m_5' value='" + details.ExternalIdentifier4 + "'>";          //hash
                    stringPost += @"<input type='hidden' name='m_6' value='" + details.ExternalIdentifier5 + "'>";          //verify
                    stringPost += @"<input type='hidden' name='PaymentMethod' value='cc'>";
                    if (details.isOnceoff)
                    {
                        stringPost += @"<input type='hidden' name='CardNumber' value='" + details.SaleData.CardNumber + "'>";
                    }
                    stringPost += @"<input type='hidden' name='ExpiryDate' value='" + GatewayUtils.formatExpiryDateYYmm(details.SaleData.CardExpiryMonth, details.SaleData.CardExpiryYear) + "'>";
                    stringPost += @"<input type='hidden' name='CVV' value='" + details.SaleData.CardCCV + "'>";
                    stringPost += @"<input type='hidden' name='CardholderName' value='" + details.SaleData.CardHolderName + " " + details.SaleData.CardHolderLastName + "'>";
                    stringPost += @"<input type='submit' value='Proceed'>";
                    stringPost += @"</form>";
                }
                else
                {
                    stringPost += @"<form action='https://www.vcs.co.za/vvonline/vcspay.aspx' method='post' target='_self'>";
                    stringPost += @"<input type='hidden' name='p1' value='" + userID + "' >";
                    stringPost += @"<input type='hidden' name='p2' value='" + details.ProviderToken + "'>";
                    stringPost += @"<input type='hidden' name='p3' value='Enrollment' >";
                    stringPost += @"<input type='hidden' name='p4' value='1' >";
                    stringPost += @"<input type='hidden' name='IsRegistration' value='Y'>";
                    stringPost += @"<input type='hidden' name='m_1' value='" + details.TransactionToken + "'>";    //transactionID
                    stringPost += @"<input type='hidden' name='m_2' value='" + details.ExternalIdentifier1 + "'>"; //extref - AKA BA AccountID
                    stringPost += @"<input type='hidden' name='m_3' value='" + details.ExternalIdentifier2 + "'>"; //payment method token
                    stringPost += @"<input type='hidden' name='m_4' value='" + details.ExternalIdentifier3 + "'>"; //customerID
                    stringPost += @"<input type='hidden' name='m_5' value='" + details.ExternalIdentifier4 + "'>"; //hash
                    stringPost += @"<input type='hidden' name='m_6' value='" + details.ExternalIdentifier5 + "'>"; //verify
                    stringPost += @"<input type='hidden' name='PaymentMethod' value='cc'>";
                    stringPost += @"<input type='hidden' name='CardNumber' value='" + details.SaleData.CardNumber + "'>";
                    stringPost += @"<input type='hidden' name='ExpiryDate' value='" + GatewayUtils.formatExpiryDateYYmm(details.SaleData.CardExpiryMonth, details.SaleData.CardExpiryYear) + "'>";
                    if (!isTestMode) //put this here as VCS did not fix their testing sandbox bug but said we should omit in test mode
                    {
                        stringPost += @"<input type='hidden' name='CVV' value='" + details.SaleData.CardCCV + "'>";
                    }
                    stringPost += @"<input type='hidden' name='CardholderName' value='" + details.SaleData.CardHolderName + " " + details.SaleData.CardHolderLastName + "'>";
                    stringPost += @"<input type='submit' value='Proceed'>";
                    stringPost += @"</form>";
                }

                result.ThreeDSecurePost = stringPost;
            }

            return(result);
        }