Configurer la Capture Différé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") dont l’attribut ALMA_Deferred_Capture a pour valeur 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”.

📘

Fonctionnalité désactivée par défaut

Pour pouvoir utiliser les paiement différés "sur événement", contactez notre support ou votre contact commercial Alma.

4 - Fonctionnement de la capture partielle

Vous avez la possibilité de ne capturer qu’une partie de la commande.

Pour cela, vous devez vous rendre dans

Merchant Tools > Ordering > Orders

Sélectionnez la commande que vous souhaitez, puis, dans l’onglet Attributes, il vous faut remplir le champ Amount for partial capture avec le montant (en euros) que vous souhaitez capturer. Exemple:

Il faut bien laisser le Status en ToCapture et ne pas oublier de sauvegarder votre modification.

Une fois que le "job" de capture sera effectué, votre statut passera à PartialCaptured et le champ Amount captured prendra comme valeur le montant que vous avez saisi précédemment.

🚧

Nous ne prenons pas en charges le multi-captures.