Traitement de plusieurs envois avec une seule approbation
Vous pouvez traiter plusieurs envois à la fois avec une seule autorisation d'approbation en personnalisant la classe PaymentEventListenerImpl. Sans personnalisation, la classe PaymentEventListenerImpl utilise les règles de paiement par défaut et traite plusieurs transactions pour plusieurs envois.
Procédure
-
Remplacez les paramètres
finalization amountetreservation amountdans la classe PaymentEventListenerImpl. Mettez à jour la méthodeupdateAtomicPaymentAfterHashActions()pour corriger le montant final de la commande.Utilisez l'exemple pour remplacer la méthodeupdateAtomicPaymentAfterHashActions():protected void updateAtomicPaymentAfterHashActions(HashMap actionLists, int phase) throws InvalidRequestException, InvalidDataException, ObjectCannotBeFoundException, EDPException {PaymentActionData actionData = null; List actions = null; int numberOfActions = 0; Iterator iter = actionLists.keySet().iterator(); while (iter.hasNext()) { Long piId = (Long) iter.next(); actions = (List) actionLists.get(piId); numberOfActions = actions.size(); // Loop through the array of Action objects for (int j = 0; j < numberOfActions; j++) { actionData = (PaymentActionData) actions.get(j); if(actionData.getActionName().equals("DepositAction")) { Long apKeyId = actionData.getAtomicPaymentId(); AtomicPaymentData payment = getOMF().getAtomicPayment(apKeyId); if(phase == Constants.PHASE_FINALIZATION) { BigDecimal amount = actionData.getAmount().add(payment.getFinalizationAmount()); actionData.setAmount(amount); } if(phase == Constants.PHASE_RESERVATION) { BigDecimal amount = actionData.getAmount().add(payment.getReservationAmount()); actionData.setAmount(amount); } } } }super.updateAtomicPaymentAfterHashActions(actionLists, phase); } - Ouvrez le fichier de configuration .
-
Utilisez la version mise à jour de la classe PaymentEventListenerImpl.
Par exemple :
<componentcompClassName="com.ibm.commerce.payment.actions.commands.PaymentEventListenerImpl" enable="true" name="Payment Rule Listener"> <property display="false"> <start enabled="true"/> <event name="PaymentRule"/> </property> </component> -
Définissez la cible dans le fichier CorePaymentActions.xml.
- Accédez à workspace_dir/WC/xml/config/payments/edp/groups/group_name/paymentConfiguration.
- Définissez la cible de dépôt dans le fichier CorePaymentActions.xml :
<TargetDeposited> ... <CurrentApproved> <AmountLessThanRequested> <Action name="Deposit" amount="existing" target="existing"/> <Action name="Approve" amount="delta" target="additional"/> <Action name="Deposit" amount="delta" target="existing"/> </AmountLessThanRequested> <AmountEqualsRequested> <Action name="Deposit" amount="existing" target="existing"/> </AmountEqualsRequested><AmountGreaterThanRequested> <Action name="Deposit" amount="requested" target="existing"/> </AmountGreaterThanRequested></CurrentApproved> ... </TargetDeposited>