Faz-se uso da classe DesktopPluginVoidRequestBuilder.
val voidRequest = DesktopPlugin.createVoidRequestBuilder()
.transactionId("")
.callback(object: Callback<VoidResponse>() {
override fun onStart() {
handleInitVoidTransaction()
}
override fun onSuccess(response: VoidResponse) {
handleSucessfullVoid(response)
}
override fun onFail(error: Throwable) {
handleVoidFailure(error)
}
override fun onComplete() {
handleFinishVoidTransaction()
}
})
.messageCallback(object: Callback<MessageCallbackRequestField.MessageData>() {
override fun onSuccess(response: MessageCallbackRequestField.MessageData) {
displayMessage()
}
override fun onFail(error: Throwable) {}
})
.voidTransactionCallback(object: Callback<UserSelection<VoidTransaction>>() {
override fun onFail(error: Throwable) {}
override fun onSuccess(response: UserSelection<VoidTransaction>) {
val list = response
assembleList(list)
}
})
.build()
Zoop.post(voidRequest)
Caso seja passado um transactionId, o cancelamento será feito para a transação específica. Caso contrário, será feito o fluxo de listagem de transações. Ainda assim, a leitura do cartão será necessária.transactionId -> Id da transação a ser cancelada.
Este é um parâmetro opcional, podendo ser omitido, null ou vazio para seguir para o fluxo de listagem de transações.
Responsável pelo fluxo do cancelamento, início, processamento, conclusão (sucesso/falha).onStart -> Esta callback é sinalizada quando o fluxo do cancelamento começa, podendo ser sinalizado pela aplicação o início do processamento.OnSuccess -> Neste momento, a transação foi cancelada, e você recebe o objeto VoidResponsecontendo um *TransactionData, contendo todos os dados da transação.OnFail -> Falha no cancelamento, é recebido um exception, podendo ser do tipo:
- ZoopPaymentException -> Falha no fluxo do pagamento, neste caso, passamos a mensagem de erro, podendo ser acessada como error.message.
- ZoopTimeoutException -> Tempo excedido na operação.
- ZoopClosedConnectionException -> Conexão interrompida.
- ZoopNetworkException -> Falha de conexão.OnComplete -> Sinaliza o final do fluxo do cancelamento, 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.
)
Responsável pelas mensagens no fluxo do cancelamento. 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.
Responsável pela seleção da transação a ser cancelada, a partir de uma lista (a lista é forncida neste callback).OnSuccess -> É recebido um objeto UserSelection<VoidTransaction> contendo um objeto iterable (acessada por response.items) a ser exibida pela aplicação para o usuário. A seleção de transação para cancelamento é feita neste objeto. Cada item no objeto é uma transação.OnFail -> Não recebe nenhum dado, esta callback não é chamada.
Referência:
public final data class VoidTransaction(
val id: String,
val amount: String,
val option: Option,
val cardBrand: CardBrand,
val date: String,
val time: String
)
messageCallback.response.select(VoidTransaction) no objeto UserSelection<VoidTransaction>.messageCallback.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 voidRequest: Request? = null
fun voidPayment() {
voidRequest = DesktopPlugin.createVoidRequestBuilder()
// ...
.build()
Zoop.post(voidRequest)
}
fun cancelVoid() {
voidRequest?.cancel()
}