'use strict';
/**
* Controller for PAYMENT_HOSTED_TOKENIZATION_PAGE_CREDIT_CARD
*
* @module controllers/PAYMENT_HOSTED_TOKENIZATION_PAGE_CREDIT_CARD
*/
var app = require('sitegenesis_controllers/cartridge/scripts/app');
var guard = require('sitegenesis_controllers/cartridge/scripts/guard');
/* API Includes */
var PaymentMgr = require('dw/order/PaymentMgr');
var OrderMgr = require('dw/order/OrderMgr');
var Transaction = require('dw/system/Transaction');
var URLUtils = require('dw/web/URLUtils');
var libPayment = require('int_payment_core/cartridge/scripts/lib/libPayment.ds');
var parameterMap = request.httpParameterMap;
var SubmitImpl = app.getModel('Order').submit;
/**
* Handle Asynchronous Credit Card Payment
*/
function CheckDirectLinkPayment(args) {
var ret = {};
if(!empty(parameterMap.orderNo.stringValue)){
var OrderNo = parameterMap.orderNo.stringValue;
var PM = parameterMap.pmID.value;
} else {
var OrderNo = parameterMap.orderID.stringValue;
var PM = parameterMap.PM.value;
}
ret.Order = OrderMgr.getOrder(OrderNo);
var ShaCode = libPayment.createShaForUrls(order);
if(ShaCode == parameterMap.tn.toString()){
Transaction.wrap(function () {
ret.Order.custom.ecommerceResponseCount = 1;
session.forms.billing.fulfilled.value = true;
});
if(ret.Order.status == dw.order.Order.ORDER_STATUS_CREATED) {
var result = libPayment.GetPaymentDirectLinkOrderData(ret.Order, request.locale, PM);
ret.Status = result.Status;
ret.PaymentMethodID = result.PaymentMethodID;
ret.ErrorStatus = result.ErrorStatus;
ret.PaymentStatus = result.PaymentStatus;
ret.ResultStatusCheck = result.ResultStatusCheck;
if(result.success) {
ret.EndNode = 'success';
} else {
if(result.ResultStatusCheck == "RETRY") {
ret.EndNode = 'success';
} else if(result.ErrorStatus == "2") {
ret.EndNode = 'declined';
} else if(result.ErrorStatus == "1") {
ret.EndNode = 'declined';
} else {
ret.EndNode = 'canceled';
}
}
} else {
if(ret.Order.status != dw.order.Order.ORDER_STATUS_FAILED) {
response.redirect(URLUtils.https('Ingenico-AcceptEcommerce'));
} else {
ret.EndNode = 'declined';
}
}
} else {
ret.Order = null;
ret.EndNode = 'error';
}
return ret;
}
/**
* This methode renderes the appropriate 3d secure redirect template for the order status
*/
function renderTemplate(){
var res = CheckDirectLinkPayment();
if(res.EndNode == 'success') {
SubmitImpl(res.Order, true);
} else if(res.EndNode == 'decline') {
app.getView({
Order : res.Order
}).render('ecommerceRedirectDecline');
} else if(res.EndNode == 'error') {
app.getView({
Order : res.Order
}).render('ecommerceRedirectDecline');
} else if(res.EndNode == 'canceled') {
app.getView({
Order : res.Order
}).render('ecommerceRedirectCanceled');
}
}
/**
* Accept 3DS Return Urls
*/
function 3DSAccept() {
Transaction.wrap(function () {
libPayment.SetAuthorizedPayment(parameterMap);
});
renderTemplate();
}
/**
* Decline 3DS Return Urls
*/
function 3DSDecline() {
session.custom.PaymentProcessStarted = null;
renderTemplate();
}
/**
* Canceled 3DS Return Urls
*/
function 3DSCancel() {
session.custom.PaymentProcessStarted = null;
renderTemplate();
}
/**
* Excepted 3DS Return Urls
*/
function 3DSExcept() {
session.custom.PaymentProcessStarted = null;
renderTemplate();
}
/*
* Export the private controller methods
*/
exports.CheckDirectLinkPayment = CheckDirectLinkPayment;
/*
* Export the publicly available controller methods
*/
/** Accept 3DS Return Urls
* @see module:controllers/PAYMENT_HOSTED_TOKENIZATION_PAGE_CREDIT_CARD~3DSAccept */
exports.3DSAccept = guard.ensure(['https'], 3DSAccept);
/** Decline 3DS Return Urls
* @see module:controllers/PAYMENT_HOSTED_TOKENIZATION_PAGE_CREDIT_CARD~3DSDecline */
exports.3DSDecline = guard.ensure(['https'], 3DSDecline);
/** Canceled 3DS Return Urls
* @see module:controllers/PAYMENT_HOSTED_TOKENIZATION_PAGE_CREDIT_CARD~3DSCancel */
exports.3DSCancel = guard.ensure(['https'], 3DSCancel);
/** Excepted 3DS Return Urls
* @see module:controllers/PAYMENT_HOSTED_TOKENIZATION_PAGE_CREDIT_CARD~3DSExcept */
exports.3DSExcept = guard.ensure(['https'], 3DSExcept);