Nopcommerce-自定义付款方式的PostProcessPayment不重定向到付款网关URL

时间:2019-04-22 16:34:44

标签: c# asp.net .net asp.net-mvc nopcommerce

我正在为Nopcommerce网站开发自定义付款方式插件。这是付款处理器类代码:

public class CODBookingPaymentProcessor : BasePlugin, IPaymentMethod
{
    private IShoppingCartService _shoppingCartService;
    private IOrderService _orderService;
    private IHttpContextAccessor _httpContextAccessor;

    #region Ctor
    public CODBookingPaymentProcessor(IShoppingCartService shoppingCartService,
        IOrderService orderService, IHttpContextAccessor httpContextAccessor)
    {
        this._shoppingCartService = shoppingCartService;
        this._orderService = orderService;
        this._httpContextAccessor = httpContextAccessor;
    }
    #endregion

    ~~~~~~~~~~~~~~~~ SOME CODE ~~~~~~~~~~~~~~~~~~~~~
public void PostProcessPayment(PostProcessPaymentRequest postProcessPaymentRequest)
    {
          // some code
          string url = protocol + host + "/" + "PaymentCODBooking/ProcessInternetPayment";

        _httpContextAccessor.HttpContext.Response.Redirect(url);
    }

断点在最后一行,url正确形成。但是,当在“签出”页面上单击url按钮时,页面不会重定向到CONFIRM。它只是停留在页面上,有时会清空购物车。这意味着无需进入支付网关即可创建订单。

更新

重定向也无法在ConfirmOrder的{​​{1}}操作中起作用。

CheckoutController

4 个答案:

答案 0 :(得分:1)

重定向必须是操作结果。例如,在控制器的动作中,我们这样写:

return Redirect("http://www.google.com");

如果没有return关键字,它将不会重定向。

要从插件的控制器重定向,请在 PayPalStandard 类的 \ Plugins \ Nop.Plugin.Payments.PayPalStandard \ Controllers \ PaymentPayPalStandardController.cs 类中查看类似的实现。 em>开箱即用的插件

答案 1 :(得分:1)

如果您要开发插件,最好不要更改nopCommerce源代码。您可以在插件本身中执行重定向,请勿更改ConfirmOrder的{​​{1}}操作。将您的代码更改为此:

CheckoutController

您可以在public void PostProcessPayment(PostProcessPaymentRequest postProcessPaymentRequest) { // some code string url = protocol + host + "/" + "PaymentCODBooking/ProcessInternetPayment"; _httpContextAccessor.HttpContext.Response.Redirect(url); return; } 操作中找到这些行。 ConfirmOrder之后,该应用程序将在此处丰富。重定向在这里执行:

PostProcessPayment

答案 2 :(得分:0)

感谢大家的帮助。您的回答给了我一些提示,并找到了问题。问题是我忘记设置public PaymentMethodType PaymentMethodType => PaymentMethodType.Redirection;。设置为Standard导致了问题。

答案 3 :(得分:0)

将 PaymentMethodType 更改为 PaymentMethodType.Redirection 它将起作用