Ir para o conteúdo

Pago pix


Crear un cargo de pago pix

Info

La funcionalidad de impresión automática está disponible a partir de la versión 1.3.3.0 de la aplicación Pix.

startPixPayment()

Para crear un cargo se utiliza la función startPixPayment, recibe un cadena en formato json con los siguientes campos:

Request

{
  "cob_value": "20.00",
  "pix_client_id": "228dbb16-1b8c-4503-a1ac-0531d0202b35",
  "preview_customer_receipt": true,
  "preview_merchant_receipt": true,
  "print_customer_receipt": true,
  "print_merchant_receipt": true
}

**Parámetros**

| Nombre     | Tipo                      | Obligatorio | Descripción                                                                                                                                       |
| ---------- | ------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `request`  | `startPixPayment`         |           | Objeto de transferencia de datos que contendrá la información de solicitud de foto. Tenga en cuenta que no todos los parámetros son obligatorios. |
| `callback` | `StartPixPaymentCallback` |           | Interfaz que se ejecutará para notificaciones de éxito o error en el proceso de pix.                                                              |

**Detalles de los parámetros**

_request (startPixPayment)_

| Nombre                     | Tipo      | Requerido | Descripción                                                                                                                                                                                                                         | Valor por defecto |
| -------------------------- | --------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- |
| `valor_cob`                | `String`  | No        | Importe del cargo informado por el usuario.Si no está lleno (null), la interfaz solicitará el valor al operador. El valor debe enviarse en formato numérico con dos decimales, como se muestra en el ejemplo [`Request`](#request). |
| `pix_client_id`            | `String`  |         | pix_client_id es un identificador único utilizado por la aplicación de integración para identificar los cargos creados. Admite hasta 36 caracteres.                                                                                 |
| `preview_customer_receipt` | `Boolean` | No        | Indica si se debe mostrar el comprobante del cliente.                                                                                                                                                                               | `true`            |
| `preview_merchant_receipt` | `Boolean` | No        | Indica si se debe mostrar el comprobante del establecimiento.                                                                                                                                                                       | `true`            |
| `print_customer_receipt`   | `Boolean` | No        | Indica si el comprobante del cliente debe imprimirse automáticamente.<br>**Nota:** La impresión automática solo ocurrirá si la vista previa del comprobante está desactivada (`false`).                                             | `true`            |
| `print_merchant_receipt`   | `Boolean` | No        | Indica si el comprobante del establecimiento debe imprimirse automáticamente.<br>**Nota:** La impresión automática solo ocurrirá si la vista previa del comprobante está desactivada (`false`).                                     | `true`            |

**Detalles de los parámetros**

_callback (PaymentCallback)_

| Nombre      | Tipo     | Obligatorio | Descripción                                                                                                                                                                        |
| ----------- | -------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `onSuccess` | `Cadena` |           | todo de notificación en caso de éxito. La respuesta devuelta será una cadena en formato json que tendrá los campos mostrados en la clase [`PixResponse`](#pixresponse)           |
| `onError`   | `Cadena` |           | todo de notificación en caso de error. La respuesta devuelta será una cadena en formato json que tendrá los campos mostrados en la clase [`PixErrorResponse`](#pixerrorresponse) |

```kotlin
fun cobCreateService(
    pixClient: PixClient,
    value: String?,
    pixClientId: String,
    previewCustomerReceipt: Boolean,
    previewMerchantReceipt: Boolean,
    printCustomerReceipt: Boolean,
    printMerchantReceipt: Boolean,
    context: Context,
    viewModel: CobCreateViewModel
) {
    val gson: Gson = Gson()
    if (pixClient.isBound()) {
        val createCobRequest =
            CreateCobRequest(value, pixClientId, previewCustomerReceipt, previewMerchantReceipt, printCustomerReceipt, printMerchantReceipt)
        val callback = object : PixClient.StartPixPaymentCallback {

            override fun onError(response: String?) {
                println("Pagamento error: $response")

                if (response != null) {
                    val responseError = gson.fromJson(response, PixErrorResponse::class.java)
                    showAlertDialog(context, responseError.errorMessage)
                } else {
                    showAlertDialog(context, "")
                }
                viewModel.resetFilds()
            }

            override fun onSuccess(response: String?) {
                val pixResponse = gson.fromJson(response, PixResponse::class.java)
                println("Pagamento: $pixResponse")

                if (pixResponse != null && pixResponse.status == ChargeStatus.REMOVED_BY_USER ) {
                    Toast.makeText(context, R.string.payment_cancelled, Toast.LENGTH_SHORT).show()
                } else {
                    Toast.makeText(context, R.string.payment_successfully_made, Toast.LENGTH_SHORT)
                        .show()
                }
                viewModel.resetFilds()
            }
        }

        pixClient.startPixPayment(
            gson.toJson(createCobRequest),
            callback
        )

    }
}

fun showAlertDialog(context: Context, message: String) {
    val builder = AlertDialog.Builder(context)
    builder.setTitle(R.string.cob_gen)
    builder.setMessage(message)
    builder.setPositiveButton("OK") { dialog, _ ->
        dialog.dismiss()
    }
    val dialog = builder.create()
    dialog.show()
}

Ejemplo de la clase CreateCobRequest:

data class CreateCobRequest(
    @SerializedName("cob_value")
    val cobValue: String?,
    @SerializedName("pix_client_id")
    val pixClientId: String?,
    @SerializedName("preview_customer_receipt")
    val previewCustomerReceipt: Boolean,
    @SerializedName("preview_merchant_receipt")
    val previewMerchantReceipt: Boolean,
    @SerializedName("print_customer_receipt")
    val printCustomerReceipt: Boolean,
    @SerializedName("print_merchant_receipt")
    val printMerchantReceipt: Boolean
)

Ejemplo de clase ChargeStatus:

enum class ChargeStatus(private val value: String) {
    @SerializedName("ATIVA")
    ACTIVE("ATIVA"),
    @SerializedName("CONCLUIDA")
    CONCLUDED("CONCLUIDA"),
    @SerializedName("DEVOLVIDO")
    REFUNDED("DEVOLVIDO"),
    @SerializedName("EM_PROCESSAMENTO")
    REFUND_PROCESSING("EM_PROCESSAMENTO"),
    @SerializedName("NAO_REALIZADO")
    REFUND_NOT_DONE("NAO_REALIZADO"),
    @SerializedName("REMOVIDA_PELO_USUARIO_RECEBEDOR")
    REMOVED_BY_USER("REMOVIDA_PELO_USUARIO_RECEBEDOR"),
    @SerializedName("REMOVIDA_PELO_PSP")
    REMOVED_BY_PSP("REMOVIDA_PELO_PSP"),
    @SerializedName("EXPIRADA")
    EXPIRED("EXPIRADA"),
    UNKNOWN("UNKNOWN");

    fun getValue(): String {
        return value
    }
}

PixResponse

data class PixResponse(
    @SerializedName("cob_value")
    val cobValue: String,
    @SerializedName("status")
    var status: String,
    @SerializedName("tx_id")
    val txID: String,
)

PixErrorResponse

class PixErrorResponse (
    @SerializedName("error_message")
    val errorMessage: String
)