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 }); }
// 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); } } }
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 }); } }
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 }); } }
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 }); } }
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); }
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() }); } }
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); }