Configurer la Capture Diférrée sur SFCC
1 - Back-office
Après avoir installé la cartridge Alma, vous pouvez vous rendre dans votre back-office SFCC puis aller dans les "Custom Preferences" :
Merchant Tools > Site Preferences > Custom Preferences
Dans le groupe “ALMA” vous pouvez voir le champ ALMA_Deferred_Capture_Activation que vous pouvez mettre à Yes pour activer la fonctionnalité de Capture Différée.

2 - Implémentation de la capture
À titre d’exemple, nous avons fait l’implémentation de la capture via un job qui se lance de manière manuelle.
Vous pouvez modifier cette implémentation afin que la capture se produise sur l’évènement que vous avez choisi.
Voici le code du job :
exports.execute = function () {
var orders = OrderMgr.searchOrders(
"custom.ALMA_Deferred_Capture='ToCapture' and status != {0} and status != {1}",
null,
Order.ORDER_STATUS_FAILED,
Order.ORDER_STATUS_CANCELLED
);
if (orders.count > 0) {
while (orders.hasNext()) {
var order = orders.next();
var params = { external_id: order.custom.almaPaymentId };
try {
var capture = almaPaymentHelper.capturePayment(params);
almaOrderHelper.setAlmaDeferredCapture(order, 'Captured');
Logger.info('Capture payment: order id: {0} - payment id: {1} - capture id : {2}', [order.orderNo, order.custom.almaPaymentId, capture.id]);
} catch (e) {
almaOrderHelper.setAlmaDeferredCapture(order, 'Failed');
Logger.warn('Unable to capture payment: order id: {0}, payment id: {1}', [order.orderNo, order.custom.almaPaymentId]);
}
}
}
return new Status(Status.OK);
};
Les étapes importantes dans ce code sont :
- La récupération des commandes ("orders") qui ont l’attribut
ALMA_Deferred_Capture
àToCapture
. - La méthode
almaPaymentHelper.capturePayment()
. C’est cette méthode qui déclenche la capture via l’API Alma. - La méthode
almaOrderHelper.setAlmaDeferredCapture()
. Cette méthode permet de changer la valeur de l’attributALMA_Deferred_Capture
dans l’order, afin de spécifier si la capture a réussi ou s’il y a eu une erreur.
Pour la réalisation de la capture via la méthode capturePayment()
, il vous sera nécessaire de passer un objet en paramètre avec un seul attribut : external_id
que vous pouvez retrouver dans l’objet "order", comme ceci order.custom.almaPaymentId
.
3 - Fonctionnement dans le back-office
Avant d’être “capturée”, votre commande est à l’état "ToCapture".

Une fois le job de capture effectué ou toute autre tâche qui aura été configurée pour cela, deux statuts sont possibles : "Captured" et "Failed".

Si le statut est à l’état "Failed", il vous faudra vérifier pourquoi (dans vos logs par exemple, selon l’implémentation). Une fois corrigé, repassez le statut en "ToCapture" afin que la commande soit capturée à la prochaine exécution de votre job de capture.
Afin de vous assurer que vous n’avez pas de commandes à l’état de capture "Failed", vous pouvez filtrer vos commandes sur le champ “Capture Status”.

Updated 3 days ago