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

  1. Remplacez les paramètres finalization amount et reservation amount dans la classe PaymentEventListenerImpl. Mettez à jour la méthode updateAtomicPaymentAfterHashActions() pour corriger le montant final de la commande.
    Utilisez l'exemple pour remplacer la méthode updateAtomicPaymentAfterHashActions() :
    
    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);
      } 
  2. Ouvrez le fichier de configuration .
  3. Utilisez la version mise à jour de la classe PaymentEventListenerImpl.
    Par exemple :
    <component
    compClassName="com.ibm.commerce.payment.actions.commands.PaymentEventListenerImpl"
      enable="true" name="Payment Rule Listener">
      <property display="false">
        <start enabled="true"/>
        <event name="PaymentRule"/>
      </property>
    </component>
  4. Définissez la cible dans le fichier CorePaymentActions.xml.
    1. Accédez à workspace_dir/WC/xml/config/payments/edp/groups/group_name/paymentConfiguration.
    2. 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>