Captura de pago
La confirmación de pago es la última etapa de la captura del pedido. Por defecto, Sterling Store Engagement admite métodos de pago como efectivo, tarjetas regalo y tarjetas de crédito. Las implementaciones de salida de usuario ficticias se utilizan para dar soporte a la autorización y liquidación de pago con tarjeta de crédito y métodos de pago con tarjeta de regalo. Los tipos de pago adicionales están soportados en la página Capturar pago a través de la personalización.
- Se llama a la API
getCompleteOrderDetailspara recuperar el importe que el cliente debe pagar para formalizar el pedido y los métodos de pago que se han utilizado si ya se ha realizado algún pago. - Se llama a la API
getPaymentTypeListpara recuperar los métodos de pago permitidos por la empresa. En esta lista, puede seleccionar un método de pago para añadir al pedido.Nota: En esta página sólo se muestran los tipos de pago que están soportados a través de la personalización. - Se llama a la API
getRuleDetailsconRuleSetFieldName="ISF_STORE_ALLOW_ADDR_CAP_FOR_CC"para comprobar si es necesaria la captura de dirección al capturar la información de tarjeta de crédito para el pago. - Se llama a la API
capturePaymentpara añadir los métodos de pago a la orden, en función del tipo de información de método de pago que se pasa. - Se llama a la API
processOrderPaymentspara invocar las APIrequestCollection()yexecuteCollection()dentro de una única API. Se llama después de cada llamada de API decapturePaymentsatisfactoria. - La API de
confirmDraftOrderconfirma la finalización de un borrador de orden y lo mueve al estado Creado. Sólo se llama después de la primera llamada de API deprocessOrderPaymentssatisfactoria. - Se llama a la API
changeOrderStatusal final para cambiar el estado de las líneas de pedido de Realizar de Creado a Llevado.
Supuestos/Limitaciones
- Una vez realizado el pago parcial de un pedido, no puede volver a la página Ver carro actualmente.
- El borrador de orden se confirma tan pronto como usted hace un pago en la orden. Las líneas de pedido de transporte se mueven al estado Casado una vez que el importe del pedido se ha pagado por completo.
Adición de métodos de pago a un pedido
La API de getPaymentTypeList recupera los métodos de pago permitidos por la empresa.
Puede seleccionar un método de pago pulsando el icono + junto a un método de pago. El cliente puede utilizar uno o más métodos de pago para realizar el pago. Después de seleccionar un método de pago, puede añadir el importe que se va a pagar utilizando el método de pago seleccionado.
La API de capturePayment guarda el método de pago en la orden y se ocupa de cualquier tipo de pago externo. La API processOrderPayment se invoca inmediatamente después de la API capturePayment para manejar la autorización y el cobro del importe pagado utilizando el método de pago seleccionado.
Una vez que se realiza un pago parcial para un borrador de orden, se invoca la API confirmDraftOrder para confirmar la orden. Sin embargo, el proceso de captura de pedidos no se completa hasta que se pague el importe total del pedido. Se visualiza un mensaje de banner de información para informar sobre el importe de saldo que se va a recopilar para el pedido.
El cliente puede optar por pagar utilizando varios métodos de pago y distribuir los cargos entre tarjetas de crédito, efectivo o tarjetas de regalo. Después de realizar el pago parcial o total en el pedido, se calcula el importe pendiente en el pedido. En caso de que haya algún importe pendiente para recopilar en la orden, se muestra un banner de información para ayudar al empleado de tienda a recopilar el mismo.
Cuando se paga el importe total debido en la orden, se invoca la API changeOrderStatus para cambiar el estado de las líneas de orden de transporte de CREATED al estado CARRIED . Esta API sólo se invoca si la orden contiene líneas de transporte. La API changeOrderStatus busca la configuración de los tipos de inventario de estado y ajusta el suministro de inventario en consecuencia para las líneas de transporte.
Además, se registran escuchas de confirmación (OMPSIMChangeOrderStatusRestCommitListener) con la API changeOrderStatus para publicar actualizaciones de inventario en el servicio de gestión de inventario de la tienda. El OMPSIMChangeOrderStatusRestCommitListener La clase es responsable de publicar actualizaciones de inventario en Store Inventory Management invocando la API de eliminación de inventario de manera sincrónica en Store Inventory Management.
La API changeOrderStatus lee el ShipNode de las líneas de pedido de acarreo, si las hay, y comprueba si el nodo tiene habilitada la Gestión de Inventario de Tienda (SIM). En caso afirmativo, la dirección OMPSIMChangeOrderStatusRestCommitListener está registrada para publicar las actualizaciones de inventario en la Gestión de Inventario de Tiendas. Los ajustes de inventario en la gestión de existencias de la tienda se realizan en tiempo real. Cualquier error al ajustar el inventario en la Gestión de Inventario de la Tienda provocará fallos en el proceso de captura de pedidos.
La secuencia de cobro configurada en el Centro de Negocios Sterling tiene prioridad. La secuencia en la API capturePayment se tiene en cuenta
si hay un empate en los números de secuencia. Por ejemplo, si tiene
varios métodos de pago del mismo tipo o si varios métodos de pago
tienen el mismo número de secuencia. La API capturePayment tiene en cuenta
las variables fundsAvailable, RemainingAmountToAuth y
otras para calcular el límite máximo de cargo de un método de pago.
Si el cliente desea cambiar el importe que se carga en un método de pago existente, el atributo RequestedAmount se actualiza automáticamente. Se llama a la API capturePayment para tener en cuenta la corrección y actualizar los atributos MaxChargeLimits y RemainingAmountToAuth como corresponda.
Después de realizar un pago parcial en el pedido, el cliente puede optar por cancelar el pedido. En este caso, como empleado de tienda, puede cancelar la orden eligiendo una razón de cancelación adecuada. La API changeOrder se invoca para cancelar el pedido y la API processOrderPayments se invoca para procesar el reembolso del pago parcial. Puede ver el resumen de reembolso después de la cancelación correcta del pedido. El resumen de reembolso proporciona una lista de métodos de pago que se han utilizado para pagar el pedido y también lista el método de pago que se utiliza para el reembolso en función de la configuración del reembolso. Si el reembolso es a través de efectivo, usted tiene que entregar el importe especificado en el resumen de reembolso como efectivo al cliente.
Efectivo
capturePayment con la entrada tal como se muestra en el ejemplo siguiente:{
"Order":{
"OrderHeaderKey":"order_id",
"EnterpriseCode":"enterprise_code",
"PaymentMethods":{
"PaymentMethod":[
{
"PaymentType":"CASH",
"PaymentTypeGroup":"OTHER",
"RequestedAmount":"100.00",
"PaymentReference1":"Cash for Charge",
"Operation":"Collect"
}
]
}
}
}- Si el importe recibido es igual al total del pedido, el pedido se confirma y se abre la página Resumen del pedido.
- Si el importe recibido es menor que el total de la orden, el importe debido se actualiza para visualizar el importe del saldo. Se visualiza un mensaje de aviso para mostrar el importe debido. Ahora puede seleccionar un nuevo método de pago para pagar el importe debido.
- No puede especificar un importe mayor que el total del pedido.
- Si el importe recibido debe cargarse y autorizarse, es decir, si se utiliza para pagar las líneas de orden de transporte y envío o recogida, el pago se divide en dos objetos y se añade la entrada siguiente a la matriz
Payment method:{ "PaymentType":"CASH", "PaymentTypeGroup":"OTHER", "RequestedAmount":"100.00", "PaymentReference1":"Cash for Charge", "Operation":"Collect" }
Tarjetas regalo
invokeUE con la salida de usuario YFSGetFundsAvailableUE . En función de la respuesta recibida, se realizan las siguientes acciones:- Si el importe del saldo disponible en la tarjeta regalo es mayor que 0, el campo Importe y el botón Confirmar están habilitados.
- Si el importe del saldo disponible en la tarjeta regalo es igual a 0, se muestra un mensaje de error adecuado.
- Si el importe del saldo disponible en la tarjeta regalo es menor que el importe debido, un importe igual al importe disponible en la tarjeta regalo se actualiza automáticamente en el campo Importe y puede confirmar el pago.
- Se muestra un mensaje de error si especifica una cantidad mayor que la cantidad disponible en la tarjeta regalo o la cantidad debida, la que sea menor.
- Si el importe recibido se va a cargar y autorizar, es decir, si se está utilizando para pagar tanto las líneas de pedido de transporte como de envío o recogida, el pago se divide en dos objetos y se añade la entrada siguiente a la matriz
Payment method:{ "Order":{ "OrderHeaderKey":"order_id", "EnterpriseCode":"enterprise_code", "PaymentMethods":{ "PaymentMethod":[ { "PaymentType":"GIFT_CARD", "PaymentTypeGroup":"OTHER", "RequestedAmount":"100.00", "PaymentReference1": giftCardNumber + 'ForCharge', "PrimaryAccountNo": giftCardNumber, "Operation":"Collect" }, { "PaymentType":"GIFT_CARD", "PaymentTypeGroup":"OTHER", "RequestedAmount":"100.00", "PaymentReference1": giftCardNumber + 'ForAuth', "PrimaryAccountNo": giftCardNumber, "Operation":"Manage" } ] } } }
Tarjetas de crédito
{
PaymentType: 'CREDIT_CARD',
Operation: (this.orderDetails.RemainingFinancialTotals.RemainingToCharge > 0) ? 'Collect' : 'Manage'
RequestedAmount: 100,
CreditCardExpDate: '',
CreditCardNo: '1234', (random 4 digits)
CreditCardType: '',
FirstName: '',
MiddleName: '',
LastName: '',
SecureAuthenticationCode: '',
PaymentReference1: '',
PaymentReference2: '',
PaymentReference3: '',
PaymentReference4: '',
PaymentReference5: '',
PaymentReference6: '',
PaymentReference7: '',
PaymentReference8: '',
PaymentReference9: '',
DisplayPaymentReference1: ''
};- Si el importe recibido se va a cargar y autorizar, es decir, si se está utilizando para pagar tanto líneas de transporte como de envío o recogida, se añaden
RequestedAmount = charged amountySecondaryAmount = (RequestedAmount - RemainingToCharge). - El servicio
credit-card-data.service.tsse añade al componente de tarjeta de crédito. Este servicio se utiliza para pasar los detalles de la tarjeta de crédito al componente principal de la tarjeta de crédito. De forma predeterminada, los datos ficticios se pasan desde ese servicio. Sin embargo, esto se puede ampliar para devolver datos de una API y los datos devueltos se añaden al objetoPaymentMethod.
WSC_STORE_ALLOW_ADDR_CAP_FOR_CC se establece en true, la captura de dirección es obligatoria para los pagos con tarjeta de crédito.- Si una dirección de facturación (
PersonInfoBillTo) está disponible en el pedido, se utiliza la dirección de facturación. - Si el cliente está identificado y la dirección de facturación se establece como predeterminada (
isDefaultBillTo=true), esta dirección se utiliza como dirección de facturación. Es decir, si el pedido contienePersonInfoBillTo, se utiliza esta información. - Si hay una dirección de envío (
PersonInfoShipTo) disponible para el pedido, esta dirección se utiliza como dirección de facturación si se seleccionabillToSameAsShipTo.Si
billToSameAsShipTono está seleccionado, se visualiza una opción para añadir una dirección de facturación y se captura una nueva dirección de facturación para el método de pago.
Proceso de pago
La API
processOrderPayments maneja todas las autorizaciones y calcula
el importe real que se debe recopilar en cualquier punto mientras se procesa la orden. Se tienen en cuenta inmediatamente para los pagos
todos los métodos de pago que están correctamente autorizados.
Si un método de pago falla la autorización, se le solicitará que arregle el método de pago o que utilice un método de pago diferente. Si el sistema de verificación de pago está inactivo, se tiene en cuenta de todas formas el método de pago. Sin embargo, la autorización se produce más tarde a través de los agentes de proceso de pago.
Basándose en los resultados de la API de processOrderPayments , si todos los métodos de pago se procesan correctamente, el valor del atributo PaymentTransactionSuccessful se establece en Y y se confirma la orden.
Si alguno de los métodos de pago no es satisfactorio, el valor del atributo PaymentTransactionSuccessful se establece en N. Se visualiza un mensaje adecuado para indicar que el pago no se ha procesado correctamente. El mensaje que se devuelve en el elemento PaymentTransactionError se visualiza para indicar por qué se revoca el método de pago. En función del motivo, la información relevante se puede modificar, por ejemplo, la fecha de caducidad de la tarjeta, la dirección de facturación o las referencias de pago.
Los identificadores exclusivos no se pueden modificar. Por ejemplo, si el número de tarjeta de crédito se ha especificado incorrectamente, el método de pago se elimina o se suspende y se debe añadir un nuevo método de pago.
executeCollection llama a una de las siguientes rutinas de usuario para cada método de pago de la orden que se basa en el atributo PaymentTypeGroup del método de pago.YFSCollectionCreditCardUEYFSCollectionCustomerAccountUEYFSCollectionOthersUEYFSCollectionStoredValueCardUE
Manejo de errores de pago
Cuando los pagos se confirman por primera vez para un pedido, la API de processOrderPayments maneja todas las autorizaciones y calcula el importe real que se debe recopilar en cualquier momento mientras se procesa el pedido. La API, a su vez, llama a las salidas de usuario que validan los métodos de pago y devuelve errores, si los pagos fallan la validación.
El elemento PaymentTransactionError
de la salida de la API contiene los errores. Se tienen en cuenta inmediatamente para los pagos
todos los métodos de pago que están correctamente autorizados. Si un método de pago falla la autorización, se le solicitará que arregle el método de pago o que utilice un método de pago diferente.
Si el sistema de verificación de pago está inactivo, se tiene en cuenta de todas formas el método de pago. Sin embargo, la autorización se produce más tarde a través de los agentes de proceso de pago. Cuando se vuelve a cargar la página Capturar pago , los métodos de pago que han devuelto errores en la transacción anterior se recuperan basándose en el estado establecido para cada uno de los métodos de pago.
No se llama de nuevo a la API processOrderPayments para validar los métodos de pago que existen en la orden. Sin embargo, cuando arregla los métodos de pago erróneos y aplica los cambios, se llama a la API processOrderPayments para validar los pagos.
Captura y procesamiento de pagos en diferentes escenarios
- Ordenar sólo con líneas de pedido de carro
En Llevar pedidos, los clientes ordenan artículos en una tienda y salen de la tienda con los artículos. En tales casos, existe una liquidación inmediata en las líneas de pedido. El importe a pagar por las líneas de pedido de Carry se carga en el momento de la compra. Los clientes pueden utilizar los métodos de pago disponibles para completar el pago de las líneas de pedido de la tarjeta.
- El total de la orden se debe liquidar, recopilar o cargar para confirmar la orden.
- El atributo
RemainingFinancialTotals.RemainingToChargese utiliza para el importe que se va a cargar. Operation=Collectse pasa al capturar el pago independientemente del método de pago utilizado.- La captura de pago se marca como fallida en caso de errores de pago.
- El atributo
- El importe de línea de pedido de transporte se puede dividir en varios métodos de pago y se carga cada método de pago.
- Los cargos de línea de pedido, descuentos e impuestos se ajustan automáticamente al subtotal de línea. El total de línea de pedido de transporte es una parte del grupo
InPerson=YdeRemainingFinancialTotalsy el importe se rellena en el atributoRemainingToCharge. - Los cargos de cabecera de orden aplicados en el pedido se toman como parte del grupo
InPerson=NdeRemainingFinancialTotalsy el importe se llena en el atributoRemainingToAuthorize. Este importe también se carga en el método de pago seleccionado en caso de orden con líneas de transporte solamente.
- El total de la orden se debe liquidar, recopilar o cargar para confirmar la orden.
- Orden con líneas de pedido mixtas
- En el caso de líneas mixtas, el importe de la línea de carga se carga, se recauda o se liquida en el momento de la compra para el método de pago seleccionado pasando la operación como
Collect. - Para el resto de las líneas de pedido, es decir, Recogida y Envío, el importe correspondiente proporcionado por el atributo
RemainingFinancialTotals.RemainingToAuthroizese utiliza para la autorización pasando la operación comoManage. - En función de la configuración del tipo de pago, este importe se puede cargar o utilizar para fines de autorización. La API
capturePaymenty la APIprocessOrderPaymentsse invocan para procesar el pago basándose en la configuración del tipo de pago. - Los cargos, descuentos e impuestos de línea de pedido se ajustan automáticamente al subtotal de línea de pedido. Para líneas de pedido de recogida y envío, el total de línea es una parte del grupo
InPerson=NdeRemainingFinancialTotalsy el importe se llena en el atributoRemainingToAuthrorize. - Los cargos de cabecera de orden aplicados a la orden forman parte del grupo
InPerson=NdeRemainingFinancialTotalsy el importe se rellena en el atributoRemainingToAuthorize.
- En el caso de líneas mixtas, el importe de la línea de carga se carga, se recauda o se liquida en el momento de la compra para el método de pago seleccionado pasando la operación como
- Cancelación del pedido después del pago parcial
- Después de realizar un pago parcial en el pedido, el cliente puede optar por cancelar el pedido.
- Al cerrar la página Captura de pago , se muestra un mensaje. El cliente tiene la opción de continuar completando el pago o cancelar el pedido.
- Si la opción de cancelación está seleccionada, la API
CommonCodeListse utiliza conCodeType="YCD_CANCEL_REASON"para captar las razones de cancelación. - Después de elegir una opción, se utiliza la API
changeOrderpara cancelar el pedido y se llama a la APIprocessOrderPaymentspara procesar los reembolsos y mostrar el resumen de reembolso. - El empleado de tienda puede entregar el reembolso en efectivo al cliente.
- Completar captura de pedido para un pedido abandonado con pago parcial
- Una orden se considera abandonada si se realiza un pago parcial para una orden y, a continuación, se ha salido del flujo de captura de orden cerrando el navegador o debido a varias razones como, por ejemplo, una anomalía del sistema. Debido a que se realiza el pago parcial, el pedido ya está confirmado. Sin embargo, aún queda pendiente algún pago.
En tales casos, puede buscar este pedido desde el portlet Buscar pedido utilizando el número de pedido u otros criterios de búsqueda. De forma alternativa, si el cliente está identificado para el pedido, puede buscar en el historial de pedidos desde la página Perfil de cliente . Al pulsar el pedido relevante se abre la página Resumen del pedido . Aquí, se muestra un banner de notificación para completar el pago. Se abre la captura de pago y puede ayudar al cliente a pagar el importe restante y completar el proceso de captura de orden.