public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction transaction, PaymentData paymentData) { transaction.ReturnUrl = urlProvider.DefaultPaymentUrl; transaction = SetCancelUrl(transaction, urlProvider.CancelUrl); return(transaction); }
private ActionResult FinishPayment(PublicPaymentTransaction transaction) { billingApi.UpdatePaymentTransactionData( transaction.TransactionId, transaction.Status, transaction.StatusCode, transaction.StatusCodeDescription, transaction.Attributes.Select(a => new NameValue { Name = a.Name, Value = a.Value }).ToArray()); var finishedTransaction = billingApi.FinishPayment(transaction.TransactionId); if (finishedTransaction == null) { // error: transaction does not exist throw new ArgumentException("Transaction could not be finished."); } var status = finishedTransaction.Status; if (status.ToUpper() == "OK" || status.ToUpper() == "IN_PROGRESS") { return(Redirect(urlProvider.SuccessUrl)); } return(Redirect(urlProvider.FailureUrl)); }
public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction transaction, PaymentData paymentData) { transaction.ReturnUrl = urlProvider.DefaultPaymentUrl; transaction = SetCancelUrl(transaction, urlProvider.CancelUrl); return transaction; }
public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction transaction, PaymentData paymentData) { var form = paymentData.PaymentForm as CCPaymentForm; var attributes = new List <AttributeData>(transaction.Attributes); attributes.Add(new AttributeData { Name = "cc_number", Value = form.CardNumber }); attributes.Add(new AttributeData { Name = "cc_name", Value = form.CardOwner }); attributes.Add(new AttributeData { Name = "ccv", Value = form.CardSecurityCode }); // wrong abbreviation "ccv" is expected. attributes.Add(new AttributeData { Name = "expires_month", Value = form.ExpiresMonth.ToString() }); attributes.Add(new AttributeData { Name = "expires_year", Value = form.ExpiresYear.ToString() }); transaction.Attributes = attributes.ToArray(); transaction.ReturnUrl = urlProvider.DefaultPaymentUrl; transaction = SetCancelUrl(transaction, urlProvider.CancelUrl); return(transaction); }
/// <summary> /// Create PublicPaymentTransaction and call MakePayment in Atomia Billing Public Service. /// </summary> /// <param name="publicOrderContext">Order data</param> /// <param name="order">The order object returned from CreateOrder call in Atomia Billing Public Service</param> /// <param name="paymentHandler">Handler for customer's selected payment method</param> /// <returns>URL to redirect to for finishing or seeing result of payment transaction.</returns> public string CreatePaymentTransaction(PublicOrderContext publicOrderContext, PublicOrder order, PaymentDataHandler paymentHandler) { var paymentTransaction = new PublicPaymentTransaction { GuiPluginName = paymentHandler.Id, Attributes = new AttributeData[0], CurrencyCode = order.Currency, TransactionReference = order.Number, Amount = order.Total }; paymentTransaction = paymentHandler.AmendPaymentTransaction(paymentTransaction, publicOrderContext.PaymentData); if (paymentTransaction == null) { throw new InvalidOperationException("PaymentDataHandler must return a non-null payment transaction from AmendTransaction."); } foreach (var handler in transactionDataHandlers) { paymentTransaction = handler.AmendPaymentTransaction(paymentTransaction, publicOrderContext); if (paymentTransaction == null) { throw new InvalidOperationException("ExtraTransactionDataHandlers must return a non-null payment transaction from AmendTransaction."); } } PublicPaymentTransaction createdTransaction; try { createdTransaction = BillingApi.MakePayment(paymentTransaction); } catch (SoapException ex) { logger.LogException(ex, "MakePayment failed."); return urlProvider.FailureUrl; } if (createdTransaction.Status.ToUpper() == "IN_PROGRESS" && !string.IsNullOrEmpty(createdTransaction.RedirectUrl)) { return createdTransaction.RedirectUrl; } else if (createdTransaction.Status.ToUpper() == "OK") { return urlProvider.SuccessUrl; } else if (createdTransaction.Status.ToUpper() == "FRAUD_DETECTED" || createdTransaction.Status.ToUpper() == "FAILED") { return urlProvider.FailureUrl; } else { return createdTransaction.ReturnUrl; } }
/// <summary> /// Create PublicPaymentTransaction and call MakePayment in Atomia Billing Public Service. /// </summary> /// <param name="publicOrderContext">Order data</param> /// <param name="order">The order object returned from CreateOrder call in Atomia Billing Public Service</param> /// <param name="paymentHandler">Handler for customer's selected payment method</param> /// <returns>URL to redirect to for finishing or seeing result of payment transaction.</returns> public string CreatePaymentTransaction(PublicOrderContext publicOrderContext, PublicOrder order, PaymentDataHandler paymentHandler) { var paymentTransaction = new PublicPaymentTransaction { GuiPluginName = paymentHandler.Id, Attributes = new AttributeData[0], CurrencyCode = order.Currency, TransactionReference = order.Number, Amount = order.Total }; paymentTransaction = paymentHandler.AmendPaymentTransaction(paymentTransaction, publicOrderContext.PaymentData); if (paymentTransaction == null) { throw new InvalidOperationException("PaymentDataHandler must return a non-null payment transaction from AmendTransaction."); } foreach (var handler in transactionDataHandlers) { paymentTransaction = handler.AmendPaymentTransaction(paymentTransaction, publicOrderContext); if (paymentTransaction == null) { throw new InvalidOperationException("ExtraTransactionDataHandlers must return a non-null payment transaction from AmendTransaction."); } } PublicPaymentTransaction createdTransaction; try { createdTransaction = BillingApi.MakePayment(paymentTransaction); } catch (SoapException ex) { logger.LogException(ex, "MakePayment failed."); return(urlProvider.FailureUrl); } if (createdTransaction.Status.ToUpper() == "IN_PROGRESS" && !string.IsNullOrEmpty(createdTransaction.RedirectUrl)) { return(createdTransaction.RedirectUrl); } else if (createdTransaction.Status.ToUpper() == "OK") { return(urlProvider.SuccessUrl); } else if (createdTransaction.Status.ToUpper() == "FRAUD_DETECTED" || createdTransaction.Status.ToUpper() == "FAILED") { return(urlProvider.FailureUrl); } else { return(createdTransaction.ReturnUrl); } }
public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction transaction, PaymentData paymentData) { var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext, RouteTable.Routes); var path = urlHelper.Action("Confirm", "PayPal"); transaction.ReturnUrl = urlProvider.QualifiedUrl(path); transaction = SetCancelUrl(transaction, urlProvider.CancelUrl); return transaction; }
public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction transaction, PaymentData paymentData) { var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext, RouteTable.Routes); var path = urlHelper.Action("Confirm", "PayPal"); transaction.ReturnUrl = urlProvider.QualifiedUrl(path); transaction = SetCancelUrl(transaction, urlProvider.CancelUrl); return(transaction); }
/// <summary> /// Creates the payment transaction. /// </summary> /// <param name="controller">The controller.</param> /// <param name="order">The order.</param> /// <param name="paidAmount">The paid amount.</param> /// <param name="returnUrl">The return URL.</param> /// <param name="transaction">The transaction.</param> /// <returns>Success of creation.</returns> public static string CreatePaymentTransaction(Controller controller, OrderServiceReferences.AtomiaBillingPublicService.PublicOrder order, decimal paidAmount, string returnUrl, PublicPaymentTransaction transaction) { // set the return URL, if redirection outside our application is required List<string> tmpList = returnUrl.TrimStart('/').Split('/').ToList(); var currentUrl = controller.Url.RequestContext.HttpContext.Request.Url; string appUrl = currentUrl == null ? controller.HttpContext.Application["OrderApplicationRawURL"].ToString() : string.Format("{0}://{1}/", currentUrl.Scheme, currentUrl.Authority); if (appUrl.EndsWith(tmpList[0])) { tmpList.RemoveAt(0); } returnUrl = string.Empty; for (int i = 0; i < tmpList.Count; i++) { if (i < tmpList.Count - 1) { returnUrl += tmpList[i] + '/'; } else { returnUrl += tmpList[i]; } } transaction.ReturnUrl = appUrl.TrimEnd(new[] { '/' }) + '/' + returnUrl.TrimStart(new[] { '/' }); var service = GeneralHelper.GetPublicOrderService(controller.HttpContext.ApplicationInstance.Context); PublicPaymentTransaction returnedTransaction = service.MakePayment(transaction); if (returnedTransaction.Status.ToUpper() == "IN_PROGRESS" && !string.IsNullOrEmpty(returnedTransaction.RedirectUrl)) { return returnedTransaction.RedirectUrl; } if (returnedTransaction.Status.ToUpper() == "OK") { return string.Empty; } return returnedTransaction.Status.ToUpper() == "FRAUD_DETECTED" || returnedTransaction.Status.ToUpper() == "FAILED" ? controller.Url.Action("PaymentFailed") : transaction.ReturnUrl; }
/// <summary> /// Amend payment transaction with all request headers as custom attributes. /// </summary> public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction paymentTransaction, PublicOrderContext orderContext) { var attributes = new List<AttributeData>(paymentTransaction.Attributes); var request = orderContext.ExtraData.OfType<HttpRequestBase>().FirstOrDefault(); if (request != null) { foreach (var key in GuiPaymentPluginRequestHelper.RequestToCustomAttributes(request)) { attributes.Add(new AttributeData { Name = key.Key, Value = key.Value }); } } paymentTransaction.Attributes = attributes.ToArray(); return paymentTransaction; }
public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction transaction, PaymentData paymentData) { var form = paymentData.PaymentForm as CCPaymentForm; var attributes = new List<AttributeData>(transaction.Attributes); attributes.Add(new AttributeData { Name = "cc_number", Value = form.CardNumber }); attributes.Add(new AttributeData { Name = "cc_name", Value = form.CardOwner }); attributes.Add(new AttributeData { Name = "ccv", Value = form.CardSecurityCode }); // wrong abbreviation "ccv" is expected. attributes.Add(new AttributeData { Name = "expires_month", Value = form.ExpiresMonth.ToString() }); attributes.Add(new AttributeData { Name = "expires_year", Value = form.ExpiresYear.ToString() }); transaction.Attributes = attributes.ToArray(); transaction.ReturnUrl = urlProvider.DefaultPaymentUrl; transaction = SetCancelUrl(transaction, urlProvider.CancelUrl); return transaction; }
/// <summary> /// Amend payment transaction with all request headers as custom attributes. /// </summary> public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction paymentTransaction, PublicOrderContext orderContext) { var attributes = new List <AttributeData>(paymentTransaction.Attributes); var request = orderContext.ExtraData.OfType <HttpRequestBase>().FirstOrDefault(); if (request != null) { foreach (var key in GuiPaymentPluginRequestHelper.RequestToCustomAttributes(request)) { attributes.Add(new AttributeData { Name = key.Key, Value = key.Value }); } } paymentTransaction.Attributes = attributes.ToArray(); return(paymentTransaction); }
/// <summary> /// Amend payment transaction with payment profile attributes /// </summary> public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction paymentTransaction, PublicOrderContext orderContext) { var paymentData = orderContext.PaymentData; if (paymentData.SaveCcInfo) { var attributes = new List<AttributeData>(paymentTransaction.Attributes); attributes.Add(new AttributeData { Name = "cc_saveccinfo", Value = "true" }); if (paymentData.AutoPay) { attributes.Add(new AttributeData { Name = "cc_autopay", Value = "true" }); } paymentTransaction.Attributes = attributes.ToArray(); } return paymentTransaction; }
/// <summary> /// Helper to set "CancelUrl" custom attribute on payment transaction. /// </summary> /// <param name="paymentTransaction">The payment transaction to add cancel url to</param> /// <param name="cancelUrl">The cancel url to add</param> /// <returns>The amended payment transaction</returns> protected PublicPaymentTransaction SetCancelUrl(PublicPaymentTransaction paymentTransaction, string cancelUrl) { var cancelAttribute = paymentTransaction.Attributes.FirstOrDefault(item => item.Name == "CancelUrl"); if (cancelAttribute != null) { cancelAttribute.Value = cancelUrl; } else { var transactionAttributes = new List<AttributeData>(paymentTransaction.Attributes); transactionAttributes.Add(new AttributeData { Name = "CancelUrl", Value = cancelUrl }); paymentTransaction.Attributes = transactionAttributes.ToArray(); } return paymentTransaction; }
/// <summary> /// Helper to set "CancelUrl" custom attribute on payment transaction. /// </summary> /// <param name="paymentTransaction">The payment transaction to add cancel url to</param> /// <param name="cancelUrl">The cancel url to add</param> /// <returns>The amended payment transaction</returns> protected PublicPaymentTransaction SetCancelUrl(PublicPaymentTransaction paymentTransaction, string cancelUrl) { var cancelAttribute = paymentTransaction.Attributes.FirstOrDefault(item => item.Name == "CancelUrl"); if (cancelAttribute != null) { cancelAttribute.Value = cancelUrl; } else { var transactionAttributes = new List <AttributeData>(paymentTransaction.Attributes); transactionAttributes.Add(new AttributeData { Name = "CancelUrl", Value = cancelUrl }); paymentTransaction.Attributes = transactionAttributes.ToArray(); } return(paymentTransaction); }
/// <summary> /// Amend payment transaction with payment profile attributes /// </summary> public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction paymentTransaction, PublicOrderContext orderContext) { var paymentData = orderContext.PaymentData; if (paymentData.SaveCcInfo) { var attributes = new List <AttributeData>(paymentTransaction.Attributes); attributes.Add(new AttributeData { Name = "cc_saveccinfo", Value = "true" }); if (paymentData.AutoPay) { attributes.Add(new AttributeData { Name = "cc_autopay", Value = "true" }); } paymentTransaction.Attributes = attributes.ToArray(); } return(paymentTransaction); }
/// <summary> /// Finishes the payment. /// </summary> /// <param name="transaction">The transaction.</param> /// <returns>Action result.</returns> private ActionResult FinishPayment(PublicPaymentTransaction transaction) { PublicPaymentTransaction finishedTransaction = null; try { AtomiaBillingPublicService service = GeneralHelper.GetPublicOrderService(this.HttpContext.ApplicationInstance.Context); service.UpdatePaymentTransactionData( transaction.TransactionId, transaction.Status, transaction.StatusCode, transaction.StatusCodeDescription, transaction.Attributes.Select(a => new NameValue { Name = a.Name, Value = a.Value }).ToArray()); finishedTransaction = service.FinishPayment(transaction.TransactionId); } catch (Exception ex) { OrderPageLogger.LogOrderPageException(ex); } if (finishedTransaction == null) { // error: transaction does not exist throw new ArgumentException("Transcation could not be finished."); } CultureInfo locale = CultureInfo.CreateSpecificCulture("en-US"); return this.RedirectToAction( "Payment", "PublicOrder", new { amount = transaction.Amount.ToString(locale), transactionReference = finishedTransaction.TransactionReference, transactionReferenceType = 0, status = finishedTransaction.Status }); }
/// <summary> /// Fills the payment transaction for invoice. /// </summary> /// <param name="order">The order.</param> /// <param name="request">The request.</param> /// <param name="paidAmount">The paid amount.</param> /// <param name="paymentMethod">The payment method.</param> /// <returns>PaymentTransaction object</returns> public static PublicPaymentTransaction FillPaymentTransactionForOrder(OrderServiceReferences.AtomiaBillingPublicService.PublicOrder order, HttpRequestBase request, decimal paidAmount, string paymentMethod) { // Fill transaction var paymentTransaction = new PublicPaymentTransaction { GuiPluginName = paymentMethod }; List<AttributeData> attrData = new List<AttributeData>(); foreach (var key in GuiPaymentPluginRequestHelper.RequestToCustomAttributes(request)) { attrData.Add(new AttributeData { Name = key.Key, Value = key.Value }); } paymentTransaction.Attributes = attrData.ToArray(); paymentTransaction.CurrencyCode = order.Currency; paymentTransaction.TransactionReference = order.Number; paymentTransaction.Amount = paidAmount; if (paymentTransaction.Amount <= decimal.Zero) { throw new Exception(String.Format("Total:{0}, paidAmmount:{1}, OrderNumber:{2}", order.Total, paidAmount, order.Number)); } return paymentTransaction; }
public virtual PublicPaymentTransaction MakePayment(PublicPaymentTransaction paymentTransaction) { return(service.MakePayment(paymentTransaction)); }
/// <summary> /// Amend payment transaction with order data. /// </summary> /// <param name="paymentTransaction">The payment transaction to amend</param> /// <param name="orderContext">The order data</param> /// <returns>The amended transaction</returns> public abstract PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction paymentTransaction, PublicOrderContext orderContext);
/// <summary> /// Amend payment transaction with payment method specific attributes. /// Typical is to set ReturnUrl on transaction and add CancelUrl to attributes. /// </summary> /// <param name="transaction">The transaction to amend</param> public virtual PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction paymentTransaction, PaymentData paymentData) { return(paymentTransaction); }
public virtual PublicPaymentTransaction MakePayment(PublicPaymentTransaction paymentTransaction) { return service.MakePayment(paymentTransaction); }
/// <summary> /// Amend payment transaction with payment method specific attributes. /// Typical is to set ReturnUrl on transaction and add CancelUrl to attributes. /// </summary> /// <param name="transaction">The transaction to amend</param> public virtual PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction paymentTransaction, PaymentData paymentData) { return paymentTransaction; }
private ActionResult FinishPayment(PublicPaymentTransaction transaction) { billingApi.UpdatePaymentTransactionData( transaction.TransactionId, transaction.Status, transaction.StatusCode, transaction.StatusCodeDescription, transaction.Attributes.Select(a => new NameValue { Name = a.Name, Value = a.Value }).ToArray()); var finishedTransaction = billingApi.FinishPayment(transaction.TransactionId); if (finishedTransaction == null) { // error: transaction does not exist throw new ArgumentException("Transaction could not be finished."); } var status = finishedTransaction.Status; if (status.ToUpper() == "OK" || status.ToUpper() == "IN_PROGRESS") { return Redirect(urlProvider.SuccessUrl); } return Redirect(urlProvider.FailureUrl); }