我正在开发一个付款网关,付款将通过将浏览器重定向到银行网站完成,付款将在那里完成,成功后它将被重定向回网站
我可以成功使用付款渲染器中的JavaScript代码重定向,但问题是订单未在重定向之前放置到银行
如何在将用户发送到银行之前下订单并获取 Order_ID
以下是我的js Code,它将用户重定向到处理重定向的特定控制器
continueToMellat: function () {
//update payment method information if additional data was changed
$.mage.redirect(url.build('redirect/redirect'));
this.selectPaymentMethod();
setPaymentMethodAction(this.messageContainer);
return false;
}
由于
答案 0 :(得分:0)
我可以在重定向之前通过将代码更改为以下内容来下订单,这将在发送到支付网关之前下订单 我现在正在尝试获取用户刚刚订购的订单ID
continueToMellat: function () {
if (this.validate() && additionalValidators.validate()) {
this.isPlaceOrderActionAllowed(false);
this.getPlaceOrderDeferredObject()
.fail(
function () {
self.isPlaceOrderActionAllowed(true);
}
).done(
function () {
self.afterPlaceOrder();
if (self.redirectAfterPlaceOrder) {
redirectOnSuccessAction.execute();
}
}
);
}
//update payment method information if additional data was changed
$.mage.redirect(url.build('redirect/redirect'));
this.selectPaymentMethod();
setPaymentMethodAction(this.messageContainer);
return false;
}
答案 1 :(得分:0)
您也许可以使用购物车ID:像
中使用的那样:getQuoteId()//vendor/magento/module-checkout/view/frontend/web/js/action/get-payment-information.js
define([
'jquery',
'Magento_Checkout/js/model/quote',
...
], function ($, quote, ...) {
'use strict';
return function (deferred, messageContainer) {
var serviceUrl;
deferred = deferred || $.Deferred();
/**
* Checkout for guest and registered customer.
*/
if (!customer.isLoggedIn()) {
serviceUrl = urlBuilder.createUrl('/guest-carts/:cartId/payment-information', {
cartId: quote.getQuoteId()
});
}
尽管可以在传递给客户端处理之前在服务器中保留订单增量ID:
__construct(\Magento\Checkout\Model\Session $checkoutSession){
$this->quote = $checkoutSession->getQuote();
}
...
$this->quote->reserveOrderId();
$orderId = $this->quote->getReservedOrderId();