Example #1
0
        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");
		}
Example #3
0
		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;
		}
Example #4
0
        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;
            }
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }
Example #7
0
 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");
                }
            }
        }
Example #9
0
        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();
        }
Example #10
0
 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]));
 }
Example #13
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);
		}
Example #18
0
		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");
		}
Example #26
0
		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)
		{

		}
Example #29
0
        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);
 }
Example #31
0
 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);
 }
Example #34
0
 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");
        }
Example #39
0
		public static void SetPaymentProfile(string contractId, CheckoutDetails profile)
		{
			EC.Services.Storehouse.SetPaymentProfile(contractId, profile);
		}
Example #40
0
        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);
        }
Example #41
0
		protected virtual void PreProcessCheckout(CheckoutDetails details)
		{
		}
Example #42
0
        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());
        }
Example #43
0
		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);
        }
Example #45
0
		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();
            }
        }