我正在为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
答案 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 它将起作用