コード例 #1
0
        private PaymentStepResult ProcessFraudUpdate(IPayment payment, IOrderGroup orderGroup)
        {
            var paymentStepResult = new PaymentStepResult();

            if (payment.HasFraudStatus(NotificationFraudStatus.FRAUD_RISK_ACCEPTED))
            {
                payment.Status = PaymentStatus.Processed.ToString();
                OrderStatusManager.ReleaseHoldOnOrder((PurchaseOrder)orderGroup);
                AddNoteAndSaveChanges(orderGroup, payment.TransactionType, "Klarna fraud risk accepted");
                paymentStepResult.Status = true;
                return(paymentStepResult);
            }

            if (payment.HasFraudStatus(NotificationFraudStatus.FRAUD_RISK_REJECTED))
            {
                payment.Status = PaymentStatus.Failed.ToString();
                OrderStatusManager.HoldOrder((PurchaseOrder)orderGroup);
                AddNoteAndSaveChanges(orderGroup, payment.TransactionType, "Klarna fraud risk rejected");
                paymentStepResult.Status = true;
                return(paymentStepResult);
            }

            if (payment.HasFraudStatus(NotificationFraudStatus.FRAUD_RISK_STOPPED))
            {
                payment.Status = PaymentStatus.Failed.ToString();
                OrderStatusManager.HoldOrder((PurchaseOrder)orderGroup);
                AddNoteAndSaveChanges(orderGroup, payment.TransactionType, "Klarna fraud risk stopped");
                paymentStepResult.Status = true;
                return(paymentStepResult);
            }

            paymentStepResult.Message = $"Can't process authorization. Unknown fraud notification: {payment.Properties[Common.Constants.FraudStatusPaymentField]} or no fraud notifications received so far.";

            return(paymentStepResult);
        }
コード例 #2
0
 private void SetOrderStatus(IPurchaseOrder purchaseOrder, IPayment payment)
 {
     if (payment.HasFraudStatus(FraudStatus.PENDING))
     {
         OrderStatusManager.HoldOrder((PurchaseOrder)purchaseOrder);
         _orderRepository.Save(purchaseOrder);
     }
 }
コード例 #3
0
        private static bool ShouldProcessFraudUpdate(IPayment payment, IOrderGroup orderGroup)
        {
            if (!(orderGroup is IPurchaseOrder))
            {
                return(false);
            }

            var isPending      = payment.Status == PaymentStatus.Pending.ToString();
            var isFraudStopped = orderGroup.OrderStatus != OrderStatus.Completed &&
                                 payment.HasFraudStatus(NotificationFraudStatus.FRAUD_RISK_STOPPED);

            return(isPending || isFraudStopped);
        }