public override RefundProcessPaymentResult RefundProcessPayment(RefundProcessPaymentEvaluationContext context)
        {
            if (context == null || context.Payment == null)
            {
                throw new ArgumentNullException("paymentEvaluationContext");
            }

            RefundProcessPaymentResult retVal = new RefundProcessPaymentResult();

            if (context.Payment.IsApproved && (context.Payment.PaymentStatus == PaymentStatus.Paid || context.Payment.PaymentStatus == PaymentStatus.Cancelled))
            {
                try
                {
                    var config  = GetConfigMap();
                    var service = new PayPalAPIInterfaceServiceService(config);
                    RefundTransactionReq refundTransctionRequest = GetRefundTransactionRequest(context.Payment);
                    service.RefundTransaction(refundTransctionRequest);
                }
                catch (Exception ex)
                {
                    retVal.ErrorMessage = ex.Message;
                }
            }

            return(new RefundProcessPaymentResult {
                ErrorMessage = "Not implemented yet"
            });
        }
        public override RefundProcessPaymentResult RefundProcessPayment(RefundProcessPaymentEvaluationContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            if (context.Payment == null)
            {
                throw new ArgumentNullException("context.Payment");
            }

            var retVal = new RefundProcessPaymentResult();

            if (context.Payment.IsApproved && (context.Payment.PaymentStatus == PaymentStatus.Paid || context.Payment.PaymentStatus == PaymentStatus.Cancelled))
            {
                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 result = api.CreditInvoice(context.Payment.OuterId);
            }

            return(retVal);
        }
Exemple #3
0
        public override RefundProcessPaymentResult RefundProcessPayment(RefundProcessPaymentEvaluationContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            if (context.Payment == null)
            {
                throw new ArgumentNullException("context.Payment");
            }

            var retVal = new RefundProcessPaymentResult();

            if (context.Payment.IsApproved && (context.Payment.PaymentStatus == PaymentStatus.Paid || context.Payment.PaymentStatus == PaymentStatus.Cancelled))
            {
                if (KlarnaApi == null)
                {
                    InitializeKlarnaApi();
                }

                var result = KlarnaApi.CreditInvoice(context.Payment.OuterId);

                if (!string.IsNullOrEmpty(result))
                {
                    retVal.NewPaymentStatus       = context.Payment.PaymentStatus = PaymentStatus.Refunded;
                    context.Payment.CancelledDate = DateTime.UtcNow;
                    context.Payment.IsCancelled   = true;
                    retVal.IsSuccess = true;
                }
            }

            return(retVal);
        }
        public override RefundProcessPaymentResult RefundProcessPayment(RefundProcessPaymentEvaluationContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (context.Payment == null)
            {
                throw new InvalidOperationException(nameof(context.Payment));
            }

            if (context.Order == null)
            {
                throw new InvalidOperationException(nameof(context.Order));
            }

            if (string.IsNullOrEmpty(context.Payment.OuterId))
            {
                throw new InvalidOperationException(nameof(context.Payment.OuterId));
            }

            if (string.IsNullOrEmpty(context.Order.Currency))
            {
                throw new InvalidOperationException(nameof(context.Order.Currency));
            }

            if (string.IsNullOrEmpty(context.Order.Number))
            {
                throw new InvalidOperationException(nameof(context.Payment.OuterId));
            }

            var result = new RefundProcessPaymentResult();

            var payment = context.Payment;

            var request = new DatatransRefundRequest
            {
                TransactionId   = payment.OuterId,
                Amount          = GetNormalizedAmountForRefund(context, payment),
                Currency        = context.Order.Currency,
                MerchantId      = MerchantId,
                ReferenceNumber = context.Order.Number,
                Sign            = GetSignProvider(HMACHex).Sign(MerchantId, GetNormalizedAmountForRefund(context, payment), context.Order.Currency, context.Order.Number)
            };

            var datatransClient = CreateDatatransClient(ServerToServerApi);

            var response = datatransClient.Refund(request);

            var transaction = new PaymentGatewayTransaction();

            payment.Transactions.Add(transaction);

            transaction.ResponseData = response.ResponseData;

            if (!response.ErrorMessage.IsNullOrEmpty())
            {
                transaction.ProcessError = response.ErrorMessage;

                result.ErrorMessage = GetErrorMessage(response.ErrorCode, response.ErrorMessage);
                result.IsSuccess    = false;
                return(result);
            }

            transaction.Amount        = GetAmountForRefund(context, payment);
            transaction.CurrencyCode  = payment.Currency;
            transaction.IsProcessed   = true;
            transaction.Note          = "Datatrans refund";
            transaction.ResponseCode  = response.ResponseCode;
            transaction.Status        = response.ResponseMessage;
            transaction.ProcessedDate = DateTime.Now;

            result.NewPaymentStatus = IsPartialRefund(context.Parameters) ? PaymentStatus.PartiallyRefunded : PaymentStatus.Refunded;
            result.IsSuccess        = true;

            return(result);
        }