Пример #1
0
        public bool PayPalExpressCompleteAllPayments()
        {
            bool result = true;

            foreach (Orders.OrderTransaction p in svc.Transactions.FindForOrder(o.bvin))
            {

                List<Orders.OrderTransaction> transactions = svc.Transactions.FindForOrder(o.bvin);

                if (p.Action == MerchantTribe.Payment.ActionType.PayPalExpressCheckoutInfo ||
                    p.Action == MerchantTribe.Payment.ActionType.PayPalHold)
                {
                    // if we already have an auth or charge on the card, skip
                    if (
                        p.HasSuccessfulLinkedAction(MerchantTribe.Payment.ActionType.PayPalCharge, transactions) ||
                        p.HasSuccessfulLinkedAction(MerchantTribe.Payment.ActionType.PayPalCapture, transactions) ||
                        p.HasSuccessfulLinkedAction(MerchantTribe.Payment.ActionType.PayPalHold, transactions) 
                        )
                    {
                        continue;
                    }

                    try
                    {
                        MerchantTribe.Payment.Transaction t = o.GetEmptyTransaction();
                        t.Card = p.CreditCard;
                        t.Amount = p.Amount;

                        Payment.Method.PaypalExpress processor = new Payment.Method.PaypalExpress();

                        if (p.Action == MerchantTribe.Payment.ActionType.PayPalHold)
                        {
                            t.Action = MerchantTribe.Payment.ActionType.PayPalCapture;
                            processor.Capture(t, this.MTApp);
                        }
                        else
                        {
                            t.Action = MerchantTribe.Payment.ActionType.PayPalCharge;
                            processor.Charge(t, this.MTApp);
                        }
                                                
                        Orders.OrderTransaction ot = new Orders.OrderTransaction(t);
                        ot.LinkedToTransaction = p.IdAsString;
                        svc.AddPaymentTransactionToOrder(o, ot, this.MTApp);

                        if (t.Result.Succeeded == false) result = false;

                    }
                    catch (Exception ex)
                    {
                        EventLog.LogEvent(ex);
                    }
                }

                Orders.OrderPaymentStatus previousPaymentStatus = o.PaymentStatus;
                svc.EvaluatePaymentStatus(o);
                BusinessRules.OrderTaskContext context = new BusinessRules.OrderTaskContext(this.MTApp);
                context.Order = o;
                context.UserId = o.UserID;
                context.Inputs.Add("bvsoftware", "PreviousPaymentStatus", previousPaymentStatus.ToString());
                BusinessRules.Workflow.RunByName(context, BusinessRules.WorkflowNames.PaymentChanged);
            }

            return result;
        }
Пример #2
0
        public bool PayPalExpressRefund(OrderTransaction previousTransaction, decimal amount)
        {
            if (previousTransaction == null) return false;

            Transaction t = o.GetEmptyTransaction();
            t.Action = ActionType.PayPalRefund;
            t.Amount = EnsurePositiveAmount(amount);
            t.PreviousTransactionNumber = previousTransaction.RefNum1;
            t.PreviousTransactionAuthCode = previousTransaction.RefNum2;
            OrderTransaction ot = new OrderTransaction(t);

            if (previousTransaction.Action != ActionType.PayPalCapture
                && previousTransaction.Action != ActionType.PayPalCharge
                && previousTransaction.Action != ActionType.PayPalExpressCheckoutInfo)
            {
                ot.Success = false;
                ot.Messages = "Transaction must be PayPal capture or charge type to refund.";
                return svc.AddPaymentTransactionToOrder(o, ot, this.MTApp);
            }

            Payment.Method.PaypalExpress processor = new Payment.Method.PaypalExpress();
            if (processor != null)
            {
                processor.Refund(t, this.MTApp);
                ot = new OrderTransaction(t);
                ot.LinkedToTransaction = previousTransaction.IdAsString;
            }
            return svc.AddPaymentTransactionToOrder(o, ot, this.MTApp);
        }
Пример #3
0
        public bool PayPalExpressVoid(OrderTransaction previousTransaction, decimal amount)
        {
            if (previousTransaction == null) return false;

            Transaction t = o.GetEmptyTransaction();
            t.Action = ActionType.PayPalVoid;
            t.Amount = EnsurePositiveAmount(amount);
            t.PreviousTransactionNumber = previousTransaction.RefNum1;
            t.PreviousTransactionAuthCode = previousTransaction.RefNum2;
            OrderTransaction ot = new OrderTransaction(t);

            if (!previousTransaction.IsVoidable)
            {
                ot.Success = false;
                ot.Messages = "Transaction can not be voided.";
                return svc.AddPaymentTransactionToOrder(o, ot, this.MTApp);
            }

            Payment.Method.PaypalExpress processor = new Payment.Method.PaypalExpress();  
            if (processor != null)
            {
                processor.Void(t, this.MTApp);
                ot = new OrderTransaction(t);
                ot.LinkedToTransaction = previousTransaction.IdAsString;

                // if the void went through, make sure we mark the previous transaction as voided
                if (t.Result.Succeeded)
                {
                    previousTransaction.Voided = true;
                    svc.Transactions.Update(previousTransaction);
                }
            }
            return svc.AddPaymentTransactionToOrder(o, ot, this.MTApp);
        }
Пример #4
0
        public bool PayPalExpressCapture(OrderTransaction holdTransaction, decimal amount)
        {
            if (holdTransaction == null) return false;

            Transaction t = o.GetEmptyTransaction();
            t.Action = ActionType.PayPalCapture;
            t.Amount = EnsurePositiveAmount(amount);
            t.PreviousTransactionNumber = holdTransaction.RefNum1;
            t.PreviousTransactionAuthCode = holdTransaction.RefNum2;
            OrderTransaction ot = new OrderTransaction(t);

            if (holdTransaction.Action != ActionType.PayPalHold)
            {
                ot.Success = false;
                ot.Messages = "Transaction must be PayPal hold type to process.";
                return svc.AddPaymentTransactionToOrder(o, ot, this.MTApp);
            }

            Payment.Method.PaypalExpress processor = new Payment.Method.PaypalExpress();
            if (processor != null)
            {
                processor.Capture(t, this.MTApp);
                ot = new OrderTransaction(t);
                ot.LinkedToTransaction = holdTransaction.IdAsString;
            }
            return svc.AddPaymentTransactionToOrder(o, ot, this.MTApp);
        }