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); }
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); }
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 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 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 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 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 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 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(string orderId) { var order = _customerOrderService.GetById(orderId, CustomerOrderResponseGroup.Full); if (order == null) { throw new NullReferenceException("order"); } var store = _storeService.GetById(order.StoreId); var paymentMethod = store.PaymentMethods.Where(x => x.IsActive).FirstOrDefault(x => x.ValidatePostProcessRequest(HttpContext.Current.Request.QueryString).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 }; PostProcessPaymentResult retVal; if (!payment.IsApproved) { retVal = paymentMethod.PostProcessPayment(context); if (retVal != null && retVal.NewPaymentStatus == PaymentStatus.Paid) { payment.IsApproved = true; _customerOrderService.Update(new CustomerOrder[] { order }); } } else { retVal = new PostProcessPaymentResult { IsSuccess = true, NewPaymentStatus = PaymentStatus.Paid, OrderId = orderId }; } return(Ok(retVal)); } return(Ok(new PostProcessPaymentResult { Error = "cancel payment" })); }
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 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 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); }