public IHttpActionResult PaymentCallback([FromBody] PaymentCallbackDto callback, int orderGroupId) { if (!string.IsNullOrWhiteSpace(callback?.PaymentOrder?.Id?.ToString())) { var purchaseOrder = _checkoutService.GetOrCreatePurchaseOrder(orderGroupId, callback.PaymentOrder.Id.OriginalString); if (purchaseOrder == null) { return(new StatusCodeResult(HttpStatusCode.NotFound, this)); } var purchaseOrderContainsPaymentTransaction = purchaseOrder.Forms.SelectMany(x => x.Payments) .Any(p => p.ProviderTransactionID == callback.Transaction.Number.ToString()); if (!purchaseOrderContainsPaymentTransaction) { var paymentOrder = _swedbankPayCheckoutService.GetPaymentOrder(purchaseOrder, PaymentOrderExpand.All); var transaction = paymentOrder.PaymentOrderResponse.CurrentPayment.Payment.Transactions.TransactionList .FirstOrDefault(x => x.Number == callback.Transaction.Number.ToString()); var swedbankPayCheckoutPaymentMethodDto = _paymentManager.GetPaymentMethodBySystemName(Constants.SwedbankPayCheckoutSystemKeyword, paymentOrder.PaymentOrderResponse.Language.TwoLetterISOLanguageName); var paymentMethod = swedbankPayCheckoutPaymentMethodDto?.PaymentMethod?.FirstOrDefault(); if (paymentMethod != null && transaction != null) { if (paymentOrder.PaymentOrderResponse.CurrentPayment.Payment.Instrument == PaymentInstrument.Invoice && transaction.Type == TransactionType.Authorization) { //Already added a authorization transaction for Invoice when creating payment. return(Ok()); } var payment = purchaseOrder.CreatePayment(_orderGroupFactory); payment.PaymentType = PaymentType.Other; payment.PaymentMethodId = paymentMethod.PaymentMethodId; payment.PaymentMethodName = Constants.SwedbankPayCheckoutSystemKeyword; payment.TransactionType = transaction.Type.ConvertToEpiTransactionType().ToString(); payment.ProviderTransactionID = transaction.Number; payment.Amount = transaction.Amount.Value / (decimal)100; payment.Status = PaymentStatus.Processed.ToString(); purchaseOrder.AddPayment(payment); _orderRepository.Save(purchaseOrder); } } return(Ok()); } return(new StatusCodeResult(HttpStatusCode.Accepted, this)); }
public override IPayment CreatePayment(decimal amount, IOrderGroup orderGroup) { var paymentOrder = _swedbankPayCheckoutService.GetPaymentOrder(orderGroup, PaymentOrderExpand.All); var currentPayment = paymentOrder.PaymentOrderResponse.CurrentPayment.Payment; var transaction = currentPayment?.Transactions?.TransactionList?.FirstOrDefault(); var transactionType = transaction?.Type.ConvertToEpiTransactionType() ?? TransactionType.Authorization; var payment = orderGroup.CreatePayment(_orderGroupFactory); payment.PaymentType = PaymentType.Other; payment.PaymentMethodId = PaymentMethodId; payment.PaymentMethodName = Constants.SwedbankPayCheckoutSystemKeyword; payment.ProviderTransactionID = transaction?.Number; payment.Amount = amount; var isSwishPayment = currentPayment?.Instrument.Equals(PaymentInstrument.Swish) ?? false; payment.Status = isSwishPayment ? PaymentStatus.Processed.ToString() : PaymentStatus.Pending.ToString(); payment.TransactionType = transactionType.ToString(); return(payment); }
public IPurchaseOrder GetOrCreatePurchaseOrder(int orderGroupId, string swedbankPayOrderId) { // Check if the order has been created already var purchaseOrder = _swedbankPayCheckoutService.GetPurchaseOrderBySwedbankPayOrderId(swedbankPayOrderId); if (purchaseOrder != null) { return(purchaseOrder); } // Check if we still have a cart and can create an order var cart = _orderRepository.Load <ICart>(orderGroupId); var cartSwedbankPayId = cart?.Properties[Constants.SwedbankPayOrderIdField]?.ToString(); if (cartSwedbankPayId == null || !cartSwedbankPayId.Equals(swedbankPayOrderId)) { return(null); } var order = _swedbankPayCheckoutService.GetPaymentOrder(cart, PaymentOrderExpand.All); var paymentResponse = order.PaymentOrderResponse.CurrentPayment; var transaction = paymentResponse.Payment.Transactions?.TransactionList?.FirstOrDefault(x => x.State.Equals(State.Completed) && x.Type.Equals(SwedbankPay.Sdk.TransactionType.Authorization) || x.Type.Equals(SwedbankPay.Sdk.TransactionType.Sale)); if (transaction != null) { var finalPurchaseOrderCheck = _swedbankPayCheckoutService.GetPurchaseOrderBySwedbankPayOrderId(swedbankPayOrderId); purchaseOrder = finalPurchaseOrderCheck ?? CreatePurchaseOrderForSwedbankPay(cart); return(purchaseOrder); } // Won't create order, SwedbankPay checkout not complete return(null); }