Personalización del flujo de negocio para el proceso de pago

Si el flujo de negocio proporcionado por las reglas de pago no satisface las necesidades de la empresa, puede personalizar el flujo de negocio que se utiliza para el proceso de pago.

Procedimiento

  1. Identifique el escenario de negocio.
    En el escenario de negocio, determine qué mandatos de tareas de sucesos de pago se invocarán con las reglas de pago. De forma predeterminada, se llaman a los siguientes mandatos de tareas:
    • PrimePaymentCmd se llama en la captura de pedido
    • ReservePaymentCmd se llama en ReleaseToFulfillment
    • FinalizePaymentCmd se llama en la confirmación de envío
    Si es necesario, puede personalizar estos mandatos.
  2. Identifique los requisitos de la empresa para el reembolso.
    De forma predeterminada, cuando se somete una devolución, se invoca PrimeRefundCmd para crear una instrucción de reembolso. Se admite una única instrucción de reembolso por cada devolución. Se invoca FinalizeRefundCmd cuando se cierra la devolución y se abona mediante el trabajo de planificador ReturnCreditAndCloseScanCmd. Para dar soporte a otras características, personalice estos mandatos de tareas relacionados con el reembolso.

Escenarios de negocio de personalización usuales

Muchos sitios utilizan HCL Commerce como sistema de captura de pedidos. El pedido se cumplimenta y se gestiona mediante una planificación de recursos empresariales (ERP) o un sistema de gestión de pedidos. En la siguiente lista se describe un escenario típico:
  • HCL Commerce captura un pedido. Cuando se somete el pedido, se autoriza el pago con el importe total del pedido. A continuación, el pedido se transfiere al sistema externo.
  • Una vez cumplimentado el pedido por el sistema de gestión de pedidos externos, se vuelve a transferir un mensaje de confirmación a HCL Commerce para capturar el pago correspondiente a los artículos del pedido enviados en este paquete.
  1. Al someter el pedido, el mandato ProcessOrderCmdImpl invoca el mandato PrimePaymentCmd para procesar el pago ya que debe procesarse el importe total del pedido. Personalice el método getInitialAmount() del mandato ProcessOrderCmdImpl para obtener el importe total de este pedido.
  2. Cuando HCL Commerce recibe la confirmación del pedido, la información relacionada con el pedido se actualiza en la base de datos de HCL Commerce. El pago de los artículos del pedido que se van a enviar necesita capturarse en esta fase.
    1. Debe tener un mandato para actualizar información relacionada con el pedido en HCL Commerce.
    2. En este mandato, llame a ReservePaymentCmd y a FinalizePaymentCmd para capturar el pago para que se envíe este pedido.
      1. Llame a ReservePaymentCmd para procesar el suceso de pago ReservePayment utilizando el siguiente ejemplo de código de ejemplo.
        ReservePaymentCmd cmd = (ReservePaymentCmd)CommandFactory.createCommand(ReservePaymentCmd.NAME,storeId);
           cmd.setCommandContext(getCommandContext());
           cmd.setOrderId(ordersId);
           cmd.setReleases(shipmentList);
           cmd.setReservationAmount(dShipmentTotal);
           cmd.execute();
        
        En este código de ejemplo, shipmentList es un HashMap que contiene todos los artículos del pedido para enviar en estos momentos, donde la clave es el ID de envío y el valor es el importe total del envío. Para sitios que utilizan el sistema de inventario ATP, el ID de envío puede ser el ID de release; para el inventario que no es ATP, el ID de envío puede ser cualquier identificador de este envío. Asimismo, dShipmentTotal es el importe total de esos artículos de pedido enviados antes de este pedido, añadiendo el importe total de artículos del pedido que se envían en estos momentos.
      2. Inmediatamente después, se llama al mandato FinalizePaymentCmd en el mismo interlocutor para cada envío, respectivamente, utilizando el código de ejemplo siguiente:
        FinalizePaymentCmd cmd = 
           (FinalizePaymentCmd) CommandFactory.createCommand(FinalizePaymentCmd.NAME, storeId); 
           cmd.setOrderId(orderId);
           cmd.setReleaseId(shipmentId);
           cmd.setFinalizationAmount(shipmentAmount);
           cmd.setCommandContext(getCommandContext());
        cmd.execute();
        
        En este código de ejemplo, shipmentId corresponde al identificador de este envío utilizado en el mandato ReservePaymentCmd anterior. Asimismo, shipmentAmount es el importe total de este envío.
    3. Si da soporte a varios envíos y realiza depósitos de pago por envío, habrá varias autorizaciones de pago con respecto a una modalidad de pago. Puede configurar HCL Commerce para que seleccione el pago apropiado con el cual se realiza la acción de depósito de pago para el envío actual. Esto reduce las transacciones y puede reducir los costes innecesarios por el uso de la red de pago. Para configurar HCL Commerce para que seleccione pagos para el envío actual, registre la clase de implementación de DetermineSortedPaymentsCmd, que crea una relación entre los envíos y las acciones de pago.
      Registre el mandato de tareas DetermineSortedPaymentsCmdImpl utilizando una sentencia SQL similar a la del siguiente ejemplo:
      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);