Proceso de varios envíos con una sola aprobación

Puede procesar varios envíos al mismo tiempo con una única aprobación de autorización personalizando la clase PaymentEventListenerImpl.PaymentEventListenerImpl Sin personalización, la clase PaymentEventListenerImpl utiliza las reglas de pago predeterminadas y procesa varias transacciones para varios envíos.PaymentEventListenerImpl

Procedimiento

  1. Altere temporalmente finalization amount y reservation amount en la clase PaymentEventListenerImpl. Actualice el método updateAtomicPaymentAfterHashActions() para corregir el importe final del pedido.
    Utilice el ejemplo para alterar temporalmente el método 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. Abra el archivo de configuración de HCL Commerce archivo de configuración (wc-server.xml).
  3. Utilice la versión actualizada de la clase PaymentEventListenerImpl.
    Por ejemplo:
    <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. Establezca el destino en el archivo CorePaymentActions.xml.
    1. Vaya a workspace_dir/WC/xml/config/payments/edp/groups/group_name/paymentConfiguration.
    2. Establezca el destino del depósito en el archivo 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>