public TransactionResult SubmitPaymentTransaction(CheckoutDetails details) { TransactionResult result = new TransactionResult(); // 1. Process date and time variables string transactionNumber = DateTime.Now.ToString(TransactionNumberFormat); // 2. Process E-Commerce variables transactionNumber = transactionNumber.Replace("[INVOICE_ID]", details[CheckoutKeys.InvoiceNumber]); // transaction is ok result.Succeed = true; // set transation id result.TransactionId = transactionNumber; // status code is empty result.StatusCode = String.Empty; // no response available result.RawResponse = "No response available"; // check payment approval setting if (AutoApprove) { result.TransactionStatus = TransactionStatus.Approved; } else { result.TransactionStatus = TransactionStatus.Pending; } // return result return(result); }
protected override void PreProcessCheckout(CheckoutDetails details) { // call base base.PreProcessCheckout(details); // set invoice number InvoiceId = details.GetInt32("merchant_order_id"); }
public TransactionResult SubmitPaymentTransaction(CheckoutDetails details) { TransactionResult result = new TransactionResult(); // 1. Process date and time variables string transactionNumber = DateTime.Now.ToString(TransactionNumberFormat); // 2. Process E-Commerce variables transactionNumber = transactionNumber.Replace("[INVOICE_ID]", details[CheckoutKeys.InvoiceNumber]); // transaction is ok result.Succeed = true; // set transation id result.TransactionId = transactionNumber; // status code is empty result.StatusCode = String.Empty; // no response available result.RawResponse = "No response available"; // check payment approval setting if (AutoApprove) result.TransactionStatus = TransactionStatus.Approved; else result.TransactionStatus = TransactionStatus.Pending; // return result return result; }
private void Process_IPN_Request(TransactionResult result, CheckoutDetails details) { result.RawResponse = ""; // build raw response foreach (string keyName in details.GetAllKeys()) { if (String.IsNullOrEmpty(keyName)) { continue; } // check for separator if (!String.IsNullOrEmpty(result.RawResponse) && !result.RawResponse.EndsWith("&")) { result.RawResponse += "&"; } result.RawResponse += keyName + "=" + details[keyName]; } // compare business account against email addres in response if (!String.Equals(details["receiver_email"], Business, StringComparison.InvariantCultureIgnoreCase)) { throw new Exception(BUSINESS_NOT_MATCH_MSG); } // validate whether response still genuine if (!IsResponseGenuine(result.RawResponse)) { throw new Exception(INVALID_RESPONSE_MSG); } // build tran id string transactionId = details["txn_id"]; // check payment status switch (details["payment_status"]) { case "Completed": case "Processed": result.Succeed = true; // store order details result.TransactionId = transactionId; result.TransactionStatus = TransactionStatus.Approved; break; case "Pending": result.Succeed = true; // store order details result.TransactionId = transactionId; result.TransactionStatus = TransactionStatus.Pending; break; default: result.Succeed = false; result.TransactionStatus = TransactionStatus.Declined; break; } }
public TransactionResult SubmitPaymentTransaction(CheckoutDetails details) { TransactionResult result = new TransactionResult(); // build raw response for 2CO string[] keys = details.GetAllKeys(); List <string> bunch = new List <string>(); // copy checkout details foreach (string key in keys) { bunch.Add(String.Concat(key, "=", details[key])); } // build raw 2CO response result.RawResponse = String.Join("|", bunch.ToArray()); // recognize credit card status switch (details[CREDIT_CARD_PROCESSED]) { case "Y": result.TransactionStatus = TransactionStatus.Approved; break; case "K": result.TransactionStatus = TransactionStatus.Pending; break; default: throw new Exception(CC_PROCESSED_ERROR_MSG); } // read order number string order_number = details["order_number"]; // check demo mode: set order number to 1 // according to 2Checkout documentation for demo transactions bool valid = false; // validate TCO key if (LiveMode) // do live validation { valid = ValidateKey(SecretWord, AccountSID, order_number, details[CheckoutKeys.Amount], details[KEY]); } else // do demo validation { valid = ValidateKey(SecretWord, AccountSID, "1", details[CheckoutKeys.Amount], details[KEY]); } // key validation failed if (!valid) { throw new ArgumentException(KEY_VALIDATION_FAILED_MSG); } // we are succeed copy order number result.TransactionId = order_number; // result.Succeed = true; // return result return(result); }
public TransactionResult SubmitPaymentTransaction(CheckoutDetails details) { //init result structure TransactionResult result = new TransactionResult(); // check is request genuine depending on the provider mode Process_IPN_Request(result, details); // return(result); }
internal static void DeserializeProfile(string propertyNames, string propertyValues, bool encrypted, CheckoutDetails details) { // Input format: // PROPERTY_NAME:S:START_INDEX:PROP_VALUE_LENGTH // if ((propertyNames != null && propertyValues != null) && details != null) { // try { // decrypt propertyNames = (encrypted) ? CryptoUtils.Decrypt(propertyNames) : propertyNames; // propertyValues = (encrypted) ? CryptoUtils.Decrypt(propertyValues) : propertyValues; // string[] names = propertyNames.Split(':'); // divide names length by 4 parts int count = names.Length / 4; // iterate through for (int i = 0; i < count; i++) { // get property name string keyName = names[i * 4]; // string keyValue = String.Empty; // calculate property value start index int startIndex = Int32.Parse(names[(i * 4) + 2], CultureInfo.InvariantCulture); // calculate property value length int length = Int32.Parse(names[(i * 4) + 3], CultureInfo.InvariantCulture); // ensure check property value not empty if (length != -1) { keyValue = propertyValues.Substring(startIndex, length); } // details[keyName] = keyValue; } } catch { } } }
public void RunPaymentQueue() { int resellerId = SecurityContext.User.UserId; // 1. load unpaid invoices List <Invoice> invoices = InvoiceController.GetUnpaidInvoices(resellerId); // TRACE TaskManager.Write("Running payment queue"); TaskManager.WriteParameter("Items found", invoices.Count); // 2. load payment profile for each customer foreach (Invoice invoice in invoices) { try { // load payment profile CheckoutDetails details = StorehouseController.GetPaymentProfileInternally(invoice.ContractId); // if (details != null) { // TRACE TaskManager.Write("Trying to submit payment"); TaskManager.WriteParameter("InvoiceID", invoice.InvoiceId); // 3. submit payment for each invoice if profile exists CheckoutResult result = PaymentGatewayController.CheckOut(invoice.ContractId, invoice.InvoiceId, PaymentMethod.CREDIT_CARD, details); // ERROR if (!result.Succeed) { TaskManager.WriteError("Payment failed"); TaskManager.WriteParameter("Result code", result.StatusCode); continue; } // OK TaskManager.Write("Payment OK"); } } catch (Exception ex) { TaskManager.WriteError(ex, "Payment failed"); } } }
internal static void SerializeProfile(ref string propertyNames, ref string propertyValues, bool encrypt, CheckoutDetails profile) { // names StringBuilder namesBuilder = new StringBuilder(); // string values StringBuilder valsBuilder = new StringBuilder(); // string[] allKeys = profile.GetAllKeys(); // foreach (string keyName in allKeys) { // int length = 0, position = 0; // get serialized property value string keyValue = profile[keyName]; // if (String.IsNullOrEmpty(keyValue)) { length = -1; } else { // length = keyValue.Length; // position = valsBuilder.Length; // valsBuilder.Append(keyValue); } // namesBuilder.Append(keyName + ":S:" + position.ToString(CultureInfo.InvariantCulture) + ":" + length.ToString(CultureInfo.InvariantCulture) + ":"); } // propertyNames = (encrypt) ? CryptoUtils.Encrypt(namesBuilder.ToString()) : namesBuilder.ToString(); // propertyValues = (encrypt) ? CryptoUtils.Encrypt(valsBuilder.ToString()) : valsBuilder.ToString(); }
public CheckoutResult CompleteCheckout(string contractId, int invoiceId, string methodName, CheckoutDetails details) { return(StorefrontController.CompleteCheckout(contractId, invoiceId, methodName, details)); }
/// <remarks/> public System.IAsyncResult BeginCompleteCheckout(string contractId, int invoiceId, string methodName, CheckoutDetails details, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("CompleteCheckout", new object[] { contractId, invoiceId, methodName, details}, callback, asyncState); }
public CheckoutResult CompleteCheckout(string contractId, int invoiceId, string methodName, CheckoutDetails details) { object[] results = this.Invoke("CompleteCheckout", new object[] { contractId, invoiceId, methodName, details}); return ((CheckoutResult)(results[0])); }
public static CheckoutResult CompleteCheckout(string contractId, int invoiceId, string methodName, CheckoutDetails details) { return EC.Services.Storefront.CompleteCheckout(contractId, invoiceId, methodName, details); }
/// <remarks/> public void CompleteCheckoutAsync(string contractId, int invoiceId, string methodName, CheckoutDetails details) { this.CompleteCheckoutAsync(contractId, invoiceId, methodName, details, null); }
public TransactionResult SubmitPaymentTransaction(CheckoutDetails details) { //init result structure TransactionResult result = new TransactionResult(); // check is request genuine depending on the provider mode Process_IPN_Request(result, details); // return result; }
private void Process_IPN_Request(TransactionResult result, CheckoutDetails details) { result.RawResponse = ""; // build raw response foreach (string keyName in details.GetAllKeys()) { if (String.IsNullOrEmpty(keyName)) continue; // check for separator if (!String.IsNullOrEmpty(result.RawResponse) && !result.RawResponse.EndsWith("&")) result.RawResponse += "&"; result.RawResponse += keyName + "=" + details[keyName]; } // compare business account against email addres in response if (!String.Equals(details["receiver_email"], Business, StringComparison.InvariantCultureIgnoreCase)) throw new Exception(BUSINESS_NOT_MATCH_MSG); // validate whether response still genuine if(!IsResponseGenuine(result.RawResponse)) throw new Exception(INVALID_RESPONSE_MSG); // build tran id string transactionId = details["txn_id"]; // check payment status switch(details["payment_status"]) { case "Completed": case "Processed": result.Succeed = true; // store order details result.TransactionId = transactionId; result.TransactionStatus = TransactionStatus.Approved; break; case "Pending": result.Succeed = true; // store order details result.TransactionId = transactionId; result.TransactionStatus = TransactionStatus.Pending; break; default: result.Succeed = false; result.TransactionStatus = TransactionStatus.Declined; break; } }
public static CheckoutResult CompleteCheckout(string contractId, int invoiceId, string methodName, CheckoutDetails details) { // return PaymentGatewayController.CheckOut(contractId, invoiceId, methodName, details); }
protected override void PreProcessCheckout(CheckoutDetails details) { // set invoice number InvoiceId = details.GetInt32("invoice"); }
/// <remarks/> public void SetPaymentProfileAsync(string contractId, CheckoutDetails profile, object userState) { if ((this.SetPaymentProfileOperationCompleted == null)) { this.SetPaymentProfileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSetPaymentProfileOperationCompleted); } this.InvokeAsync("SetPaymentProfile", new object[] { contractId, profile}, this.SetPaymentProfileOperationCompleted, userState); }
public CheckoutDetails GetCheckoutDetails() { CheckoutDetails info = new CheckoutDetails(); // info.Persistent = chkSaveDetails.Checked; // info[CheckoutKeys.IPAddress] = Request.UserHostAddress; // info[CheckoutKeys.CardNumber] = txtCreditCard.Text.Trim(); // info[CheckoutKeys.CardType] = ddlCardTypes.SelectedValue; // info[CheckoutKeys.VerificationCode] = txtVerificationCode.Text.Trim(); // info[CheckoutKeys.ExpireMonth] = ddlExpMonth.SelectedValue.Trim(); // info[CheckoutKeys.ExpireYear] = ddlExpYear.SelectedValue.Trim(); // info[CheckoutKeys.FirstName] = txtFirstName.Text.Trim(); // info[CheckoutKeys.LastName] = txtLastName.Text.Trim(); // info[CheckoutKeys.CustomerEmail] = txtEmail.Text.Trim(); // info[CheckoutKeys.CompanyName] = txtCompany.Text.Trim(); // info[CheckoutKeys.Address] = txtAddress.Text.Trim(); // info[CheckoutKeys.Zip] = txtPostalCode.Text.Trim(); // info[CheckoutKeys.City] = txtCity.Text.Trim(); // if (ddlCountryStates.Visible) info[CheckoutKeys.State] = ddlCountryStates.Text.Trim(); else info[CheckoutKeys.State] = txtCountryState.Text.Trim(); // info[CheckoutKeys.Country] = ddlCountry.SelectedValue.Trim(); // info[CheckoutKeys.Phone] = txtPhoneNumber.Text.Trim(); // info[CheckoutKeys.Fax] = txtFaxNumber.Text.Trim(); // if (phCardExt.Visible) { // info[CheckoutKeys.StartMonth] = ddlStartMonth.SelectedValue; // info[CheckoutKeys.StartYear] = ddlStartYear.SelectedValue; // info[CheckoutKeys.IssueNumber] = txtIssueNumber.Text.Trim(); } // return info; }
/// <remarks/> public void SetPaymentProfileAsync(string contractId, CheckoutDetails profile) { this.SetPaymentProfileAsync(contractId, profile, null); }
/// <remarks/> public System.IAsyncResult BeginSetPaymentProfile(string contractId, CheckoutDetails profile, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("SetPaymentProfile", new object[] { contractId, profile}, callback, asyncState); }
public void SetPaymentProfile(string contractId, CheckoutDetails profile) { this.Invoke("SetPaymentProfile", new object[] { contractId, profile}); }
public TransactionResult SubmitPaymentTransaction(CheckoutDetails details) { //init result structure TransactionResult ret = new TransactionResult(); //set up Request //instantiate DoDirectPaymentRequestType and RequestDetails objects DoDirectPaymentRequestType request = new DoDirectPaymentRequestType(); request.Version = PROCESSOR_VERSION; DoDirectPaymentRequestDetailsType requestDetails = new DoDirectPaymentRequestDetailsType(); request.DoDirectPaymentRequestDetails = requestDetails; //set payment action requestDetails.PaymentAction = PaymentActionCodeType.Sale; //set IP //requestDetails.IPAddress = Request.UserHostAddress; requestDetails.IPAddress = details[CheckoutKeys.IPAddress]; //set CreditCard info CreditCardDetailsType creditCardDetails = new CreditCardDetailsType(); requestDetails.CreditCard = creditCardDetails; creditCardDetails.CreditCardNumber = details[CheckoutKeys.CardNumber]; creditCardDetails.CreditCardType = (CreditCardTypeType)Enum.Parse(typeof(CreditCardTypeType), details[CheckoutKeys.CardType], true); creditCardDetails.CVV2 = details[CheckoutKeys.VerificationCode]; creditCardDetails.ExpMonth = Int32.Parse(details[CheckoutKeys.ExpireMonth]); creditCardDetails.ExpYear = Int32.Parse(details[CheckoutKeys.ExpireYear]); // Switch/Solo if (creditCardDetails.CreditCardType == CreditCardTypeType.Solo || creditCardDetails.CreditCardType == CreditCardTypeType.Switch) { creditCardDetails.StartMonth = Int32.Parse(details[CheckoutKeys.StartMonth]); creditCardDetails.StartYear = Int32.Parse(details[CheckoutKeys.StartYear]); creditCardDetails.IssueNumber = details[CheckoutKeys.IssueNumber]; } //set billing address PayerInfoType cardOwner = new PayerInfoType(); creditCardDetails.CardOwner = cardOwner; cardOwner.PayerName = new PersonNameType(); cardOwner.PayerName.FirstName = details[CheckoutKeys.FirstName]; cardOwner.PayerName.LastName = details[CheckoutKeys.LastName]; cardOwner.Address = new AddressType(); cardOwner.Address.Street1 = details[CheckoutKeys.Address]; //??? cardOwner.Address.Street2 = ""; cardOwner.Address.CityName = details[CheckoutKeys.City]; cardOwner.Address.StateOrProvince = details[CheckoutKeys.State]; cardOwner.Address.PostalCode = details[CheckoutKeys.Zip]; cardOwner.Address.CountrySpecified = true; cardOwner.Address.Country = (CountryCodeType)Enum.Parse(typeof(CountryCodeType), details[CheckoutKeys.Country], true); //set payment Details PaymentDetailsType paymentDetails = new PaymentDetailsType(); requestDetails.PaymentDetails = paymentDetails; paymentDetails.OrderTotal = new BasicAmountType(); //TODO: Add currency support paymentDetails.OrderTotal.currencyID = (CurrencyCodeType)Enum.Parse(typeof(CurrencyCodeType), details[CheckoutKeys.Currency]); //paymentDetails.OrderTotal.currencyID = CurrencyCodeType.USD; //No currency symbol. Decimal separator must be a period (.), and the thousands separator must be a comma (,) paymentDetails.OrderTotal.Value = details[CheckoutKeys.Amount]; DoDirectPaymentReq paymentRequest = new DoDirectPaymentReq(); paymentRequest.DoDirectPaymentRequest = request; //FINISH set up req //setup request Header, API credentials PayPalAPIAASoapBinding paypalInterface = new PayPalAPIAASoapBinding(); UserIdPasswordType user = new UserIdPasswordType(); //set api credentials - username, password, signature user.Username = Username; user.Password = Password; user.Signature = Signature; // setup service url paypalInterface.Url = ServiceUrl; paypalInterface.RequesterCredentials = new CustomSecurityHeaderType(); paypalInterface.RequesterCredentials.Credentials = user; //make call return response DoDirectPaymentResponseType paymentResponse = new DoDirectPaymentResponseType(); paymentResponse = paypalInterface.DoDirectPayment(paymentRequest); //write response xml to the ret object ret.RawResponse = SerializeObject(paymentResponse); switch (paymentResponse.Ack) { case AckCodeType.Success: case AckCodeType.SuccessWithWarning: ret.Succeed = true; ret.TransactionId = paymentResponse.TransactionID; ret.TransactionStatus = TransactionStatus.Approved; break; default: // show errors if Ack is NOT Success ret.Succeed = false; ret.TransactionStatus = TransactionStatus.Declined; if (paymentResponse.Errors != null && paymentResponse.Errors.Length > 0) { ret.StatusCode = PayPalProKeys.ErrorPrefix + paymentResponse.Errors[0].ErrorCode; } break; } return ret; }
public void PickupReceivedTransactions() { TaskManager.Write("Start looking for transactions submitted"); // List<HandlerResponse> transactions = ServiceHandlerController.GetServiceHandlersResponsesByReseller(SecurityContext.User.UserId); // if (transactions.Count > 0) { XmlDocument xmldoc = new XmlDocument(); XmlElement root = xmldoc.CreateElement("Result"); XmlElement succeedNode = xmldoc.CreateElement("Succeed"); XmlElement failedNode = xmldoc.CreateElement("Failed"); root.AppendChild(succeedNode); root.AppendChild(failedNode); // List<HandlerResponse> succeedItems = new List<HandlerResponse>(); List<HandlerResponse> failedItems = new List<HandlerResponse>(); // TaskManager.Write("Found {0} transactions pending", transactions.Count.ToString()); foreach (HandlerResponse transaction in transactions) { XmlElement responseNode = xmldoc.CreateElement("Response"); responseNode.SetAttribute("ID", Convert.ToString(transaction.ResponseId)); // try { CheckoutDetails details = new CheckoutDetails(); // string[] dataPairs = transaction.TextResponse.Split('&'); foreach (string dataPair in dataPairs) { string[] data = dataPair.Split('='); if (data.Length >= 2) details[data[0]] = data[1]; } // CheckoutResult result = PaymentGatewayController.CheckOut(transaction.ContractId, transaction.InvoiceId, transaction.MethodName, details); // if (result.Succeed) { succeedNode.AppendChild(responseNode); succeedItems.Add(transaction); } else { responseNode.SetAttribute("Error", result.StatusCode); failedNode.AppendChild(responseNode); // transaction.ErrorMessage = result.StatusCode; failedItems.Add(transaction); } } catch (Exception ex) { // if (!failedItems.Contains(transaction)) { responseNode.SetAttribute("Error", ex.StackTrace); failedNode.AppendChild(responseNode); // transaction.ErrorMessage = ex.StackTrace; failedItems.Add(transaction); } // TaskManager.WriteError(ex); } } // peform transactions update ServiceHandlerController.UpdateServiceHandlersResponses(SecurityContext.User.UserId, root.InnerXml); } else { TaskManager.Write("No transactions found"); } TaskManager.Write("End looking for transactions submitted"); }
public TransactionResult SubmitPaymentTransaction(CheckoutDetails details) { TransactionResult result = new TransactionResult(); // build raw response for 2CO string[] keys = details.GetAllKeys(); List<string> bunch = new List<string>(); // copy checkout details foreach (string key in keys) { bunch.Add(String.Concat(key, "=", details[key])); } // build raw 2CO response result.RawResponse = String.Join("|", bunch.ToArray()); // recognize credit card status switch(details[CREDIT_CARD_PROCESSED]) { case "Y": result.TransactionStatus = TransactionStatus.Approved; break; case "K": result.TransactionStatus = TransactionStatus.Pending; break; default: throw new Exception(CC_PROCESSED_ERROR_MSG); } // read order number string order_number = details["order_number"]; // check demo mode: set order number to 1 // according to 2Checkout documentation for demo transactions bool valid = false; // validate TCO key if (LiveMode) // do live validation valid = ValidateKey(SecretWord, AccountSID, order_number, details[CheckoutKeys.Amount], details[KEY]); else // do demo validation valid = ValidateKey(SecretWord, AccountSID, "1", details[CheckoutKeys.Amount], details[KEY]); // key validation failed if (!valid) throw new ArgumentException(KEY_VALIDATION_FAILED_MSG); // we are succeed copy order number result.TransactionId = order_number; // result.Succeed = true; // return result return result; }
public void SetCheckoutDetails(CheckoutDetails details) { // setup controls first EnsureYearsLoaded(ddlExpYear); // EnsureCountriesLoaded(); // EnsureCountryStatesLoad(); // skip display values if (details == null) details = new CheckoutDetails(); // txtCreditCard.Text = details[CheckoutKeys.CardNumber]; // Utils.SelectListItem(ddlCardTypes, details[CheckoutKeys.CardType]); // txtVerificationCode.Text = details[CheckoutKeys.VerificationCode]; // Utils.SelectListItem(ddlExpYear, details[CheckoutKeys.ExpireYear]); // Utils.SelectListItem(ddlExpMonth, details[CheckoutKeys.ExpireMonth]); // txtFirstName.Text = details[CheckoutKeys.FirstName]; // txtLastName.Text = details[CheckoutKeys.LastName]; // txtEmail.Text = details[CheckoutKeys.CustomerEmail]; // txtCompany.Text = details[CheckoutKeys.CompanyName]; // txtAddress.Text = details[CheckoutKeys.Address]; // txtPostalCode.Text = details[CheckoutKeys.Zip]; // txtCity.Text = details[CheckoutKeys.City]; // Utils.SelectListItem(ddlCountry, details[CheckoutKeys.Country]); // if (ddlCountryStates.Visible) Utils.SelectListItem(ddlCountryStates, details[CheckoutKeys.State]); else txtCountryState.Text = details[CheckoutKeys.State]; // txtPhoneNumber.Text = details[CheckoutKeys.Phone]; // txtFaxNumber.Text = details[CheckoutKeys.Fax]; // if (phCardExt.Visible) { // EnsureYearsLoaded(ddlStartYear); // Utils.SelectListItem(ddlStartYear, details[CheckoutKeys.StartYear]); // Utils.SelectListItem(ddlStartMonth, details[CheckoutKeys.StartMonth]); // txtIssueNumber.Text = details[CheckoutKeys.IssueNumber]; } }
private void Process_PDT_Request(TransactionResult result, CheckoutDetails details) { }
public TransactionResult SubmitPaymentTransaction(CheckoutDetails details) { //init result structure TransactionResult ret = new TransactionResult(); //create request content string data = GetRequestData(details); // create webrequest instance HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(ServiceUrl); webRequest.Method = "POST"; webRequest.ContentLength = data.Length; webRequest.ContentType = "application/x-www-form-urlencoded"; // send service request StreamWriter sw = null; try { sw = new StreamWriter(webRequest.GetRequestStream()); sw.Write(data); } finally { if (sw != null) { sw.Close(); } } // read service response AIMResponse aimResponse = null; HttpWebResponse webResponse = null; try { // get response webResponse = (HttpWebResponse)webRequest.GetResponse(); // emit new response aimResponse = new AIMResponse(webResponse.GetResponseStream(), DELIMITER_CHAR); } finally { webResponse.Close(); webRequest.Abort(); } // copy raw service response ret.RawResponse = aimResponse.RawResponse; // read service response status switch (aimResponse[AIMField.ResponseCode]) { case "1": //This transaction has been approved. case "4": //This transaction is being held for review. // check MD5 signature if (!CheckResponseSignature(Username, MD5_Hash, aimResponse[AIMField.TransactionId], details[CheckoutKeys.Amount], aimResponse[AIMField.ResponseSignature])) { throw new Exception(MD5_INVALID_MSG); } // ret.Succeed = true; // ret.TransactionId = aimResponse[AIMField.TransactionId]; // mark transaction as a completed ret.TransactionStatus = TransactionStatus.Approved; // break; case "2": // This transaction has been declined. case "3": // There has been an error processing this transaction. // ret.StatusCode = String.Concat(AuthorizeNetKeys.ErrorPrefix, aimResponse[AIMField.ResponseCode], aimResponse[AIMField.ResponseReasonCode]); // ret.Succeed = false; // ret.TransactionStatus = TransactionStatus.Declined; // break; } // return result return(ret); }
public CheckoutResult CompleteCheckout(string contractId, int invoiceId, string methodName, CheckoutDetails details) { return StorefrontController.CompleteCheckout(contractId, invoiceId, methodName, details); }
private void AddRequestData(string key, StringBuilder sb, CheckoutDetails details) { AddRequestData(key, details[key], sb); }
/// <remarks/> public void CompleteCheckoutAsync(string contractId, int invoiceId, string methodName, CheckoutDetails details, object userState) { if ((this.CompleteCheckoutOperationCompleted == null)) { this.CompleteCheckoutOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCompleteCheckoutOperationCompleted); } this.InvokeAsync("CompleteCheckout", new object[] { contractId, invoiceId, methodName, details}, this.CompleteCheckoutOperationCompleted, userState); }
public void SetPaymentProfile(string contractId, CheckoutDetails profile) { StorehouseController.SetPaymentProfile(contractId, profile); }
private void Process_PDT_Request(TransactionResult result, CheckoutDetails details) { }
private void AddRequestData(string key, StringBuilder sb, CheckoutDetails details) { AddRequestData(key, details[key], sb); }
public static CheckoutResult CompleteCheckout(string contractId, int invoiceId, string methodName, CheckoutDetails details) { // return(PaymentGatewayController.CheckOut(contractId, invoiceId, methodName, details)); }
internal static CheckoutDetails GetPaymentProfileInternally(string contractId) { // CheckoutDetails details = null; // IDataReader reader = null; // try { // reader = EcommerceProvider.GetPaymentProfile(SecurityContext.User.UserId, contractId); // if (reader.Read()) { // details = new CheckoutDetails(); // string propertyNames = Convert.ToString(reader["PropertyNames"]); // string propertyValues = Convert.ToString(reader["PropertyValues"]); // deserialize payment newProfile SecurityUtils.DeserializeProfile(propertyNames, propertyValues, true, details); } } finally { if (reader != null) reader.Close(); } // return details; }
public void PickupReceivedTransactions() { TaskManager.Write("Start looking for transactions submitted"); // List <HandlerResponse> transactions = ServiceHandlerController.GetServiceHandlersResponsesByReseller(SecurityContext.User.UserId); // if (transactions.Count > 0) { XmlDocument xmldoc = new XmlDocument(); XmlElement root = xmldoc.CreateElement("Result"); XmlElement succeedNode = xmldoc.CreateElement("Succeed"); XmlElement failedNode = xmldoc.CreateElement("Failed"); root.AppendChild(succeedNode); root.AppendChild(failedNode); // List <HandlerResponse> succeedItems = new List <HandlerResponse>(); List <HandlerResponse> failedItems = new List <HandlerResponse>(); // TaskManager.Write("Found {0} transactions pending", transactions.Count.ToString()); foreach (HandlerResponse transaction in transactions) { XmlElement responseNode = xmldoc.CreateElement("Response"); responseNode.SetAttribute("ID", Convert.ToString(transaction.ResponseId)); // try { CheckoutDetails details = new CheckoutDetails(); // string[] dataPairs = transaction.TextResponse.Split('&'); foreach (string dataPair in dataPairs) { string[] data = dataPair.Split('='); if (data.Length >= 2) { details[data[0]] = data[1]; } } // CheckoutResult result = PaymentGatewayController.CheckOut(transaction.ContractId, transaction.InvoiceId, transaction.MethodName, details); // if (result.Succeed) { succeedNode.AppendChild(responseNode); succeedItems.Add(transaction); } else { responseNode.SetAttribute("Error", result.StatusCode); failedNode.AppendChild(responseNode); // transaction.ErrorMessage = result.StatusCode; failedItems.Add(transaction); } } catch (Exception ex) { // if (!failedItems.Contains(transaction)) { responseNode.SetAttribute("Error", ex.StackTrace); failedNode.AppendChild(responseNode); // transaction.ErrorMessage = ex.StackTrace; failedItems.Add(transaction); } // TaskManager.WriteError(ex); } } // peform transactions update ServiceHandlerController.UpdateServiceHandlersResponses(SecurityContext.User.UserId, root.InnerXml); } else { TaskManager.Write("No transactions found"); } TaskManager.Write("End looking for transactions submitted"); }
public static void SetPaymentProfile(string contractId, CheckoutDetails profile) { EC.Services.Storehouse.SetPaymentProfile(contractId, profile); }
public TransactionResult SubmitPaymentTransaction(CheckoutDetails details) { //init result structure TransactionResult ret = new TransactionResult(); //set up Request //instantiate DoDirectPaymentRequestType and RequestDetails objects DoDirectPaymentRequestType request = new DoDirectPaymentRequestType(); request.Version = PROCESSOR_VERSION; DoDirectPaymentRequestDetailsType requestDetails = new DoDirectPaymentRequestDetailsType(); request.DoDirectPaymentRequestDetails = requestDetails; //set payment action requestDetails.PaymentAction = PaymentActionCodeType.Sale; //set IP //requestDetails.IPAddress = Request.UserHostAddress; requestDetails.IPAddress = details[CheckoutKeys.IPAddress]; //set CreditCard info CreditCardDetailsType creditCardDetails = new CreditCardDetailsType(); requestDetails.CreditCard = creditCardDetails; creditCardDetails.CreditCardNumber = details[CheckoutKeys.CardNumber]; creditCardDetails.CreditCardType = (CreditCardTypeType)Enum.Parse(typeof(CreditCardTypeType), details[CheckoutKeys.CardType], true); creditCardDetails.CVV2 = details[CheckoutKeys.VerificationCode]; creditCardDetails.ExpMonth = Int32.Parse(details[CheckoutKeys.ExpireMonth]); creditCardDetails.ExpYear = Int32.Parse(details[CheckoutKeys.ExpireYear]); // Switch/Solo if (creditCardDetails.CreditCardType == CreditCardTypeType.Solo || creditCardDetails.CreditCardType == CreditCardTypeType.Switch) { creditCardDetails.StartMonth = Int32.Parse(details[CheckoutKeys.StartMonth]); creditCardDetails.StartYear = Int32.Parse(details[CheckoutKeys.StartYear]); creditCardDetails.IssueNumber = details[CheckoutKeys.IssueNumber]; } //set billing address PayerInfoType cardOwner = new PayerInfoType(); creditCardDetails.CardOwner = cardOwner; cardOwner.PayerName = new PersonNameType(); cardOwner.PayerName.FirstName = details[CheckoutKeys.FirstName]; cardOwner.PayerName.LastName = details[CheckoutKeys.LastName]; cardOwner.Address = new AddressType(); cardOwner.Address.Street1 = details[CheckoutKeys.Address]; //??? cardOwner.Address.Street2 = ""; cardOwner.Address.CityName = details[CheckoutKeys.City]; cardOwner.Address.StateOrProvince = details[CheckoutKeys.State]; cardOwner.Address.PostalCode = details[CheckoutKeys.Zip]; cardOwner.Address.CountrySpecified = true; cardOwner.Address.Country = (CountryCodeType)Enum.Parse(typeof(CountryCodeType), details[CheckoutKeys.Country], true); //set payment Details PaymentDetailsType paymentDetails = new PaymentDetailsType(); requestDetails.PaymentDetails = paymentDetails; paymentDetails.OrderTotal = new BasicAmountType(); //TODO: Add currency support paymentDetails.OrderTotal.currencyID = (CurrencyCodeType)Enum.Parse(typeof(CurrencyCodeType), details[CheckoutKeys.Currency]); //paymentDetails.OrderTotal.currencyID = CurrencyCodeType.USD; //No currency symbol. Decimal separator must be a period (.), and the thousands separator must be a comma (,) paymentDetails.OrderTotal.Value = details[CheckoutKeys.Amount]; DoDirectPaymentReq paymentRequest = new DoDirectPaymentReq(); paymentRequest.DoDirectPaymentRequest = request; //FINISH set up req //setup request Header, API credentials PayPalAPIAASoapBinding paypalInterface = new PayPalAPIAASoapBinding(); UserIdPasswordType user = new UserIdPasswordType(); //set api credentials - username, password, signature user.Username = Username; user.Password = Password; user.Signature = Signature; // setup service url paypalInterface.Url = ServiceUrl; paypalInterface.RequesterCredentials = new CustomSecurityHeaderType(); paypalInterface.RequesterCredentials.Credentials = user; //make call return response DoDirectPaymentResponseType paymentResponse = new DoDirectPaymentResponseType(); paymentResponse = paypalInterface.DoDirectPayment(paymentRequest); //write response xml to the ret object ret.RawResponse = SerializeObject(paymentResponse); switch (paymentResponse.Ack) { case AckCodeType.Success: case AckCodeType.SuccessWithWarning: ret.Succeed = true; ret.TransactionId = paymentResponse.TransactionID; ret.TransactionStatus = TransactionStatus.Approved; break; default: // show errors if Ack is NOT Success ret.Succeed = false; ret.TransactionStatus = TransactionStatus.Declined; if (paymentResponse.Errors != null && paymentResponse.Errors.Length > 0) { ret.StatusCode = PayPalProKeys.ErrorPrefix + paymentResponse.Errors[0].ErrorCode; } break; } return(ret); }
protected virtual void PreProcessCheckout(CheckoutDetails details) { }
private string GetRequestData(CheckoutDetails details) { StringBuilder sb = new StringBuilder(); AddRequestData(CheckoutKeys.CardNumber, AuthorizeNetKeys.CardNumber, sb, details); AddRequestData(CheckoutKeys.VerificationCode, AuthorizeNetKeys.VerificationCode, sb, details); // expire date string expireDate = String.Concat(details[CheckoutKeys.ExpireMonth], details[CheckoutKeys.ExpireYear]); AddRequestData(AuthorizeNetKeys.ExpirationDate, expireDate, sb); AddRequestData(CheckoutKeys.Amount, AuthorizeNetKeys.Amount, sb, details); //TODO: Add currency support AddRequestData(CheckoutKeys.Currency, AuthorizeNetKeys.CurrencyCode, sb, details); AddRequestData(CheckoutKeys.InvoiceNumber, AuthorizeNetKeys.InvoiceNumber, sb, details); AddRequestData(CheckoutKeys.ContractNumber, AuthorizeNetKeys.TransDescription, sb, details); AddRequestData(CheckoutKeys.FirstName, AuthorizeNetKeys.FirstName, sb, details); AddRequestData(CheckoutKeys.LastName, AuthorizeNetKeys.LastName, sb, details); // email is shipping AddRequestData(CheckoutKeys.CustomerEmail, AuthorizeNetKeys.CustomerEmail, sb, details); AddRequestData(CheckoutKeys.Address, AuthorizeNetKeys.Address, sb, details); AddRequestData(CheckoutKeys.Zip, AuthorizeNetKeys.Zip, sb, details); AddRequestData(CheckoutKeys.City, AuthorizeNetKeys.City, sb, details); AddRequestData(CheckoutKeys.State, AuthorizeNetKeys.State, sb, details); AddRequestData(CheckoutKeys.Country, AuthorizeNetKeys.Country, sb, details); AddRequestData(CheckoutKeys.Phone, AuthorizeNetKeys.Phone, sb, details); AddRequestData(CheckoutKeys.Fax, AuthorizeNetKeys.Fax, sb, details); AddRequestData(CheckoutKeys.CustomerId, AuthorizeNetKeys.CustomerId, sb, details); AddRequestData(CheckoutKeys.IPAddress, AuthorizeNetKeys.IPAddress, sb, details); // shipping information AddRequestData(CheckoutKeys.ShipToFirstName, AuthorizeNetKeys.ShipToFirstName, sb, details); AddRequestData(CheckoutKeys.ShipToLastName, AuthorizeNetKeys.ShipToLastName, sb, details); AddRequestData(CheckoutKeys.ShipToCompany, AuthorizeNetKeys.ShipToCompany, sb, details); AddRequestData(CheckoutKeys.ShipToZip, AuthorizeNetKeys.ShipToZip, sb, details); AddRequestData(CheckoutKeys.ShipToAddress, AuthorizeNetKeys.ShipToAddress, sb, details); AddRequestData(CheckoutKeys.ShipToCity, AuthorizeNetKeys.ShipToCity, sb, details); AddRequestData(CheckoutKeys.ShipToState, AuthorizeNetKeys.ShipToState, sb, details); AddRequestData(CheckoutKeys.ShipToCountry, AuthorizeNetKeys.ShipToCountry, sb, details); // service settings // copy account username AddRequestData(AuthorizeNetKeys.Account, Username, sb); // copy response delimiter char AddRequestData(AuthorizeNetKeys.DelimiterChar, DELIMITER_CHAR.ToString(), sb); // copy transaction key AddRequestData(AuthorizeNetKeys.TransactionKey, TransactionKey, sb); // copy send confirmation flag & merchant email if (SendConfirmation) { AddRequestData(AuthorizeNetKeys.MerchantEmail, MerchantEmail, sb); AddRequestData(AuthorizeNetKeys.SendConfirmation, "TRUE", sb); } else { AddRequestData(AuthorizeNetKeys.SendConfirmation, "FALSE", sb); } // copy API version AddRequestData(AuthorizeNetKeys.Version, API_VERSION, sb); // copy demo mode flag if (!LiveMode) { AddRequestData(AuthorizeNetKeys.DemoMode, "TRUE", sb); } // copy payment method AddRequestData(AuthorizeNetKeys.PaymentMethod, PAYMENT_METHOD, sb); // copy transaction type AddRequestData(AuthorizeNetKeys.TransactType, TRANSACTION_TYPE, sb); // copy delim data flag AddRequestData(AuthorizeNetKeys.DelimData, "TRUE", sb); // copy relay response flag AddRequestData(AuthorizeNetKeys.RelayResponse, "FALSE", sb); // return result return(sb.ToString()); }
protected virtual void ProcessCheckout(string methodName, CheckoutDetails details) { try { PreProcessCheckout(details); // perform order payment CheckoutResult result = StorefrontHelper.CompleteCheckout(details[contractKey], invoiceId, methodName, details); // post process order result PostProcessCheckout(result); } catch (Exception ex) { // Output error message into the trace Trace.Write("ECOMMERCE", "COMPLETE_CHECKOUT_ERROR", ex); // display raw stack trace in case of error Response.Write(PortalUtils.GetSharedLocalizedString("Ecommerce", "Error.CHECKOUT_GENERAL_FAILURE")); } }
/// <summary> /// Performs checkout operation /// </summary> /// <param name="spaceId">Space.</param> /// <param name="gatewayId">Gateway.</param> /// <param name="invoiceId">Invoice.</param> /// <param name="details">Array of parameters.</param> /// <returns>Checkout result object.</returns> public static CheckoutResult CheckOut(string contractId, int invoiceId, string methodName, CheckoutDetails details) { CheckoutResult result = new CheckoutResult(); try { Contract contractInfo = ContractSystem.ContractController.GetContract(contractId); // impersonate ContractSystem.ContractController.ImpersonateAsContractReseller(contractInfo); // TRACE ES.TaskManager.StartTask(TASK_SOURCE, CHECKOUT_TASK, methodName); ES.TaskManager.Write("Start accepting payment for invoice"); ES.TaskManager.WriteParameter("ContractID", contractId); ES.TaskManager.WriteParameter("InvoiceID", invoiceId); // get user details ContractAccount account = ContractSystem.ContractController.GetContractAccountSettings(contractId); // try to load plugin type and throw an exception if type not found IPaymentGatewayProvider provider = (IPaymentGatewayProvider)SystemPluginController.GetContractPaymentMethod( contractInfo, methodName); // add invoice details Invoice invoice = InvoiceController.GetCustomerInvoiceInternally(invoiceId); // append information for the provider details[CheckoutKeys.ContractNumber] = contractId; details[CheckoutKeys.Amount] = invoice.Total.ToString("0.00"); details[CheckoutKeys.InvoiceNumber] = invoice.InvoiceNumber; details[CheckoutKeys.Currency] = invoice.Currency; ES.TaskManager.Write("Submitting payment transaction"); // call checkout routine TransactionResult pgResult = provider.SubmitPaymentTransaction(details); // log provider response SystemPluginController.LogContractPayment(contractInfo, methodName, pgResult.RawResponse); // ERROR if (!pgResult.Succeed) { result.Succeed = false; result.StatusCode = pgResult.StatusCode; // ES.TaskManager.WriteError("Transaction failed"); ES.TaskManager.WriteParameter("StatusCode", result.StatusCode); ES.TaskManager.WriteParameter("RawResponse", pgResult.RawResponse); // EXIT return(result); } // OK ES.TaskManager.Write("Transaction is OK"); // check whether the transaction already exists CustomerPayment tran = StorehouseController.LookupForTransaction(pgResult.TransactionId); // lookup for pending transaction if (tran == null) { // add payment record result.PaymentId = StorehouseController.AddCustomerPayment(contractId, invoice.InvoiceId, pgResult.TransactionId, invoice.Total, invoice.Currency, methodName, pgResult.TransactionStatus); // ERROR if (result.PaymentId < 1) { result.Succeed = false; result.StatusCode = result.PaymentId.ToString(); // ES.TaskManager.WriteError("Could not add customer payment record to the db"); ES.TaskManager.WriteParameter("ResultCode", result.StatusCode); // EXIT return(result); } } // if transaction is already submitted just update it's status if (tran != null) { StorehouseController.UpdateTransactionStatus(tran.PaymentId, pgResult.TransactionStatus); } // OK result.Succeed = true; // ensure user requests to persist his payment details for credit card if (details.Persistent && methodName == PaymentMethod.CREDIT_CARD) { StorehouseController.SetPaymentProfile(contractId, details); } } catch (Exception ex) { result.Succeed = false; result.StatusCode = GENERAL_FAILURE; // ES.TaskManager.WriteError(ex); } finally { ES.TaskManager.CompleteTask(); } // EXIT return(result); }
protected virtual void ServeProcessorResponse() { // create an instance CheckoutDetails orderDetails = new CheckoutDetails(); // copy whole request keys foreach (string keyName in Request.Form.AllKeys) { orderDetails[keyName] = Request.Form[keyName]; } // check target_site variable if (!String.IsNullOrEmpty(orderDetails[CheckoutFormParams.TARGET_SITE])) redirectUrl = orderDetails[CheckoutFormParams.TARGET_SITE]; else redirectUrl = EcommerceSettings.AbsoluteAppPath; // process checkout details ProcessCheckout(methodName, orderDetails); }
/// <summary> /// Performs checkout operation /// </summary> /// <param name="spaceId">Space.</param> /// <param name="gatewayId">Gateway.</param> /// <param name="invoiceId">Invoice.</param> /// <param name="details">Array of parameters.</param> /// <returns>Checkout result object.</returns> public static CheckoutResult CheckOut(string contractId, int invoiceId, string methodName, CheckoutDetails details) { CheckoutResult result = new CheckoutResult(); try { Contract contractInfo = ContractSystem.ContractController.GetContract(contractId); // impersonate ContractSystem.ContractController.ImpersonateAsContractReseller(contractInfo); // TRACE ES.TaskManager.StartTask(TASK_SOURCE, CHECKOUT_TASK, methodName); ES.TaskManager.Write("Start accepting payment for invoice"); ES.TaskManager.WriteParameter("ContractID", contractId); ES.TaskManager.WriteParameter("InvoiceID", invoiceId); // get user details ContractAccount account = ContractSystem.ContractController.GetContractAccountSettings(contractId); // try to load plugin type and throw an exception if type not found IPaymentGatewayProvider provider = (IPaymentGatewayProvider)SystemPluginController.GetContractPaymentMethod( contractInfo, methodName); // add invoice details Invoice invoice = InvoiceController.GetCustomerInvoiceInternally(invoiceId); // append information for the provider details[CheckoutKeys.ContractNumber] = contractId; details[CheckoutKeys.Amount] = invoice.Total.ToString("0.00"); details[CheckoutKeys.InvoiceNumber] = invoice.InvoiceNumber; details[CheckoutKeys.Currency] = invoice.Currency; ES.TaskManager.Write("Submitting payment transaction"); // call checkout routine TransactionResult pgResult = provider.SubmitPaymentTransaction(details); // log provider response SystemPluginController.LogContractPayment(contractInfo, methodName, pgResult.RawResponse); // ERROR if (!pgResult.Succeed) { result.Succeed = false; result.StatusCode = pgResult.StatusCode; // ES.TaskManager.WriteError("Transaction failed"); ES.TaskManager.WriteParameter("StatusCode", result.StatusCode); ES.TaskManager.WriteParameter("RawResponse", pgResult.RawResponse); // EXIT return result; } // OK ES.TaskManager.Write("Transaction is OK"); // check whether the transaction already exists CustomerPayment tran = StorehouseController.LookupForTransaction(pgResult.TransactionId); // lookup for pending transaction if (tran == null) { // add payment record result.PaymentId = StorehouseController.AddCustomerPayment(contractId, invoice.InvoiceId, pgResult.TransactionId, invoice.Total, invoice.Currency, methodName, pgResult.TransactionStatus); // ERROR if (result.PaymentId < 1) { result.Succeed = false; result.StatusCode = result.PaymentId.ToString(); // ES.TaskManager.WriteError("Could not add customer payment record to the db"); ES.TaskManager.WriteParameter("ResultCode", result.StatusCode); // EXIT return result; } } // if transaction is already submitted just update it's status if (tran != null) StorehouseController.UpdateTransactionStatus(tran.PaymentId, pgResult.TransactionStatus); // OK result.Succeed = true; // ensure user requests to persist his payment details for credit card if (details.Persistent && methodName == PaymentMethod.CREDIT_CARD) StorehouseController.SetPaymentProfile(contractId, details); } catch (Exception ex) { result.Succeed = false; result.StatusCode = GENERAL_FAILURE; // ES.TaskManager.WriteError(ex); } finally { ES.TaskManager.CompleteTask(); } // EXIT return result; }
internal static void SetPaymentProfile(string contractId, CheckoutDetails newProfile) { try { TaskManager.StartTask(SystemTasks.SOURCE_ECOMMERCE, SystemTasks.TASK_SET_PAYMENT_PROFILE); TaskManager.WriteParameter(SystemTaskParams.PARAM_CONTRACT, contractId); // string propertyNames = String.Empty, propertyValues = String.Empty; // cleanup newProfile newProfile.Remove(CheckoutKeys.Amount); // newProfile.Remove(CheckoutKeys.ContractNumber); // newProfile.Remove(CheckoutKeys.InvoiceNumber); // newProfile.Remove(CheckoutKeys.Currency); // newProfile.Remove(CheckoutKeys.IPAddress); #region Ensure CC number hasn't changed and will be save properly // Load original profile data CheckoutDetails oldProfile = GetPaymentProfileInternally(contractId); if (oldProfile != null) { // string newCc = newProfile[CheckoutKeys.CardNumber]; string oldCcShadow = BuildShadowCcNumber(oldProfile[CheckoutKeys.CardNumber], BUILD_SHADOW_CC_START, BUILD_SHADOW_CC_END); // if (String.Equals(newCc, oldCcShadow, StringComparison.InvariantCultureIgnoreCase)) newProfile[CheckoutKeys.CardNumber] = oldProfile[CheckoutKeys.CardNumber]; } #endregion // SecurityUtils.SerializeProfile(ref propertyNames, ref propertyValues, true, newProfile); // ensure newProfile serialized if (!String.IsNullOrEmpty(propertyNames) && !String.IsNullOrEmpty(propertyValues)) { EcommerceProvider.SetPaymentProfile(SecurityContext.User.UserId, contractId, propertyNames, propertyValues); } } catch (Exception ex) { TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }