自定义支付方式的 PostProcessPayment 不重定向到支付网关 URL

我正在为 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结帐页面上单击按钮的时间。它只是停留在页面上或有时会清空购物车。这意味着正在创建订单而不去支付网关。


千巷猫影
浏览 123回答 4
4回答

喵喔喔

重定向必须是操作结果。例如在控制器的动作中我们这样写:return Redirect("http://www.google.com");没有return关键字,它不会重定向。要从插件的控制器重定向,请检查开箱即用的PayPalStandard插件的\Plugins\Nop.Plugin.Payments.PayPalStandard\Controllers\PaymentPayPalStandardController.cs类中的类似实现

撒科打诨

如果您正在尝试开发插件,最好不要更改 nopCommerce 源代码。ConfirmOrder您可以在插件本身中执行重定向,不要更改CheckoutController. 将您的代码更改为:public void PostProcessPayment(PostProcessPaymentRequest postProcessPaymentRequest){      // some code      string url = protocol + host + "/" + "PaymentCODBooking/ProcessInternetPayment";    _httpContextAccessor.HttpContext.Response.Redirect(url);    return;}ConfirmOrder你可以在行动中找到这些行。之后应用会丰富到这里PostProcessPayment。重定向在这里执行:if (_webHelper.IsRequestBeingRedirected || _webHelper.IsPostBeingDone){    //redirection or POST has been done in PostProcessPayment    return Content("Redirected");}

慕哥6287543

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

大话西游666

将 PaymentMethodType 更改为 PaymentMethodType.Redirection 它会起作用
打开App,查看更多内容
随时随地看视频慕课网APP