Faz-se uso da classe DesktopPluginPixPaymentRequestBuilder.
val pixRequest = DesktopPlugin
.createPixPaymentRequestBuilder()
.amount(1000)
//.referenceId("") Identificador próprio (opcional)
//.metadata(buildJsonObject {}) Metadados adicionais (opcional)
.callback(object: Callback<DesktopPluginPixPaymentResponse>() {
override fun onStart() {
handleStartPixPayment()
}
override fun onFail(error: Throwable) {
handlePixPaymentFailure(error)
}
override fun onSuccess(response: DesktopPluginPixPaymentResponse) {
handleSucessfullPixPayment(response)
}
override fun onComplete() {
handleFinishedPixPaymentTransaction()
}
})
.qrCodeCallback(object: Callback<QRCodeCallbackRequestField.QRCodeData>() {
override fun onFail(error: Throwable) {
handleQrCodeFailure(error)
}
override fun onSuccess(response: QRCodeCallbackRequestField.QRCodeData) {
showQRCode(response.getData());
}
})
.messageCallback(object: Callback<MessageCallbackRequestField.MessageData> () {
override fun onFail(error: Throwable) {
handleMessageCallBackFail(error)
}
override fun onSuccess(response: MessageCallbackRequestField.MessageData) {
displayMessage()
}
})
.transactionIdCallback(object: Callback<TransactionIdCallbackRequestField.transactionIdData> () {
override fun onFail(error: Throwable) {
handleTransactionIdFailure(error)
}
override fun onSuccess(response: TransactionIdCallbackRequestField.transactionIdData) {
storeTransactionId(response.data)
}
})
.build()
Zoop.post(pixRequest)
| Chave | Tipo | Objetivo | Exemplo |
|---|---|---|---|
amount | Long | Valor da transação (em centavos). | 2 (R$ 0,02) |
referenceId | String | Identificador próprio gerado pelo parceiro (opcional, máx. 50 caracteres) | "237ab31-g99c-4e25-9hjs-32u4d3gf7fh2" |
metadata | String (em JSON) ou JsonObject | Metadados personalizados fornecidos pelo parceiro (opcional, máx. 512 caracteres). | "{\"parcelado\":false,\"tentativa\":1,\"vencimento\":\"2024-02-15\",\"versao\":\"1.23.4\"}" |
JsonObjectPara criar um objeto de JsonObject, faça como no seguinte exemplo:
val metadata = buildJsonObject {
put("endereco","Avenida X")
put("parcelado", false)
put("tentativa", 1)
}
Responsável pelo fluxo do pagamento, início, processamento, conclusão (sucesso/falha).onStart -> Esta callback é sinalizada quando o fluxo do pagamento começa, podendo ser sinalizado pela aplicação o início do processamento.OnSuccess -> Neste momento, a transação foi aprovada, e você recebe o objeto do tipo DesktopPluginPixPaymentResponse, contendo um *TransactionData, acessível por response.transactionData, contendo todos os dados da transação.OnFail -> Falha na transação, é recebido uma exceção, podendo ser do tipo:
- ZoopPaymentException -> Falha no fluxo do pagamento, neste caso, passamos a mensagem de erro, podendo ser acessada como exception.message.
- ZoopTimeoutException -> Tempo excedido na operação.
- ZoopClosedConnectionException -> Conexão interrompida.
- ZoopNetworkException -> Falha de conexão.OnComplete -> Sinaliza o final do fluxo do pagamento, tanto em casos de sucesso/falha.
Referência:
TransactionData(
val value: Int?, // Valor da transação em centavos
val paymentType: Int?, // Tipo de pagamento
val installments: Int?, // Parcelas
val status: String?, // Status (approved/canceled)
val brand: String?, // Marca do cartão ex: Visa
val address: String?, // Endereço do seller
val sellerName: String?, // Nome do seller
val acquiring: String?, // Adquirente
val pan: String?, // PAN do cartão
val autoCode: String?, // Código de autorização
val documentType: String?, // Tipo de documento, CPF/CNPJ
val document: String?, // Documento
val nsu: String?, // NSU
val date: String?, // Data da transação
val hour: String?, // Hora da transação
val cv: String?, // CV
val arqc: String?, // ARQC
val aid: String?, // AID
val sellerReceipt: String?, // Recibo do estabelecimento
val customerReceipt: String?, // Recibo do cliente
val approvalMessage: String?, // Mensagem de aprovação ex: APROVADA PELO EMISSOR,
val aidLabel: String?, // Label do cartão
var transactionId: String?, // Id da transação
val receiptId: String? = null, // Id do recibo, caso aplicável (hoje, apenas transações Pix)
val pixId: String? = null, // Id do Pix
val cardFingerprint: String? = null // Token único do cartão.
)
// No caso de uma transação Pix, ambos campos transactionId e pixId, sendo pixId um identificador interno da zoop.
Responsável por receber o QRCode para exibição no POS.OnSuccess -> QRCode a ser exibida pela aplicação para o usuário, acessada como response.data.OnFail -> Não recebe nenhum dado, esta callback não é chamada.
Responsável por receber o ID da transação.onSuccess -> ID da transação na infraestrutura Zoop, acessada em response.data.onFail -> Não recebe nenhum dado, esta callback não é chamada.
Responsável pelas mensagens no fluxo do pagamento. ex: “Aproxime, insira ou passe o cartão”.OnSuccess -> Mensagem a ser exibida pela aplicação para o usuário, acessada como response.message.OnFail -> Não recebe nenhum dado, esta callback não é chamada.
O cancelamento da operação pode ser comandado chamando o método cancel() a partir do objeto da requisição que se deseja cancelar (o mesmo que foi passado ao método Zoop.post() ou Zoop.enqueue()).
O cancelamento é assíncrono e cooperativo. Isto é, o método cancel() sinaliza a intenção de cancelamento para o SDK e retorna imediatamente, sem aguardar pela conclusão do cancelamento. Por sua vez, o SDK interromperá e cancelará a operação na primeira oportunidade possível.
var pixRequest: Request? = null
fun payWithPix() {
pixRequest = DesktopPlugin.createPixPaymentRequestBuilder()
// ...
.build()
Zoop.post(pixRequest)
}
fun cancelPixPayment() {
pixRequest?.cancel()
}