Nopcommerce - 自定义支付方式的 PostProcessPayment 不重定向到支付网关 URL
Nopcommerce - Custom Payment Method's PostProcessPayment not redirecting to Payment Gateway URL
我正在为 Nopcommerce 网站开发自定义支付方式插件。这是支付处理器 class 代码:
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
正在正确形成。但是当在结帐页面上单击 CONFIRM
按钮时,页面不会重定向到 url
。它只是停留在页面上或有时会清空购物车。这意味着正在创建订单而无需转到支付网关。
更新
重定向在 CheckoutController
的 ConfirmOrder
操作中也不起作用。
if (_webHelper.IsRequestBeingRedirected || _webHelper.IsPostBeingDone)
{
//redirection or POST has been done in PostProcessPayment
//return Content("Redirected");
return Redirect("http://localhost:15536/PaymentCODBooking/ProcessInternetPayment");
}
重定向必须是操作结果。例如在控制器的动作中我们这样写:
return Redirect("http://www.google.com");
没有 return
关键字,它不会重定向。
要从插件控制器重定向,请查看 \Plugins\Nop.Plugin.Payments.PayPalStandard\Controllers\PaymentPayPalStandardController.cs class 开箱即用的 PayPalStandard 插件
如果您正在尝试开发插件,最好不要更改 nopCommerce 源代码。您可以在插件本身中执行重定向,不要更改 CheckoutController
的 ConfirmOrder
操作。将您的代码更改为:
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");
}
谢谢大家的帮助。您的回答给了我一些提示并找到了问题所在。问题是我忘记设置 public PaymentMethodType PaymentMethodType => PaymentMethodType.Redirection;
。它被设置为 Standard
导致了问题。
将 PaymentMethodType 更改为 PaymentMethodType.Redirection 它会起作用
我正在为 Nopcommerce 网站开发自定义支付方式插件。这是支付处理器 class 代码:
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
正在正确形成。但是当在结帐页面上单击 CONFIRM
按钮时,页面不会重定向到 url
。它只是停留在页面上或有时会清空购物车。这意味着正在创建订单而无需转到支付网关。
更新
重定向在 CheckoutController
的 ConfirmOrder
操作中也不起作用。
if (_webHelper.IsRequestBeingRedirected || _webHelper.IsPostBeingDone)
{
//redirection or POST has been done in PostProcessPayment
//return Content("Redirected");
return Redirect("http://localhost:15536/PaymentCODBooking/ProcessInternetPayment");
}
重定向必须是操作结果。例如在控制器的动作中我们这样写:
return Redirect("http://www.google.com");
没有 return
关键字,它不会重定向。
要从插件控制器重定向,请查看 \Plugins\Nop.Plugin.Payments.PayPalStandard\Controllers\PaymentPayPalStandardController.cs class 开箱即用的 PayPalStandard 插件
如果您正在尝试开发插件,最好不要更改 nopCommerce 源代码。您可以在插件本身中执行重定向,不要更改 CheckoutController
的 ConfirmOrder
操作。将您的代码更改为:
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");
}
谢谢大家的帮助。您的回答给了我一些提示并找到了问题所在。问题是我忘记设置 public PaymentMethodType PaymentMethodType => PaymentMethodType.Redirection;
。它被设置为 Standard
导致了问题。
将 PaymentMethodType 更改为 PaymentMethodType.Redirection 它会起作用