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’attribut ALMA_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”.