public void PostProcessPaymentTest_CallbackSuccessInvalidTransaction_PaymentNotProcessed() { var responseMessage = "Invalid transaction"; var checkoutService = new Mock <IHelcimCheckoutService>(); var paymentService = new Mock <IHelcimPaymentService>(); paymentService.Setup(x => x.GetTransaction(It.IsAny <HelcimTransactionRequest>())).Returns((HelcimTransactionRequest request) => new HelcimPaymentResponse() { ResponseMessage = responseMessage }); var paymentMethod = new HelcimCheckoutPaymentMethod(checkoutService.Object, s => paymentService.Object); paymentMethod.Settings = GetTestSettings(""); var context = new PostProcessPaymentEvaluationContext() { Payment = new PaymentIn { Transactions = new List <PaymentGatewayTransaction>() }, Parameters = new NameValueCollection() { { "response", "1" } } }; var result = paymentMethod.PostProcessPayment(context); Assert.False(result.IsSuccess); Assert.Equal(responseMessage, result.ErrorMessage); }
private PostProcessPaymentResult NewRegisterKlarnaOrder(PostProcessPaymentEvaluationContext context) { var retVal = new PostProcessPaymentResult(); var connector = ConnectorFactory.Create( AppKey, AppSecret, Client.TestBaseUrl); Client client = new Client(connector); var order = client.NewOrder(context.OuterId); OrderData orderData = order.Fetch(); if (orderData.Status != "CAPTURED") { var capture = client.NewCapture(order.Location); CaptureData captureData = new CaptureData() { CapturedAmount = orderData.OrderAmount, Description = "All order items is shipped", OrderLines = orderData.OrderLines }; capture.Create(captureData); orderData = order.Fetch(); } retVal.IsSuccess = orderData.Status == "CAPTURED"; retVal.NewPaymentStatus = retVal.IsSuccess ? PaymentStatus.Paid : PaymentStatus.Pending; retVal.OrderId = context.Order.Id; return(retVal); }
public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context) { var retVal = new PostProcessPaymentResult(); var localization = GetLocalization(context.Order.Currency.ToString(), null); retVal = NewRegisterKlarnaOrder(context); return(retVal); }
public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context) { var result = new PostProcessPaymentResult(); var status = GetParamValue(context.Parameters, "status"); //possible values: error, success var responseMessage = GetParamValue(context.Parameters, "responseMessage"); var transactionId = GetParamValue(context.Parameters, _transactionParamName); context.Payment.OuterId = context.OuterId; if (status.EqualsInvariant("success") && IsSale) { var captureResult = CaptureProcessPayment(new CaptureProcessPaymentEvaluationContext { Payment = context.Payment, Order = context.Order, Parameters = context.Parameters }); if (captureResult.IsSuccess) { context.OuterId = transactionId; result.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Paid; context.Payment.IsApproved = true; context.Payment.CapturedDate = DateTime.UtcNow; result.IsSuccess = true; } } else if (status.EqualsInvariant("success")) { var transactionInfo = GetTransactionStatus(context.Payment.OuterId); context.Payment.Transactions.Add(new PaymentGatewayTransaction() { Note = "Transaction Info", ResponseData = transactionInfo.ResponseContent, Status = transactionInfo.ResponseMessage, ResponseCode = transactionInfo.ResponseCode, ProcessError = transactionInfo.ErrorMessage, CurrencyCode = context.Order.Currency, Amount = context.Order.Sum }); result.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Authorized; context.Payment.OuterId = result.OuterId = context.OuterId; context.Payment.AuthorizedDate = DateTime.UtcNow; result.IsSuccess = true; } else { var errorMessage = GetParamValue(context.Parameters, "errorMessage"); result.ErrorMessage = $"Order was not created. {errorMessage}"; } result.OrderId = context.Order.Id; return(result); }
private PostProcessPaymentResult OldRegisterKlarnaOrder(PostProcessPaymentEvaluationContext context) { var retVal = new PostProcessPaymentResult(); Uri resourceUri = new Uri(string.Format("{0}/{1}", _euroTestBaseUrl, context.OuterId)); var connector = Connector.Create(AppSecret); Order order = new Order(connector, resourceUri) { ContentType = _contentType }; order.Fetch(); var status = order.GetValue("status") as string; if (status == "checkout_complete") { var data = new Dictionary <string, object> { { "status", "created" } }; order.Update(data); order.Fetch(); status = order.GetValue("status") as string; } if (status == "created") { var reservation = order.GetValue("reservation") as string; if (!string.IsNullOrEmpty(reservation)) { Configuration configuration = new Configuration(Country.Code.SE, Language.Code.SV, Currency.Code.SEK, Encoding.Sweden) { Eid = Convert.ToInt32(AppKey), Secret = AppSecret, IsLiveMode = false }; Api.Api api = new Api.Api(configuration); var response = api.Activate(reservation); order.Fetch(); var klarnaCart = order.GetValue("cart") as JObject; } } retVal.IsSuccess = status == "created"; retVal.NewPaymentStatus = retVal.IsSuccess ? PaymentStatus.Paid : PaymentStatus.Pending; retVal.OrderId = context.Order.Id; return(retVal); }
private PostProcessPaymentResult PostProcessKlarnaOrder(PostProcessPaymentEvaluationContext context) { var retVal = new PostProcessPaymentResult(); Uri resourceUri = new Uri(string.Format("{0}/{1}", _euroTestBaseUrl, context.OuterId)); var connector = Connector.Create(AppSecret); Order order = new Order(connector, resourceUri) { ContentType = _contentType }; order.Fetch(); var status = order.GetValue("status") as string; if (status == "checkout_complete") { var data = new Dictionary <string, object> { { "status", "created" } }; order.Update(data); order.Fetch(); status = order.GetValue("status") as string; } if (status == "created" && IsSale()) { var result = CaptureProcessPayment(new CaptureProcessPaymentEvaluationContext { Payment = context.Payment }); retVal.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Paid; context.Payment.OuterId = retVal.OuterId; context.Payment.IsApproved = true; context.Payment.CapturedDate = DateTime.UtcNow; retVal.IsSuccess = true; } else if (status == "created") { retVal.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Authorized; context.Payment.OuterId = retVal.OuterId = context.OuterId; context.Payment.AuthorizedDate = DateTime.UtcNow; retVal.IsSuccess = true; } else { retVal.ErrorMessage = "order not created"; } retVal.OrderId = context.Order.Id; return(retVal); }
public IHttpActionResult PostProcessPayment(webModel.PaymentCallbackParameters callback) { if (callback != null && callback.Parameters != null && callback.Parameters.Any(param => param.Key == "orderid")) { var orderId = callback.Parameters.First(param => param.Key == "orderid").Value; //some payment method require customer number to be passed and returned. First search customer order by number var order = _customerOrderService.GetByOrderNumber(orderId, CustomerOrderResponseGroup.Full); //if order not found by order number search by order id if (order == null) { order = _customerOrderService.GetById(orderId, CustomerOrderResponseGroup.Full); } var store = _storeService.GetById(order.StoreId); var parameters = new NameValueCollection(); foreach (var param in callback.Parameters) { parameters.Add(param.Key, param.Value); } var paymentMethod = store.PaymentMethods.Where(x => x.IsActive).FirstOrDefault(x => x.ValidatePostProcessRequest(parameters).IsSuccess); if (paymentMethod != null) { var paymentOuterId = paymentMethod.ValidatePostProcessRequest(parameters).OuterId; var payment = order.InPayments.FirstOrDefault(x => string.IsNullOrEmpty(x.OuterId) || x.OuterId == paymentOuterId); if (payment == null) { throw new NullReferenceException("appropriate paymentMethod not found"); } var context = new PostProcessPaymentEvaluationContext { Order = order, Payment = payment, Store = store, OuterId = paymentOuterId, Parameters = parameters }; var retVal = paymentMethod.PostProcessPayment(context); if (retVal != null) { _customerOrderService.Update(new CustomerOrder[] { order }); } return(Ok(retVal)); } } return(Ok(new PostProcessPaymentResult { ErrorMessage = "cancel payment" })); }
public IHttpActionResult PostProcessPayment(string orderId) { var order = _customerOrderService.GetById(orderId, CustomerOrderResponseGroup.Full); if (order == null) { throw new NullReferenceException("order"); } var store = _storeService.GetById(order.StoreId); var parameters = HttpContext.Current.Request.QueryString; var paymentMethod = store.PaymentMethods.Where(x => x.IsActive).FirstOrDefault(x => x.ValidatePostProcessRequest(parameters).IsSuccess); if (paymentMethod != null) { var paymentOuterId = paymentMethod.ValidatePostProcessRequest(HttpContext.Current.Request.QueryString).OuterId; var payment = order.InPayments.FirstOrDefault(x => x.OuterId == paymentOuterId); if (payment == null) { throw new NullReferenceException("payment"); } if (payment == null) { throw new NullReferenceException("appropriate paymentMethod not found"); } var context = new PostProcessPaymentEvaluationContext { Order = order, Payment = payment, Store = store, OuterId = paymentOuterId, Parameters = parameters }; var retVal = paymentMethod.PostProcessPayment(context); if (retVal != null) { _customerOrderService.Update(new CustomerOrder[] { order }); } return(Ok(retVal)); } return(Ok(new PostProcessPaymentResult { ErrorMessage = "cancel payment" })); }
public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context) { var transactionId = context.Parameters["transact"]; var retVal = new PostProcessPaymentResult(); retVal.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Paid; context.Payment.CapturedDate = DateTime.UtcNow; context.Payment.IsApproved = true; retVal.OuterId = context.Payment.OuterId = transactionId; context.Payment.AuthorizedDate = DateTime.UtcNow; retVal.OrderId = context.Order.Number; retVal.IsSuccess = ValidatePostProcessRequest(context.Parameters).IsSuccess; return(retVal); }
public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context) { var retVal = new PostProcessPaymentResult(); var localization = GetLocalization(context.Order.Currency.ToString(), null); if (localization.CountryName == "US" || localization.CountryName == "GB") { retVal = NewRegisterKlarnaOrder(context); } else { retVal = OldRegisterKlarnaOrder(context); } return(retVal); }
public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context) { var retVal = new PostProcessPaymentResult(); var service = new AdaptivePaymentsService(GetConfiguration()); var response = service.PaymentDetails(new PaymentDetailsRequest { payKey = context.OuterId, requestEnvelope = new RequestEnvelope { errorLanguage = "en_US" } }); if (response.status == "COMPLETED") { context.Payment.CapturedDate = DateTime.UtcNow; retVal.IsSuccess = context.Payment.IsApproved = true; retVal.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Paid; } else if (response.status == "INCOMPLETE" && response.status == "ERROR" && response.status == "REVERSALERROR") { if (response.error != null && response.error.Count > 0) { var sb = new StringBuilder(); foreach (var error in response.error) { sb.AppendLine(error.message); } retVal.ErrorMessage = sb.ToString(); } else { retVal.ErrorMessage = "payment canceled"; } context.Payment.VoidedDate = DateTime.UtcNow; retVal.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Voided; } else { retVal.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Pending; } return(retVal); }
public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context) { var result = new PostProcessPaymentResult(); if (context.Parameters == null || !context.Parameters.HasKeys()) { result.ErrorMessage = "NoStripeTokenPresent"; return(result); } var stripeTokenId = context.Parameters.Get(_stripeTokenAttrName); if (stripeTokenId == null) { result.ErrorMessage = "NoStripeTokenPresent"; return(result); } var charge = new StripeChargeCreateOptions { Amount = (context.Payment.Sum * 100).Round(), Description = context.Store.Id, Currency = context.Store.DefaultCurrency.ToLower(), SourceTokenOrExistingSourceId = stripeTokenId }; var chargeService = new StripeChargeService(ApiSecretKey); var chargeResult = chargeService.Create(charge); if (!string.IsNullOrEmpty(chargeResult.FailureCode)) { result.ErrorMessage = chargeResult.FailureCode; return(result); } result.IsSuccess = true; result.OuterId = chargeResult.Id; result.OrderId = context.Order.Id; result.NewPaymentStatus = PaymentStatus.Paid; context.Payment.PaymentStatus = PaymentStatus.Paid; context.Payment.OuterId = result.OuterId; return(result); }
public void PostProcessPaymentTest_CallbackSuccessAuthorize_PaymentProcessed() { var transactionId = "123"; var checkoutService = new Mock <IHelcimCheckoutService>(); var paymentService = new Mock <IHelcimPaymentService>(); paymentService.Setup(x => x.GetTransaction(It.IsAny <HelcimTransactionRequest>())).Returns((HelcimTransactionRequest request) => new HelcimPaymentResponse() { Response = 1, Transaction = new HelcimPaymentTransaction() { Id = transactionId, } }); var paymentMethod = new HelcimCheckoutPaymentMethod(checkoutService.Object, s => paymentService.Object); paymentMethod.Settings = GetTestSettings("Authorize"); var context = new PostProcessPaymentEvaluationContext() { Payment = new PaymentIn { Transactions = new List <PaymentGatewayTransaction>() }, Parameters = new NameValueCollection() { { "response", "1" }, { "transactionId", transactionId } } }; var result = paymentMethod.PostProcessPayment(context); Assert.True(result.IsSuccess); Assert.Equal(PaymentStatus.Authorized, result.NewPaymentStatus); Assert.Equal(transactionId, result.OuterId); Assert.Equal(transactionId, context.Payment.OuterId); Assert.False(context.Payment.IsApproved); }
public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context) { var retVal = new PostProcessPaymentResult(); var transactionId = context.Parameters["x_split_tender_id"] ?? context.Parameters["x_trans_id"]; var invoiceNumber = context.Parameters["x_invoice_num"]; var authorizationCode = context.Parameters["x_auth_code"]; var totalPrice = context.Parameters["x_amount"]; var responseCode = context.Parameters["x_response_code"]; var responseReasonCode = context.Parameters["x_response_reason_code"]; var responseReasonText = context.Parameters["x_response_reason_text"]; var method = context.Parameters["x_method"]; var hash = context.Parameters["x_MD5_Hash"]; var hashMD5 = GetMD5Hash(MD5Hash + ApiLogin + transactionId + totalPrice); if (!string.IsNullOrEmpty(hash) && !string.IsNullOrEmpty(hashMD5) && string.Equals(hashMD5, hash, StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(responseCode) && responseCode.Equals("1")) { if (PaymentActionType == "Sale") { retVal.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Paid; context.Payment.CapturedDate = DateTime.UtcNow; context.Payment.IsApproved = true; } else if (PaymentActionType == "Authorization/Capture") { retVal.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Authorized; context.Payment.OuterId = transactionId; } retVal.OuterId = context.Payment.OuterId = transactionId; context.Payment.AuthorizedDate = DateTime.UtcNow; retVal.IsSuccess = true; retVal.ReturnUrl = string.Format("{0}/{1}?id={2}", context.Store.Url, ThankYouPageRelativeUrl, context.Order.Id); } return(retVal); }
public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context) { if (context.Order == null) { throw new ArgumentNullException("context.Order is null"); } if (context.Payment == null) { throw new ArgumentNullException("context.Payment is null"); } if (context.Store == null) { throw new ArgumentNullException("context.Store is null"); } if (string.IsNullOrEmpty(context.Store.Url)) { throw new NullReferenceException("url of store not set"); } var retVal = new PostProcessPaymentResult(); retVal.OrderId = context.Order.Id; var config = GetConfigMap(); var service = new PayPalAPIInterfaceServiceService(config); var getExpressCheckoutDetailsRequest = GetGetExpressCheckoutDetailsRequest(context.OuterId); try { var response = service.GetExpressCheckoutDetails(getExpressCheckoutDetailsRequest); CheckResponse(response); var status = response.GetExpressCheckoutDetailsResponseDetails.CheckoutStatus; if (!status.Equals("PaymentActionCompleted")) { var doExpressCheckoutPaymentRequest = GetDoExpressCheckoutPaymentRequest(response, context.OuterId); var doResponse = service.DoExpressCheckoutPayment(doExpressCheckoutPaymentRequest); CheckResponse(doResponse); response = service.GetExpressCheckoutDetails(getExpressCheckoutDetailsRequest); status = response.GetExpressCheckoutDetailsResponseDetails.CheckoutStatus; } if (status.Equals("PaymentActionCompleted")) { retVal.IsSuccess = true; retVal.OuterId = response.GetExpressCheckoutDetailsResponseDetails.PaymentDetails[0].TransactionId; if (PaypalPaymentActionType == PaymentActionCodeType.AUTHORIZATION) { retVal.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Authorized; context.Payment.OuterId = retVal.OuterId; context.Payment.AuthorizedDate = DateTime.UtcNow; } else if (PaypalPaymentActionType == PaymentActionCodeType.SALE) { retVal.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Paid; context.Payment.OuterId = retVal.OuterId; context.Payment.IsApproved = true; context.Payment.CapturedDate = DateTime.UtcNow; } } else { retVal.ErrorMessage = "Payment process not successfully ends"; } } catch (System.Exception ex) { retVal.ErrorMessage = ex.Message; } return(retVal); }
public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context) { var retVal = new PostProcessPaymentResult(); return(retVal); }
public IHttpActionResult PostProcessPayment(webModel.PaymentCallbackParameters callback) { var parameters = new NameValueCollection(); foreach (var param in callback?.Parameters ?? Array.Empty <KeyValuePair>()) { parameters.Add(param.Key, param.Value); } var orderId = parameters.Get("orderid"); if (string.IsNullOrEmpty(orderId)) { throw new InvalidOperationException("the 'orderid' parameter must be passed"); } //some payment method require customer number to be passed and returned. First search customer order by number var searchCriteria = AbstractTypeFactory <CustomerOrderSearchCriteria> .TryCreateInstance(); searchCriteria.Number = orderId; searchCriteria.ResponseGroup = CustomerOrderResponseGroup.Full.ToString(); //if order not found by order number search by order id var order = _searchService.SearchCustomerOrders(searchCriteria).Results.FirstOrDefault() ?? _customerOrderService.GetByIds(new[] { orderId }, CustomerOrderResponseGroup.Full.ToString()).FirstOrDefault(); if (order == null) { throw new InvalidOperationException($"Cannot find order with ID {orderId}"); } var orderPaymentsCodes = order.InPayments.Select(x => x.GatewayCode).Distinct().ToArray(); var store = _storeService.GetById(order.StoreId); var paymentMethodCode = parameters.Get("code"); //Need to use concrete payment method if it code passed otherwise use all order payment methods var paymentMethods = store.PaymentMethods.Where(x => x.IsActive) .Where(x => orderPaymentsCodes.Contains(x.Code)); if (!string.IsNullOrEmpty(paymentMethodCode)) { paymentMethods = paymentMethods.Where(x => x.Code.EqualsInvariant(paymentMethodCode)); } foreach (var paymentMethod in paymentMethods) { //Each payment method must check that these parameters are addressed to it var result = paymentMethod.ValidatePostProcessRequest(parameters); if (result.IsSuccess) { var paymentOuterId = result.OuterId; var payment = order.InPayments.FirstOrDefault(x => string.IsNullOrEmpty(x.OuterId) || x.OuterId == paymentOuterId); if (payment == null) { throw new InvalidOperationException(@"Cannot find payment"); } var context = new PostProcessPaymentEvaluationContext { Order = order, Payment = payment, Store = store, OuterId = paymentOuterId, Parameters = parameters }; var retVal = paymentMethod.PostProcessPayment(context); if (retVal != null) { _customerOrderService.SaveChanges(new[] { order }); // order Number is required retVal.OrderId = order.Number; } return(Ok(retVal)); } } return(Ok(new PostProcessPaymentResult { ErrorMessage = "Payment method not found" })); }
public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context) { return(new PostProcessPaymentResult()); }
public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context) { return(PostProcessKlarnaOrder(context)); }
public IHttpActionResult PostProcessPayment(webModel.PaymentCallbackParameters callback) { if (callback?.Parameters != null && callback.Parameters.Any(param => param.Key.EqualsInvariant("orderid"))) { var orderId = callback.Parameters.First(param => param.Key.EqualsInvariant("orderid")).Value; //some payment method require customer number to be passed and returned. First search customer order by number var searchCriteria = AbstractTypeFactory <CustomerOrderSearchCriteria> .TryCreateInstance(); searchCriteria.Number = orderId; searchCriteria.ResponseGroup = CustomerOrderResponseGroup.Full.ToString(); //if order not found by order number search by order id var order = _searchService.SearchCustomerOrders(searchCriteria).Results.FirstOrDefault() ?? _customerOrderService.GetByIds(new[] { orderId }, CustomerOrderResponseGroup.Full.ToString()).FirstOrDefault(); if (order == null) { throw new InvalidOperationException($"Cannot find order with ID {orderId}"); } var store = _storeService.GetById(order.StoreId); var parameters = new NameValueCollection(); foreach (var param in callback.Parameters) { parameters.Add(param.Key, param.Value); } var paymentMethod = store.PaymentMethods.Where(x => x.IsActive).FirstOrDefault(x => x.ValidatePostProcessRequest(parameters).IsSuccess); if (paymentMethod != null) { var paymentOuterId = paymentMethod.ValidatePostProcessRequest(parameters).OuterId; var payment = order.InPayments.FirstOrDefault(x => string.IsNullOrEmpty(x.OuterId) || x.OuterId == paymentOuterId); if (payment == null) { throw new InvalidOperationException(@"Cannot find payment"); } var context = new PostProcessPaymentEvaluationContext { Order = order, Payment = payment, Store = store, OuterId = paymentOuterId, Parameters = parameters }; var retVal = paymentMethod.PostProcessPayment(context); if (retVal != null) { _customerOrderService.SaveChanges(new[] { order }); // order Number is required retVal.OrderId = order.Number; } return(Ok(retVal)); } } return(Ok(new PostProcessPaymentResult { ErrorMessage = "cancel payment" })); }
public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context) { var result = new PostProcessPaymentResult(); var response = GetParamValue(context.Parameters, "response"); var transactionId = GetParamValue(context.Parameters, "transactionId"); var transaction = new PaymentGatewayTransaction { ResponseCode = response, ResponseData = GetParamValue(context.Parameters, "xml"), Amount = GetParamValue(context.Parameters, "amount").ToDecimalSafe(), Note = "PostProcessPayment" }; context.Payment.Transactions.Add(transaction); var transactionSuccess = response.EqualsInvariant("1"); if (!transactionSuccess) { var message = GetParamValue(context.Parameters, "responseMessage"); transaction.ProcessError = message; result.ErrorMessage = message; return(result); } //double check transaction status to be sure it legit came from helcim var service = _helcimServiceFactory(ApiEndpoint); var transactionResult = service.GetTransaction(new HelcimTransactionRequest() { AccountId = AccountId, ApiToken = ApiAccessToken, TransactionId = transactionId }); if (transactionResult.Error) { result.ErrorMessage = transactionResult.ResponseMessage; return(result); } if (PaymentActionType == "Sale") { result.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Paid; context.Payment.CapturedDate = DateTime.UtcNow; context.Payment.IsApproved = true; } else { result.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Authorized; } transaction.IsProcessed = true; context.Payment.Status = result.NewPaymentStatus.ToString(); context.Payment.AuthorizedDate = DateTime.UtcNow; context.Payment.OuterId = result.OuterId = transactionId; result.IsSuccess = true; return(result); }
public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context) { var retVal = new PostProcessPaymentResult(); if (context == null && context.Payment == null) { throw new ArgumentNullException("paymentEvaluationContext"); } if (context.Order == null) { throw new NullReferenceException("no order with this id"); } retVal.OrderId = context.Order.Id; if (!(context.Store != null && !string.IsNullOrEmpty(context.Store.Url))) { throw new NullReferenceException("no store with this id"); } var config = GetConfigMap(context.Store); var service = new PayPalAPIInterfaceServiceService(config); GetExpressCheckoutDetailsResponseType response = null; DoExpressCheckoutPaymentResponseType doResponse = null; var getExpressCheckoutDetailsRequest = GetGetExpressCheckoutDetailsRequest(context.OuterId); try { response = service.GetExpressCheckoutDetails(getExpressCheckoutDetailsRequest); CheckResponse(response); var status = response.GetExpressCheckoutDetailsResponseDetails.CheckoutStatus; if (!status.Equals("PaymentActionCompleted")) { var doExpressCheckoutPaymentRequest = GetDoExpressCheckoutPaymentRequest(response, context.OuterId); doResponse = service.DoExpressCheckoutPayment(doExpressCheckoutPaymentRequest); CheckResponse(doResponse); response = service.GetExpressCheckoutDetails(getExpressCheckoutDetailsRequest); status = response.GetExpressCheckoutDetailsResponseDetails.CheckoutStatus; } if (status.Equals("PaymentActionCompleted")) { retVal.IsSuccess = true; retVal.NewPaymentStatus = PaymentStatus.Paid; } } catch (System.Exception ex) { retVal.Error = ex.Message; retVal.NewPaymentStatus = PaymentStatus.Pending; } return(retVal); }
public IHttpActionResult RegisterPayment(string orderId) { var order = _customerOrderService.GetById(orderId, CustomerOrderResponseGroup.Full); if (order == null) { throw new NullReferenceException("order"); } var store = _storeService.GetById(order.StoreId); var parameters = new NameValueCollection(); foreach (var key in HttpContext.Current.Request.QueryString.AllKeys) { parameters.Add(key, HttpContext.Current.Request.Form[key]); } foreach (var key in HttpContext.Current.Request.Form.AllKeys) { parameters.Add(key, HttpContext.Current.Request.Form[key]); } var paymentMethod = store.PaymentMethods.FirstOrDefault(x => x.Code == "AuthorizeNet"); if (paymentMethod != null) { var validateResult = paymentMethod.ValidatePostProcessRequest(parameters); var paymentOuterId = validateResult.OuterId; var payment = order.InPayments.FirstOrDefault(x => x.GatewayCode == "AuthorizeNet" && x.Sum == Convert.ToDecimal(parameters["x_amount"], CultureInfo.InvariantCulture)); if (payment == null) { throw new NullReferenceException("payment"); } if (payment == null) { throw new NullReferenceException("appropriate paymentMethod not found"); } var context = new PostProcessPaymentEvaluationContext { Order = order, Payment = payment, Store = store, OuterId = paymentOuterId, Parameters = parameters }; var retVal = paymentMethod.PostProcessPayment(context); if (retVal != null && retVal.IsSuccess) { _customerOrderService.Update(new CustomerOrder[] { order }); var returnHtml = string.Format("<html><head><script type='text/javascript' charset='utf-8'>window.location='{0}';</script><noscript><meta http-equiv='refresh' content='1;url={0}'></noscript></head><body></body></html>", retVal.ReturnUrl); return(Ok(returnHtml)); } } return(StatusCode(System.Net.HttpStatusCode.NoContent)); }
public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context) { throw new NotImplementedException(); }
public IHttpActionResult RegisterPayment() { var orderId = HttpContext.Current.Request.Form["orderid"]; var order = _customerOrderService.GetByOrderNumber(orderId, CustomerOrderResponseGroup.Full); if (order == null) { order = _customerOrderService.GetById(orderId, CustomerOrderResponseGroup.Full); } if (order == null) { throw new NullReferenceException("Order not found"); } var store = _storeService.GetById(order.StoreId); var parameters = new NameValueCollection(); foreach (var key in HttpContext.Current.Request.QueryString.AllKeys) { parameters.Add(key, HttpContext.Current.Request.Form[key]); } foreach (var key in HttpContext.Current.Request.Form.AllKeys) { parameters.Add(key, HttpContext.Current.Request.Form[key]); } var paymentMethod = store.PaymentMethods.FirstOrDefault(x => x.Code == dibsCode); if (paymentMethod != null) { var validateResult = paymentMethod.ValidatePostProcessRequest(parameters); var paymentOuterId = validateResult.OuterId; var payment = order.InPayments.FirstOrDefault(x => x.GatewayCode == dibsCode && (int)(x.Sum * 100) == Convert.ToInt32(parameters["amount"], CultureInfo.InvariantCulture)); if (payment == null) { throw new NullReferenceException("appropriate paymentMethod not found"); } var context = new PostProcessPaymentEvaluationContext { Order = order, Payment = payment, Store = store, OuterId = paymentOuterId, Parameters = parameters }; var retVal = paymentMethod.PostProcessPayment(context); if (retVal != null && retVal.IsSuccess) { _customerOrderService.Update(new CustomerOrder[] { order }); return(Ok()); } } return(StatusCode(System.Net.HttpStatusCode.NotFound)); }
/// <summary> /// Method that contains logic of checking payment status of payment in external payment system /// </summary> /// <param name="context"></param> /// <returns>Result of checking payment in external payment system</returns> public abstract PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context);
public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context) { var result = new PostProcessPaymentResult(); var status = GetParamValue(context.Parameters, "status"); //possible values: error, success var transactionId = GetParamValue(context.Parameters, _transactionParamName); bool.TryParse(GetSetting("Datatrans.Checkout.ErrorTesting"), out var errorTestingMode); if (errorTestingMode && IsTest) { status = _errorStatus; var errorCode = int.TryParse(GetSetting("Datatrans.Checkout.ErrorCode"), out var parsedErrorCode) ? parsedErrorCode : DatatransErrorCodes.DefaultErrorCode; context.Parameters["errorCode"] = errorCode.ToString(); context.Parameters["errorMessage"] = "Error testing mode"; } context.Payment.OuterId = context.OuterId; if (status.EqualsInvariant(_successfulStatus) && IsSale) { var captureResult = CaptureProcessPayment(new CaptureProcessPaymentEvaluationContext { Payment = context.Payment, Order = context.Order, Parameters = context.Parameters }); if (captureResult.IsSuccess) { context.OuterId = transactionId; result.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Paid; context.Payment.IsApproved = true; context.Payment.CapturedDate = DateTime.UtcNow; result.IsSuccess = true; } } else if (status.EqualsInvariant(_successfulStatus)) { var transactionInfo = GetTransactionStatus(context.Payment.OuterId); context.Payment.Transactions.Add(new PaymentGatewayTransaction() { Note = "Transaction Info", ResponseData = transactionInfo.ResponseContent, Status = transactionInfo.ResponseMessage, ResponseCode = transactionInfo.ResponseCode, ProcessError = transactionInfo.ErrorMessage, CurrencyCode = context.Order.Currency, Amount = context.Order.Sum, IsProcessed = true, ProcessedDate = DateTime.UtcNow }); result.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Authorized; context.Payment.OuterId = result.OuterId = context.OuterId; context.Payment.AuthorizedDate = DateTime.UtcNow; result.IsSuccess = true; } else { var errorMessage = GetParamValue(context.Parameters, "errorMessage"); var errorCode = int.TryParse(GetParamValue(context.Parameters, "errorCode"), out var parsedErrorCode) ? parsedErrorCode : DatatransErrorCodes.DefaultErrorCode; result.ErrorMessage = GetErrorMessage(errorCode, errorMessage); } result.OrderId = context.Order.Id; return(result); }