protected override IPaymentResult PerformProcessPayment(SalePreparationBase preparation, IPaymentMethod paymentMethod) { // We have to use the CheckoutConfirmationModel in this implementation. If this were to be used // outside of a demo, you could consider writing your own base controller that inherits directly from // Merchello.Web.Mvc.PaymentMethodUiController<TModel> and complete the transaction there in which case the // BazaarPaymentMethodFormControllerBase would be a good example. var form = UmbracoContext.HttpContext.Request.Form; var purchaseOrderNumber = form.Get("purchaseOrderNumber"); if (string.IsNullOrEmpty(purchaseOrderNumber)) { var invalidData = new InvalidDataException("The Purchase Order Number cannot be an empty string"); return(new PaymentResult(Attempt <IPayment> .Fail(invalidData), null, false)); } // You need a ProcessorArgumentCollection for this transaction to store the payment method nonce // The braintree package includes an extension method off of the ProcessorArgumentCollection - SetPaymentMethodNonce([nonce]); var args = new ProcessorArgumentCollection(); args.SetPurchaseOrderNumber(purchaseOrderNumber); // We will want this to be an Authorize(paymentMethod.Key, args); // -- Also in a real world situation you would want to validate the PO number somehow. return(preparation.AuthorizePayment(paymentMethod.Key, args)); }
/// <summary> /// Responsible for actually processing the payment with the PaymentProvider /// </summary> /// <param name="preparation"> /// The preparation. /// </param> /// <param name="paymentMethod"> /// The payment method. /// </param> /// <returns> /// The <see cref="IPaymentResult"/>. /// </returns> protected override IPaymentResult PerformProcessPayment(SalePreparationBase preparation, IPaymentMethod paymentMethod) { return(preparation.AuthorizePayment(paymentMethod.Key)); }