Personnalisation du flux commercial pour le traitement des paiements
Si le flux commercial fourni par règles de paiement ne répond pas à vos besoins métier, vous pouvez personnaliser le flux commercial utilisé pour le traitement des paiements.
Procédure
-
Identifiez votre scénario métier.
Dans le scénario métier, déterminez quelles instructions de tâche d'événement de paiement des règles de paiement seront appelées. Par défaut, les instructions de tâche suivantes sont appelées :
- La commande PrimePaymentCmd est appelée lors de la capture de commande
- La commande ReservePaymentCmd est appelée au niveau de ReleaseToFulfillment
- La commande FinalizePaymentCmd est appelée lors de la confirmation de l'expédition
Si nécessaire, vous pouvez personnaliser ces instructions de tâche. -
Identifiez vos exigences métier en matière de remboursement.
Par défaut, lorsqu'un retour est soumis, la commande PrimeRefundCmd est appelée pour créer une instruction de remboursement. Une instruction de remboursement unique par retour est prise en charge. La commande FinalizeRefundCmd est appelée lorsque le retour est fermé et crédité par le travail du planificateur ReturnCreditAndCloseScanCmd. Pour prendre en charge d'autres fonctions, personnalisez ces instructions de tâche liées au remboursement.
Scénarios métier de personnalisation classiques
De nombreux sites utilisent HCL Commerce comme système de capture de commande. La commande est distribuée et gérée par un ERP, ou système de gestion des commandes. La liste suivante décrit un scénario classique :
- Une commande est capturée par HCL Commerce. Lorsque la commande est soumise, le paiement est autorisé avec le montant total de la commande. Ensuite, la commande est transférée au système externe.
- Une fois la commande distribuée par le système de gestion des commandes externes, un message de confirmation d'expédition est transmis à HCL Commerce pour capturer le paiement des articles de commande expédiés dans ce package.
- Lors de la soumission de commande, la commande ProcessOrderCmdImple appelle la commande PrimePaymentCmd pour traiter le paiement, car le montant total de la commande doit être traité. Personnalisez la méthode getInitialAmount() de la commande ProcessOrderCmdImple pour obtenir le montant total de cette commande.
- Lorsque la confirmation d'expédition est reçue par HCL Commerce, les informations relatives à la commande sont mises à jour dans la base de données HCL Commerce. Le paiement des articles de commande à expédier doit être capturé lors de cette phase.
- Vous devez disposer d'une commande pour mettre à jour les informations relatives à la commande dans HCL Commerce.
- Dans cette commande, appelez ReservePaymentCmd et FinalizePaymentCmd pour capturer le paiement de cette commande à expédier.
- Appelez ReservePaymentCmd pour traiter l'événement de paiement ReservePayment à l'aide de l'exemple de code suivant.
Dans cet exemple de code, shipmentList est un HashMap contenant tous les articles de commande à expédier à ce moment, où la clé est l'ID d'expédition, et où la valeur est le montant total de l'expédition. Pour les sites utilisant le système de stock ATP, l'ID d'expédition peut être l'ID d'exécution de commande. Pour le stock non ATP, l'ID d'expédition peut être n'importe quel identificateur de cette expédition. En outre, dShipmentTotal est le montant total des articles de commande expédiés précédemment de cette commande, qui s'ajoute au montant total des articles de commande à expédier cette fois-ci.ReservePaymentCmd cmd = (ReservePaymentCmd)CommandFactory.createCommand(ReservePaymentCmd.NAME,storeId); cmd.setCommandContext(getCommandContext()); cmd.setOrderId(ordersId); cmd.setReleases(shipmentList); cmd.setReservationAmount(dShipmentTotal); cmd.execute(); - Immédiatement après, la commande FinalizePaymentCmd est appelée au niveau du même appelant pour chaque envoi, en utilisant l'exemple de code suivant respectivement :
Dans cet exemple de code, shipmentId correspond à l'identificateur de cette expédition utilisée dans la commande ReservePaymentCmd ci-dessus. En outre, shipmentAmount est le montant total de cette expédition.FinalizePaymentCmd cmd = (FinalizePaymentCmd) CommandFactory.createCommand(FinalizePaymentCmd.NAME, storeId); cmd.setOrderId(orderId); cmd.setReleaseId(shipmentId); cmd.setFinalizationAmount(shipmentAmount); cmd.setCommandContext(getCommandContext()); cmd.execute();
- Appelez ReservePaymentCmd pour traiter l'événement de paiement ReservePayment à l'aide de l'exemple de code suivant.
- Si vous prenez en charge plusieurs envois et effectuez des dépôts de paiement par expédition, il y aura plusieurs autorisations de paiement pour un seul mode de paiement. Vous pouvez configurer HCL Commerce pour sélectionner le paiement approprié sur lequel effectuer l'action de dépôt de paiement pour l'expédition en cours. Cela réduit les transactions et peut réduire les frais inutiles pour l'utilisation du réseau de paiement. Pour configurer HCL Commerce afin de sélectionner les paiements pour l'expédition en cours, enregistrez la classe d'implémentation de la commande DeterminedOrtedPaymentsCmd, qui établit une relation entre les expéditions et les actions de paiement. Enregistrez l'instruction de tâche DeterminedPaymentsCmdImple à l'aide d'une instruction SQL similaire à l'exemple suivant :
insert into REGCMD (STOREENT_ID,INTERFACENAME,CLASSNAME,TARGET,OPTCOUNTER) values(storeID,'com.ibm.commerce.payment.rules.commands.DetermineSortedPaymentsCmd', 'com.ibm.commerce.payment.rules.commands.DetermineSortedPaymentsCmdImpl', 'Local',0);