Ir para o conteúdo

[DESACTIVADO] Integración de Reverso V1


Una de las formas de integrarse con la aplicación de pagos Phoebus es a través de IPC. Para ello, se proporciona una biblioteca, payments-api-x.x.x.x.aar, que contiene todo el código necesario que se utilizará para dichas llamadas.

Mediante esta API es posible realizar todo el flujo de pago, es decir, confirmación (o deshacer) y reverso del pago. El pago se puede realizar con una cantidad predefinida o con una cantidad abierta, a ser ingresada por el operador de la terminal. Además, es posible informar una lista de tipos de pagos (débito, crédito, crédito en cuotas, etc.) permitidos.

Aunque esta integración se lleva a cabo a través de una API, la aplicación de pago puede mostrar información en la interfaz de la terminal, como mensajes (por ejemplo, "Insertar o deslizar la tarjeta"), o incluso solicitar información al operador (por ejemplo, CVV). Por lo tanto, durante la realización de cualquier operación, la aplicación que solicitó la operación no debe interactuar con la interfaz del dispositivo hasta que se complete la operación.

La siguiente es una especificación detallada de las operaciones disponibles.

Para la integración con la API de pagos, se proporciona la interfaz PaymentClient.

Warning

El método PaymentClient.Bind(_callback) debe ser llamado, antes de llamar a cualquier método de Integración de Pago. El bind es asincrónico, es decir, la siguiente línea después de bind() se ejecutará antes de recibir su respuesta, así que asegúrese de que antes de llamar a los métodos de integración, el enlace esté conectado.

Métodos


Suscripciones Descripción
void reversePayment(ReversePaymentRequest paymentRequest, PaymentCallback paymentCallback) Realiza el proceso de reverso de pago. (DESACTIVADO: Use reversePaymentV2)
void cancelReversePayment(String paymentId, PaymentCallback paymentCallback) Deshaga una solicitud de reverso de pago.

reversePayment() (DEPRECATED: Utilizar reversePaymentV2)

Se debe llamar a este método cuando desee realizar una solicitud de reverso de pago. Durante su ejecución, se validarán los datos de reverso, se solicitará información adicional al operador (por ejemplo, tarjeta) y se realizará la autorización del adquirente.

Tenga en cuenta que la transacción de reverso no tiene confirmación, solo deshacer. Por lo tanto, la confirmación ocurrirá de forma natural si no se envía el deshacer, dependiendo del comportamiento de cada adquirente.

También dependiendo del comportamiento de cada comprador, es posible que no se deshaga la transacción de contracargo. En este caso, los contracargos aprobados devolverán el valor false en el campo "ReversePayment.cancelable". Además, si se llama al método cancelReversePayment(), se devolverá un error específico indicando que no es posible realizar dicha operación (ver Códigos de respuesta).

Parámetros

Nombre Tipo Obligatorio Descripción
request ReversePaymentRequest Objeto de transferencia de datos que contendrá la información de la solicitud para la reversión del pago. Tenga en cuenta que no todos los parámetros son obligatorios.
callback ReversePaymentCallback Interfaz que se ejecutará para notificaciones de éxito o error del proceso de reversión.

Detalle de los parámetros

request (ReversePaymentRequest)

Nombre Tipo Obligatorio Descripción
value BigDecimal No Importe de la transacción a revertir. Si no se completa (null), la interfaz le pedirá al operador el valor. Esta información se utiliza para validar la integridad de la transacción que se invierte.
paymentId String Identificador de la transacción a revertir. El identificador referido es el que se utiliza en la aplicación de pago.
appTransactionId String Identificador de transacción integrado. El identificador referido es el de la aplicación que originó la solicitud de reverso. Debe ser la misma cantidad enviada en la transacción de pago.
ApplicationInfo.credentials Credentials Credenciales de la aplicación que solicita la operación, según lo registrado en PayStore. Básicamente, es la identificación de la aplicación y el token de acceso.
ApplicationInfo.softwareVersion String Versión de la aplicación que solicita el pago.
showReceiptView (DESACTIVADO) Boolean No La Solución siempre imprimirá el recibo.

callback (ReversePaymentCallback)

Nombre Tipo Obligatorio Descripción
onSuccess Método de notificación de éxito
ReversePayment.paymentId String Identificación de la operación de reversión para la aplicación de pago. Esta es la información que se utilizará para confirmar y deshacer.
ReversePayment.acquirerId String Identificador de la transacción de contracargo para el adquirente. Este es el identificador en el archivo proporcionado por el adquirente (EDI). De esta forma, es posible conciliar la reversión con la transacción integrada.
ReversePayment.cancelable Boolean True, si esta transacción se puede deshacer; False, de lo contrario.
ReversePayment.acquirerResponseCode String Código de respuesta del adquirente.
ReversePayment.acquirerResponseDate String Fecha/hora devuelta por el adquirente.
ReversePayment.acquirerAuthorizationNumber String Número de autorización proporcionado por el adquirente (que se muestra en el recibo del Cliente Titular de la Tarjeta).
ReversePayment.Receipt.clientVia String No Contenido del recibo - del cliente.
ReversePayment.Receipt.merchantVia String No Contenido del recibo - del establecimiento.
onError Método de notificación en caso de error.
ErrorData.paymentsResponseCode String Código de respuesta para el error que ocurrió. Ver Códigos de respuesta
ErrorData.acquirerResponseCode String No Código de respuesta para el error ocurrido devuelto por el adquirente. Tenga en cuenta que este error solo se devolverá si la transacción no está autorizada por el adquirente.
ErrorData.responseMessage String Mensaje descriptivo de la causa de la autorización. Si la transacción ha sido denegada por el adquirente, contendrá el mensaje devuelto por el adquirente.

cancelReversePayment()

Se debe llamar a este método para deshacer una transacción de contracargo previamente autorizada. Esta transacción no debe haberse deshecho todavía y debe haber sido previamente autorizada (no denegada).

Como se dice en la descripción de reversePayment(), Es posible que no se pueda deshacer la transacción de devolución de cargo de un comprador determinado. Por lo tanto, el método cancelReversePayment() puede devolver un error específico que indique que no es posible realizar dicha operación (ver Códigos de respuesta).

Parámetros

Nombre Tipo Obligatorio Descripción
paymentId String Identificador de la transacción a deshacer. El identificador referido es el que utiliza la aplicación de pago.
callback PaymentCallback Interfaz que se ejecutará para notificaciones de éxito o error.

Detalle de los parámetros

callback

Nombre Tipo Obligatorio Descripción
onSuccess Método de notificación de éxito
onError Método de notificación en caso de error.
ErrorData.paymentsResponseCode String Código de respuesta para el error que ocurrió. Ver Códigos de respuesta
ErrorData.acquirerResponseCode String No Código de respuesta para el error ocurrido devuelto por el adquirente. Tenga en cuenta que este error solo se devolverá si la transacción no está autorizada por el adquirente.
ErrorData.responseMessage String Mensaje descriptivo de la causa de la autorización. Si la transacción ha sido denegada por el adquirente, contendrá el mensaje devuelto por el adquirente.

Ejemplo del flujo de Reverso


import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.math.BigDecimal;

import br.com.phoebus.android.payments.api.Credentials;
import br.com.phoebus.android.payments.api.ErrorData;
import br.com.phoebus.android.payments.api.PaymentClient;
import br.com.phoebus.android.payments.api.ReversePayment;
import br.com.phoebus.android.payments.api.ReversePaymentRequest;
import br.com.phoebus.android.payments.api.exception.ClientException;

public class MainActivity extends AppCompatActivity implements View.OnClickListener, PaymentClient.PaymentCallback<ReversePayment> {

    Button bt_start;
    private PaymentClient paymentClient;
    public static final String TEST_APPLICATION_ID = "0";
    public static final String TEST_SECRET_TOKEN = "000000000000000000000000";
    public static final String TAG = "TAG_DEMO";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt_start = (Button) this.findViewById(R.id.button);
        bt_start.setOnClickListener(this);
        paymentClient = new PaymentClient();

    }


    @Override
    public void onClick(View view) {
        doExecute();
    }

    @Override
    protected void onResume() {
        super.onResume();
        paymentClient.bind(this);
    }

    @Override
    protected void onDestroy() {
        try {
            paymentClient.unbind(this);
        } catch (Exception e) {
            Log.e(TAG, e.getMessage());
        }
        super.onDestroy();
    }

    public void doExecute(){
        ReversePaymentRequest request = new ReversePaymentRequest();
        request.setValue(new BigDecimal(50));
        request.setAppTransactionId("123456");

        request.setPaymentId("999999");
        request.setShowReceiptView(true);

        Credentials credentials = new Credentials();
        credentials.setApplicationId(TEST_APPLICATION_ID);
        credentials.setSecretToken(TEST_SECRET_TOKEN);

        request.setCredentials(credentials);

        try {
            paymentClient.reversePayment(request, this);
        } catch (ClientException e) {
            Log.e(TAG, "Error reversePayment", e);
        }
    }


    @Override
    public void onSuccess(ReversePayment  reversePayment) {
        Log.i(TAG, reversePayment.toString());

        /*
          Si, en su regla comercial, necesita deshacer la transacción por algún motivo,
          llamar al método cancelReversePayment ()
        **/
        //doCancelReversePayment(reversePayment);

    }

    @Override
    public void onError(ErrorData errorData) {
        Log.e(TAG, errorData.getResponseMessage());
        Toast.makeText(this, errorData.getResponseMessage(), Toast.LENGTH_LONG).show();
    }

    private void doCancelReversePayment(ReversePayment reversePayment) {
        try {
            paymentClient.cancelReversePayment(reversePayment.getPaymentId(),
                    new PaymentClient.PaymentCallback<ReversePayment>() {

                        @Override
                        public void onError(ErrorData errorData) {
                            Log.e(TAG, errorData.getResponseMessage());
                            Toast.makeText(MainActivity.this, errorData.getResponseMessage(), Toast.LENGTH_LONG).show();
                        }

                        @Override
                        public void onSuccess(Object o) {
                            Log.i(TAG, "Deshacer completado!");
                        }


                    });
        } catch (ClientException e) {
            Log.e(TAG, "Error cancelReversePayment", e);
        }


    }


}