/// <summary> /// Post process payment (used by payment gateways that require redirecting to a third-party URL) /// </summary> /// <param name="postProcessPaymentRequest">Payment info required for an order processing</param> public override void PostProcessPayment(PostProcessPaymentRequest postProcessPaymentRequest) { if (postProcessPaymentRequest.Order.PaymentStatus == PaymentStatus.Paid) return; var settings = _services.Settings.LoadSetting<PayUMeaStandardPaymentSettings>(postProcessPaymentRequest.Order.StoreId); if (_payUApiComms == null) { _payUApiComms = new RunPayUComms(settings.Username, settings.Password, settings.ApiUrl, settings.SafeKey, "ONE_ZERO"); } string cancelReturnUrl = _services.WebHelper.GetStoreLocation(false) + "Plugins/PaymentPayUPayUMeaStandard/CancelOrder"; var orderid = postProcessPaymentRequest.Order.GetOrderNumber(); string returnUrl = string.Format("{0}Plugins/PaymentPayUMeaStandard/PDTHandler?orderId={1}", _services.WebHelper.GetStoreLocation(false), orderid); var setTransactionResult = _payUApiComms.SetTransaction(new SetTransactionRequest { AmountInCents = Math.Truncate(postProcessPaymentRequest.Order.OrderTotal * 100).ToString(CultureInfo.InvariantCulture), CancelUrl = cancelReturnUrl, CustomerEmail = postProcessPaymentRequest.Order.BillingAddress.Email, CustomerLastname = postProcessPaymentRequest.Order.BillingAddress.LastName, CustomerMobile = postProcessPaymentRequest.Order.BillingAddress.PhoneNumber, CustomerName = postProcessPaymentRequest.Order.BillingAddress.FirstName, CustomerUsername = postProcessPaymentRequest.Order.Customer.Username, LineItems = postProcessPaymentRequest.Order.OrderItems.Select(x => new LineItem { Amount = Math.Truncate(x.PriceInclTax * 100).ToString(CultureInfo.InvariantCulture), Description = x.Product.Name, ProductCode = x.Product.Sku, Quantity = x.Quantity.ToString() }).ToList(), OrderNumber = postProcessPaymentRequest.Order.OrderGuid.ToString(), PaymentTypes = null, ReturnUrl = returnUrl, Stage = false }); if (!setTransactionResult.IsTransactionSet) throw new Exception(string.Format("Failed to Preprocess transaction with PayU ### {0} ###>> {1}:{2}:{3}", setTransactionResult.ErrorMessage, postProcessPaymentRequest.Order.BillingAddress.Email, postProcessPaymentRequest.Order.OrderNumber, postProcessPaymentRequest.Order.OrderGuid)); _httpContext.Response.Redirect(string.Format("{0}?PayUReference={1}", settings.RedirectUrl, setTransactionResult.PayUReference)); }
public void TestSetup() { _comms = new RunPayUComms("100032", "PypWWegU", "https://staging.payu.co.za/service/PayUAPI?wsdl", "{CE62CE80-0EFD-4035-87C1-8824C5C46E7F}", "ONE_ZERO"); }
public ActionResult IPNHandler() { Debug.WriteLine("PayUMea Standard IPN: {0}".FormatWith(Request.ContentLength)); var provider = _paymentService.LoadPaymentMethodBySystemName("Payments.PayUMeaStandard", true); var processor = provider != null ? provider.Value as PayUMeaStandardProvider : null; if (processor == null) throw new SmartException(_localizationService.GetResource("Plugins.Payments.PayUMeaStandard.NoModuleLoading")); var ueasyPaymentSettings = _services.Settings.LoadSetting<PayUMeaStandardPaymentSettings>(); var runPayUcomms = new RunPayUComms(ueasyPaymentSettings.Username, ueasyPaymentSettings.Password, ueasyPaymentSettings.ApiUrl, ueasyPaymentSettings.SafeKey, "ONE_ZERO"); var transactionRequest1 = new GetTransactionRequest { PayUReference = Request.QueryString["payUReference"] }; var transaction = runPayUcomms.GetTransaction(transactionRequest1); var orderByNumber = _orderService.GetOrderByNumber(Request.QueryString["orderId"]); switch (transaction.TransactionState) { case "RESERVE": orderByNumber.AuthorizationTransactionId = Request.QueryString["payUReference"]; _orderService.UpdateOrder(orderByNumber); _orderProcessingService.MarkAsAuthorized(orderByNumber); break; case "RESERVE_CANCEL": orderByNumber.AuthorizationTransactionId = Request.QueryString["payUReference"]; _orderService.UpdateOrder(orderByNumber); _orderProcessingService.CancelOrder(orderByNumber, true); break; case "PAYMENT": orderByNumber.AuthorizationTransactionId = Request.QueryString["payUReference"]; _orderService.UpdateOrder(orderByNumber); _orderProcessingService.MarkOrderAsPaid(orderByNumber); break; case "FINALIZE": orderByNumber.AuthorizationTransactionId = Request.QueryString["payUReference"]; _orderService.UpdateOrder(orderByNumber); _orderProcessingService.MarkOrderAsPaid(orderByNumber); break; } return Content(""); }