protected PublicOrder PrepareOrder(PublicOrderContext publicOrderContext, PaymentDataHandler paymentHandler) { var newOrder = new PublicOrder() { OrderItems = new PublicOrderItem[0], CustomData = new PublicOrderCustomData[0] }; foreach (var handler in orderDataHandlers) { newOrder = handler.AmendOrder(newOrder, publicOrderContext); if (newOrder == null) { throw new InvalidOperationException("OrderDataHandler must return a non-null order from AmendOrder."); } } newOrder.PaymentMethod = paymentHandler.PaymentMethodType; // Only run the selected payment handler. newOrder = paymentHandler.AmendOrder(newOrder, publicOrderContext.PaymentData); if (newOrder == null) { throw new InvalidOperationException("PaymentDataHandler must return a non-null order from AmendOrder."); } return(newOrder); }
/// <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 PublicOrder and call CreateOrder in Atomia Billing Public Service. /// </summary> /// <param name="publicOrderContext">Order data</param> /// <param name="paymentHandler">Handler for customer's selected payment method</param> /// <returns>The order object returned from Atomia Billing Public Service</returns> public override PublicOrder CreateOrder(PublicOrderContext publicOrderContext, PaymentDataHandler paymentHandler) { var newOrder = PrepareOrder(publicOrderContext, paymentHandler); var createdOrder = BillingApi.CreateOrder(newOrder); if (createdOrder == null) { throw new InvalidOperationException("Order could not be created."); } if (this.auditLogger != null) { this.auditLogger.Log(AuditActionTypes.OrderCreated, string.Empty, createdOrder.CustomerId.ToString(), createdOrder.Email, createdOrder.Id.ToString(), null); } return(createdOrder); }
public abstract PublicOrder CreateOrder(PublicOrderContext publicOrderContext, PaymentDataHandler paymentHandler);
public override PublicOrder CreateOrder(PublicOrderContext publicOrderContext, PaymentDataHandler paymentHandler) { var newOrder = this.PrepareOrder(publicOrderContext, paymentHandler); this.AddCustomAttributes(newOrder); string token = string.Empty; var resellerRootDomain = this.GetResellerRootDomain(); var createdOrder = BillingApi.CreateOrderWithLoginToken(newOrder, resellerRootDomain, out token); if (createdOrder == null) { throw new InvalidOperationException("Order could not be created."); } urlProvider.SuccessUrl = GetTokenLoginUrl(createdOrder.Email, token); return(createdOrder); }
public override PublicOrder CreateOrder(PublicOrderContext publicOrderContext, PaymentDataHandler paymentHandler) { var newOrder = this.PrepareOrder(publicOrderContext, paymentHandler); this.AddCustomAttributes(newOrder); string token = string.Empty; var resellerRootDomain = this.GetResellerRootDomain(); var createdOrder = BillingApi.CreateOrderWithLoginToken(newOrder, resellerRootDomain, out token); if (createdOrder == null) { throw new InvalidOperationException("Order could not be created."); } string username = createdOrder.Email; if (AtomiaCommon.Instance.SeparateUsernameAndEmail) { // Check if the username should be different from the customers email address if (createdOrder.CustomData != null && createdOrder.CustomData.Any(c => c.Name.ToLowerInvariant() == "username") && !string.IsNullOrEmpty(createdOrder.CustomData.FirstOrDefault(c => c.Name.ToLowerInvariant() == "username").Value)) { username = createdOrder.CustomData.FirstOrDefault(c => c.Name.ToLowerInvariant() == "username").Value; } } urlProvider.SuccessUrl = GetTokenLoginUrl(username, token); return(createdOrder); }
/// <summary> /// Create PublicOrder and call CreateOrder in Atomia Billing Public Service. /// </summary> /// <param name="publicOrderContext">Order data</param> /// <param name="paymentHandler">Handler for customer's selected payment method</param> /// <returns>The order object returned from Atomia Billing Public Service</returns> public override PublicOrder CreateOrder(PublicOrderContext publicOrderContext, PaymentDataHandler paymentHandler) { var newOrder = PrepareOrderExistingCustomer(publicOrderContext, paymentHandler); var existingCustomerData = contactDataProvider.GetContactData(); if (existingCustomerData != null) { var contactData = existingCustomerData.GetContactData(); var customerData = (ExistingCustomerContactData)contactData.First(); var createdOrder = service.CreateOrderExistingCustomer(newOrder, customerData.Username, customerData.Password, customerData.CustomerNumber); if (createdOrder == null) { throw new InvalidOperationException("Order for existing customer could not be created."); } if (this.auditLogger != null) { this.auditLogger.Log(AuditActionTypes.OrderCreated, string.Empty, createdOrder.CustomerId.ToString(), customerData.Username, createdOrder.Id.ToString(), null); } return(createdOrder); } return(null); }
public override PublicOrder CreateOrder(PublicOrderContext publicOrderContext, PaymentDataHandler paymentHandler) { PublicOrder order = null; var existingCustomerData = existingCustomerProvider.GetContactData(); if (existingCustomerData != null) { order = existingCustomerOrderCreator.CreateOrder(publicOrderContext, paymentHandler); } else { order = simpleOrderCreator.CreateOrder(publicOrderContext, paymentHandler); } return(order); }