Ir para o conteúdo

Pagamento Pix


Criar uma cobrança de pagamento pix

Info

A funcionalidade de impressão automática está disponível a partir da versão 1.3.3.0 do App Pix. Para versões anteriores a 1.3.3.0, utilizar print_customer_receipt e print_merchant_receipt para controlar a exibição dos comprovantes.

startPixPayment()

Para criar uma cobrança é utilizada a função startPixPayment, ela recebe uma string no formato json com os seguintes 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

Nome Tipo Obrigatório Descrição
request startPixPayment Sim Objeto de transferência de dados que conterá as informações da requisição do pix. Note que nem todos os parâmetros são obrigatórios.
callback StartPixPaymentCallback Sim Interface que será executada para notificações de sucesso ou erro do processo do pagamento.

Detalhe dos Parâmetros

request (startPixPayment)

Nome Tipo Obrigatório Descrição Padrão
cob_value String Não Valor da cobrança informada pelo usuário, caso não seja preenchido (null), a interface solicitará o valor. O valor deve ser enviado no formato númerico com duas casas decimais, como mostra no exemplo Request
pix_client_id String Sim O pix_client_id é um identificador único utilizado pelo app de integração para identificar as cobranças criadas. Ele suporta até 36 caracteres.
preview_customer_receipt Boolean Não Indica se o comprovante do cliente deve ser exibido. true
preview_merchant_receipt Boolean Não Indica se o comprovante do estabelecimento deve ser exibido. true
print_customer_receipt Boolean Não Indica se o comprovante do cliente deve ser impresso automaticamente.
Observação: A impressão automática só ocorrerá se a visualização prévia (preview) do comprovante estiver desabilitada (false).
true
print_merchant_receipt Boolean Não Indica se o comprovante do estabelecimento deve ser impresso automaticamente.
Observação: A impressão automática só ocorrerá se a visualização prévia (preview) do comprovante estiver desabilitada (false).
true

Detalhe dos Parâmetros

callback (PaymentCallback)

Nome Tipo Obrigatório Descrição
onSuccess String Sim Método para notificação em caso de sucesso. A resposta retornada será uma string no formato json que possui os campos demostrados na classe PixResponse
onError String Sim Método para notificação em caso de erro. A resposta retornada será uma string no formato json que possui os campos demostrados na classe PixErrorResponse
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.resetFields()
            }

            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()
}

Exemplo da classe 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
)

Exemplo da classe 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
)