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; }
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); }
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); }
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); }