SFCC Cartridge
...
Post-Auth Credit Card
SFRA
5 min
sfra post auth integration overview the below code and instructions are based on the sfra structure and the section includes a list of all affected controllers the relevant sfra section of the forter cartridge can be found using the following path in the cartridge integration of the cartridge into your storefront application does not require any modifications to your core cartridge instead, we recommend overwriting the existing code in the cartridge in cases where the storefront application has the same controllers or templates extended or replaced, all affected code modifications must be added to the top level cartridge of the storefront application calling the fortervalidate js file note that the fortervalidate js file should be called in your actual payment gateway controller (cybersource, adyen, braintree, etc ) as part of the existing authorization flow call a require method within the actual gateway authorization in the below example, its defined as part of the function fortercall fortercall = require('int forter mfra/cartridge/scripts/pipelets/forter/fortervalidate'), mfra code example below is code from the authorize net authorize net authorize controller which is triggered as part of authorization flow via the sfra integration sample authorize net checkout flow (mfra based) function authorize(ordernumber, paymentinstrument, paymentprocessor) { var servererrors = \[], fielderrors = {}, error = false; try { transaction wrap(function () { paymentinstrument paymenttransaction settransactionid(ordernumber); paymentinstrument paymenttransaction setpaymentprocessor(paymentprocessor); }); var argccauth = { ordernumber ordernumber, paymentinstrument paymentinstrument }, authresponse = doauth(argccauth); if (authresponse result === false) { var argordervalidate = { ordernumber ordernumber, ordervalidateattemptinput 1 }, fortercall = require('int forter mfra/cartridge/scripts/pipelets/forter/fortervalidate'), forterdecision = fortercall validateorder(argordervalidate); // in case if no response from forter, try to call one more time if (forterdecision result === false && forterdecision ordervalidateattemptinput == 2) { var argordervalidate = { ordernumber ordernumber, ordervalidateattemptinput 2 }, fortercall = require('int forter mfra/cartridge/scripts/pipelets/forter/fortervalidate'), forterdecision = fortercall validateorder(argordervalidate); } error = true; servererrors push( resource msg('error technical', 'checkout', null) ); } if (authresponse result === true) { var argordervalidate = { ordernumber ordernumber, ordervalidateattemptinput 1 }, fortercall = require('int forter mfra/cartridge/scripts/pipelets/forter/fortervalidate'), forterdecision = fortercall validateorder(argordervalidate); // in case if no response from forter, try to call one more time if (forterdecision result === false && forterdecision ordervalidateattemptinput == 2) { var argordervalidate = { ordernumber ordernumber, ordervalidateattemptinput 2 }; fortercall = require('int forter mfra/cartridge/scripts/pipelets/forter/fortervalidate'), forterdecision = fortercall validateorder(argordervalidate); } if (forterdecision jsonresponseoutput processoraction === 'skipcapture' || forterdecision jsonresponseoutput processoraction === 'notreviewed') { error = false; } else if (forterdecision jsonresponseoutput processoraction === 'disabled' || forterdecision jsonresponseoutput processoraction === 'internalerror' || forterdecision jsonresponseoutput processoraction === 'capture') { var argcccapture = { authorizenetresponse authresponse authorizenetresponse, ordernumber ordernumber, paymentinstrument paymentinstrument }, captureresponse = docapture(argcccapture); if (captureresponse result === true) { error = false; } if (captureresponse result === false) { var argvoid = { authorizenetresponse authresponse authorizenetresponse, ordernumber ordernumber, paymentinstrument paymentinstrument }, voidresponse = dovoid(argvoid); error = true; servererrors push( resource msg('error technical', 'checkout', null) ); } } else { var argvoid = { authorizenetresponse authresponse authorizenetresponse, ordernumber ordernumber, paymentinstrument paymentinstrument }, voidresponse = dovoid(argvoid); error = true; servererrors push( resource msg('error technical', 'checkout', null) ); } } } catch (e) { error = true; servererrors push( resource msg('error technical', 'checkout', null) ); } return { fielderrors fielderrors, servererrors servererrors, error error }; } function doauth(argccauth) { var authorizenetccauthrequest = require(' /cartridge/scripts/pipelets/authorizenetccauthrequest'), authresponse = authorizenetccauthrequest execute(argccauth); return authresponse; } function docapture(argcccapture) { var authorizenetcccapturerequest = require(' /cartridge/scripts/pipelets/authorizenetcccapturerequest'), captureresponse = authorizenetcccapturerequest execute(argcccapture); return captureresponse; } function dovoid(argvoid) { var authorizenetvoidrequest = require(' /cartridge/scripts/pipelets/authorizenetvoidrequest'), voidresponse = authorizenetvoidrequest execute(argvoid); return voidresponse; } sample mfra helper script the script below is based on the cybersource checkout flow to handle returning a forter decision to the payment processor and automate the nadling of each order s ample helper script / helper script for calling forter from payment processor scripts / var fortercall = require('int forter mfra/cartridge/scripts/pipelets/forter/fortervalidate'); function callforter(authresponses, ordernumber) { 	var argordervalidate = { ordernumber ordernumber, 	 authresponses authresponses, ordervalidateattemptinput 1 }; 	try { 		 	 var forterdecision = fortercall validateorder(argordervalidate); 	 // in case if no response from forter, try to call one more time 	 if (forterdecision result === false && forterdecision ordervalidateattemptinput == 1) { 	 var argordervalidate = { 	 ordernumber ordernumber, 	 authresponses authresponses, 	 ordervalidateattemptinput 2 	 }; 	 var forterdecision = fortercall validateorder(argordervalidate); 	 } 		 	 if (forterdecision jsonresponseoutput processoraction === 'skipcapture' || forterdecision jsonresponseoutput processoraction === 'notreviewed') { 	 return forterdecision; 	 } else { 	 if (!empty(forterdecision placeordererror)) { 	 return {error true, fortererrorcode forterdecision placeordererror}; 	 } else { 	 return forterdecision; 	 } 	 } 		 	} catch (e) { 	 return {error true}; 	} }