String paymentId = paymentV2.getPaymentId(); // após confirmPayment()
PrintReceiptRequest request = new PrintReceiptRequest();
// Credenciais (OBRIGATÓRIO)
Credentials credentials = new Credentials();
credentials.setApplicationId("SEU_APP_ID");
credentials.setSecretToken("SEU_SECRET_TOKEN");
ApplicationInfo appInfo = new ApplicationInfo();
appInfo.setCredentials(credentials);
appInfo.setSoftwareVersion("1.0.0"); // OBRIGATÓRIO
request.setApplicationInfo(appInfo);
request.setPaymentId(paymentId);
// Controle de impressão
request.setPrintMerchantReceipt(true); // Via do estabelecimento
request.setPrintCustomerReceipt(true); // Via do cliente
// Pré-visualização (padrão = true)
request.setPreviewMerchantReceipt(true); // Mostra tela antes de imprimir via lojista
request.setPreviewCustomerReceipt(true); // Mostra tela antes de imprimir via cliente
try {
paymentClient.printReceipt(request, new PaymentClient.PaymentCallback<Object>() {
@Override
public void onSuccess(Object result) {
Toast.makeText(MainActivity.this, "Comprovante impresso com sucesso!", Toast.LENGTH_SHORT).show();
Log.i("PRINT", "Impressão concluída");
}
@Override
public void onError(ErrorData errorData) {
String msg = errorData.getResponseMessage();
String code = errorData.getPaymentsResponseCode();
Log.e("PRINT", "Erro: " + code + " - " + msg);
Toast.makeText(MainActivity.this, "Falha na impressão: " + msg, Toast.LENGTH_LONG).show();
}
});
} catch (ClientException e) {
Log.e("PRINT", "Erro de cliente", e);
}
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
| printMerchantReceipt | Boolean | false | Imprime via do estabelecimento |
| printCustomerReceipt | Boolean | false | Imprime via do cliente (portador) |
| previewMerchantReceipt | Boolean | true | Exibe tela de pré-visualização antes da via lojista |
| previewCustomerReceipt | Boolean | true | Exibe tela de pré-visualização antes da via cliente |
Dica: Para impressão silenciosa (sem pré-visualização), use preview... = false.
| Código | Descrição | Solução |
|---|---|---|
| TRANSACTION_NOT_CONFIRMED | Transação não confirmada | Confirme antes com confirmPayment() |
| RECEIPT_ALREADY_PRINTED | Já impresso (só permite reimpressão) | Normal em reimpressão |
| PRINTER_ERROR | Falha na impressora | Verifique papel, tampa, conexão |
| TRANSACTION_NOT_FOUND | paymentId inválido | Use ID correto |
Basta chamar printReceipt() novamente com o mesmo paymentId. O sistema reconhece automaticamente como reimpressão.
Use preview... = false em totens/self-service Sempre trate onError – o cliente pode ter arrancado o papel! Teste com transações reais confirmadas Em estornos, use os mesmos parâmetros (printMerchantReceipt, etc.) no reversePaymentV2
Pronto! Agora seu app imprime comprovantes profissionais como o terminal nativo.