Exemplos de implementação
Nessa página você encontra exemplos da utilização dos métodos do PlugPagService Wrapper para realizar transações. As formas de realizar as chamadas e tratar os valores retornados irão depender da implementação do seu aplicativo. Abaixo você encontra a lista completa de exemplos disponibilizados.
- Pagamento à vista no crédito
- Pagamento parcelado no crédito
- Pagamento no débito
- Pagamento com voucher
- Pagamento no débito com carnê
- Pagamento parcial à vista no crédito
- Pagamento à vista no crédito por QR Code
- Pagamento parcelado em 3 prestações no crédito por QR Code
- Estorno de um pagamento
- Verificar autenticação
- Invalidar autenticação
- Solicitar ativação
- Obter versão da biblioteca
- Reimpressão da via do estabelecimento
- Reimpressão da via do cliente
- Calcular parcelas
- Customizar dialog de impressão da via do cliente
- Ler cartão NFC
- Escrever no cartão NFC
- Abortar operação de leitura/escrita no cartão NFC
- Imprimir arquivo
- Buscar última transação aprovada
- Pré-autorização
- Efetivar pré-autorização
- Cancelar pré-autorização
- Buscar pré-autorização
- Detectar cartão NFC
- Solicitar afastamento de cartão NFC
- Autenticação de cartão NFC
- Comandos APDU
Clique duplo
É importante que sua aplicação controle ações de duplo clique para prevenir que o serviço seja chamado duas vezes.
Pagamento à vista no crédito
No exemplo abaixo é apresentado como utilizar a biblioteca PlugPag para realizar um pagamento de R$250,00 na forma de pagamento crédito à vista.
public void startPayment(Context context) {
// Define os dados do pagamento
PlugPagPaymentData paymentData =
new PlugPagPaymentData(
PlugPag.TYPE_CREDITO,
25000,
PlugPag.INSTALLMENT_TYPE_A_VISTA,
1,
"CODVENDA");
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context, appIdentification);
// Ativa terminal e faz o pagamento
int initResult = plugpag.initializeAndActivatePinpad(new
PlugPagActivationData("SEU_CODIGO_DE_ATIVAÇÃO")));
if (initResult == PlugPag.RET_OK) {
PlugPagTransactionResult result = plugpag.doPayment(paymentData);
// Trata o resultado da transação
...
}
}
Pagamento parcelado no crédito
Nesse exemplo apresentamos como utilizar a biblioteca PlugPag para realizar um pagamento de R$300,00 na forma de pagamento crédito, parcelado em 3 prestações.
public void startPayment(Context context) {
// Define os dados do pagamento
PlugPagPaymentData paymentData =
new PlugPagPaymentData(
PlugPag.TYPE_CREDITO,
30000,
PlugPag.INSTALLMENT_TYPE_PARC_VENDEDOR,
3,
"CODVENDA");
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context, appIdentification);
// Ativa terminal e faz o pagamento
int initResult = plugpag.initializeAndActivatePinpad(new
PlugPagActivationData("SEU_CODIGO_DE_ATIVAÇÃO")));
if (initResult == PlugPag.RET_OK) {
PlugPagTransactionResult result = plugpag.doPayment(paymentData);
// Trata o resultado da transação
...
}
}
Pagamento no débito
No exemplo abaixo apresentamos como utilizar a biblioteca PlugPag para realizar um pagamento de R$150,00 utilizando débito como forma de pagamento.
public void startPayment(Context context) {
// Define os dados do pagamento
PlugPagPaymentData paymentData =
new PlugPagPaymentData(
PlugPag.TYPE_DEBITO,
15000,
PlugPag.INSTALLMENT_TYPE_A_VISTA,
1,
"CODVENDA");
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context, appIdentification);
// Ativa terminal e faz o pagamento
int initResult = plugpag.initializeAndActivatePinpad(new
PlugPagActivationData("SEU_CODIGO_DE_ATIVAÇÃO")));
if (initResult == PlugPag.RET_OK) {
PlugPagTransactionResult result = plugpag.doPayment(paymentData);
// Trata o resultado da transação
...
}
}
Pagamento com voucher
Nesse exemplo, você encontra como utilizar a biblioteca PlugPag para realizar um pagamento de R$50,00 utilizando voucher como forma de pagamento.
public void startPayment(Context context) {
// Define os dados do pagamento
PlugPagPaymentData paymentData =
new PlugPagPaymentData(
PlugPag.TYPE_VOUCHER,
5000,
PlugPag.INSTALLMENT_TYPE_A_VISTA,
1,
"CODVENDA");
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context, appIdentification);
// Ativa terminal e faz o pagamento
int initResult = plugpag.initializeAndActivatePinpad(new
PlugPagActivationData("SEU_CODIGO_DE_ATIVAÇÃO")));
if (initResult == PlugPag.RET_OK) {
PlugPagTransactionResult result = plugpag.doPayment(paymentData);
// Trata o resultado da transação
...
}
}
Pagamento no débito com carnê
No exemplo abaixo é apresentado como utilizar a biblioteca PlugPag para realizar um pagamento de R$150,00 utilizando débito com carnê como forma de pagamento.
public void startPayment(Context context) {
// Define os dados do pagamento
PlugPagPaymentData paymentData =
new PlugPagPaymentData(
PlugPag.TYPE_DEBITO,
15000,
PlugPag.INSTALLMENT_TYPE_A_VISTA,
1,
"CODVENDA",
true,
false,
true //Define que o pagamento será via carnê
);
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context, appIdentification);
// Ativa terminal e faz o pagamento
int initResult = plugpag.initializeAndActivatePinpad(new
PlugPagActivationData("SEU_CODIGO_DE_ATIVAÇÃO")));
if (initResult == PlugPag.RET_OK) {
PlugPagTransactionResult result = plugpag.doPayment(paymentData);
// Trata o resultado da transação
...
}
}
Pagamento parcial à vista no crédito
Nesse exemplo apresentamos como utilizar a biblioteca PlugPag para realizar um pagamento de R$250,00 utilizando crédido para realizar o pagameto à vista.
public void startPayment(Context context) {
// Define os dados do pagamento
PlugPagPaymentData paymentData =
new PlugPagPaymentData(
PlugPag.TYPE_CREDITO,
25000,
PlugPag.INSTALLMENT_TYPE_A_VISTA,
1,
"CODVENDA",
true,
true //Define que o pagamento será do tipo parcial false
) ;
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context, appIdentification);
// Ativa terminal e faz o pagamento
int initResult = plugpag.initializeAndActivatePinpad(new
PlugPagActivationData("SEU_CODIGO_DE_ATIVAÇÃO")));
if (initResult == PlugPag.RET_OK) {
PlugPagTransactionResult result = plugpag.doPayment(paymentData);
// Trata o resultado da transação
...
}
}
Pagamento à vista no crédito por QR Code
Nesse exemplo a biblioteca PlugPag é utilizada para realizar um pagamento de R$250,00 utilizando crédito pago através de QR Code.
public void startPayment(Context context) {
// Define os dados do pagamento
PlugPagPaymentData paymentData =
new PlugPagPaymentData(
PlugPag.TYPE_QRCODE_CREDITO,
25000,
PlugPag.INSTALLMENT_TYPE_A_VISTA,
1,
"CODVENDA");
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context, appIdentification);
// Ativa terminal e faz o pagamento
int initResult = plugpag.initializeAndActivatePinpad(new
PlugPagActivationData("SEU_CODIGO_DE_ATIVAÇÃO")));
if (initResult == PlugPag.RET_OK) {
PlugPagTransactionResult result = plugpag.doPayment(paymentData);
// Trata o resultado da transação
...
}
}
Pagamento parcelado em 3 prestações no crédito por QR Code
A taxa de parcelamento do PagBank só é cobrada quando a venda é feita no crédito parcelado. Ao utilizar o parcelamento vendedor ela é paga pelo comerciante e o valor é descontado diretamente do total da venda. Ao optar pelo Parcelamento Comprador nas maquininhas PagBank você deixa de pagar a Taxa de Parcelamento e repassa este valor ao cliente, também sem custo algum.
Observe o exemplo abaixo, onde é apresentado como utilizar a biblioteca PlugPag para realizar um pagamento de R$250,00 na forma de pagamento parcelado vendedor, em 3 prestações no crédito por QR Code.
public void startPayment(Context context) {
// Define os dados do pagamento
PlugPagPaymentData paymentData =
new PlugPagPaymentData(
PlugPag.TYPE_QRCODE_CREDITO,
30000,
PlugPag.INSTALLMENT_TYPE_PARC_VENDEDOR,
3,
"CODVENDA");
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context, appIdentification);
// Ativa terminal e faz o pagamento
int initResult = plugpag.initializeAndActivatePinpad(new
PlugPagActivationData("SEU_CODIGO_DE_ATIVAÇÃO")));
if (initResult == PlugPag.RET_OK) {
PlugPagTransactionResult result = plugpag.doPayment(paymentData);
// Trata o resultado da transação
...
}
}
Estorno de um pagamento
O exemplo abaixo apresenta como iniciar uma transação de estorno no terminal.
public void voidPayment(Context context) {
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context, appIdentification);
// Ativa terminal e faz o pagamento
int initResult = plugpag.initializeAndActivatePinpad(new
PlugPagActivationData("SEU_CODIGO_DE_ATIVAÇÃO")));
if (initResult == PlugPag.RET_OK) {
PlugPagTransactionResult result = plugpag.voidPayment(
"transactionCode",
"transactionId");
// Trata o resultado do estorno
...
}
}
Verificar autenticação
O exemplo abaixo apresenta como solicitar uma autenticação no terminal.
public void checkAuthentication(Context context) {
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context, appIdentification);
// Verifica autenticação
boolean authenticated = plugpag.isAuthenticated();
if (authenticated) {
// Usuário autenticado
...
} else {
// Usúario não autenticado
...
}
}
Invalidar autenticação
O exemplo abaixo apresenta como invalidar uma autenticação no terminal.
public void logout(Context context) {
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context, appIdentification);
// Invalida a autenticação existente
plugpag.invalidateAuthentication();
...
}
Solicitar ativação
O exemplo abaixo apresenta como solicitar uma ativação no terminal.
public void requestAuth(Activity activity) {
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugPag = new PlugPag(activity, appIdentification);
// Cria objeto com informação do código de ativação
PlugPagActivationData plugPagActivationData =
new PlugPagActivationData("SeuCodigoDeAtivação”);
// Solicita autenticação
PlugPagInitializationResult result =
plugPag.initializeAndActivatePinPad(plugPagActivationData);
if(result.getResult() == PlugPag.RET_OK) {
//Sucesso
} else {
//Erro
}
...
}
O resultado da autenticação será retornado através da classe PlugPagInitializationResult
. Se a autenticação for efetuada com sucesso, o método etResult()
irá retornar valor igual a PlugPag.RET_OK
. Caso contrário, mais informações do erro podem ser encontradas nos métodos getErrorCode()
e getErrorMessage()
.
Obter versão da biblioteca
O exemplo abaixo apresenta como garantir que você está utilizando a verão correta do terminal.
public void getLibVersion(Context context) {
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context, appIdentification);
// Obtém a versão da biblioteca
String version = plugpag.getLibVersion();
}
Reimpressão da via do estabelecimento
O exemplo abaixo apresenta como realizar a reimpressão da via do estabelecimento do comprovante de uma transação.
public void reprintStablishmentReceipt() {
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context, appIdentification);
// Obtém a versão da biblioteca
PlugPagPrintResutlt result = plugpag.reprintStablishmentReceipt();
}
Reimpressão da via do cliente
O exemplo abaixo apresenta como realizar a reimpressão da via do cliente do comprovante de uma transação.
public void reprintCustomerReceipt() {
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context, appIdentification);
// Obtém a versão da biblioteca
PlugPagPrintResutlt result = plugpag.reprintCustomerReceipt();
}
Calcular parcelas
O exemplo abaixo apresenta como realizar o cálculo do valor das parcelas quando o cliente optar por parcelar a compra.
public void calculateInstallments() {
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context, appIdentification);
// Obtém a versão da biblioteca
Array<String> installments = plugpag.calculateInstallments(saleValue);
}
O resultado retornado será uma String
contendo a quantidade de parcelas permitidas mais o valor de cada parcela, seguindo o padrão quantidadeDeParcelas x R$ valorDaParcela
.
Customizar dialog de impressão da via do cliente
O exemplo abaixo apresenta como customizar a mensagem de diálogo ao realizar a impressão da via do cliente do comprovante de uma transação.
public void startPayment(Context context) {
// Define os dados do pagamento
PlugPagPaymentData paymentData =
new PlugPagPaymentData(
PlugPag.TYPE_DEBITO,
15000,
PlugPag.INSTALLMENT_TYPE_A_VISTA,
1,
"CODVENDA");
// Cria a identificação do aplicativo
PlugPagAppIdentification appIdentification =
new PlugPagAppIdentification("MeuApp", "1.0.7");
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context, appIdentification);
// Cria a customização da dialog de impressão da via do cliente
PlugPagCustomPrinterLayout customDialog = new PlugPagCustomPrinterLayout();
customDialog.setTitle("Imprimir via do cliente?");
customDialog.setButtonBackgroundColor("#00ff33");
customDialog.setConfirmText("Yes");
customDialog.setCancelText("No");
// Ativa terminal e faz o pagamento
int initResult = plugpag.initializeAndActivatePinpad(new
PlugPagActivationData("SEU_CODIGO_DE_ATIVAÇÃO")));
if (initResult == PlugPag.RET_OK) {
plugPag.setPlugPagCustomPrinterLayout(customDialog);
PlugPagTransactionResult result = plugpag.doPayment(paymentData);
// Trata o resultado da transação
...
}
}
Ler cartão NFC
O exemplo abaixo apresenta como realizar a leitura de cartões NFC (Near Field Communication), que são os cartões por aproximação.
public void readNFCCard() {
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context);
PlugPagNearFieldCardData dataCard = new PlugPagNearFieldCardData();
dataCard.setStartSlot(1);
dataCard.setEndSlot(1);
// Lê um cartão NFC
PlugPagNFCResult result = plugpag.readFromNFCCard(dataCard);
}
O resultado da autenticação será retornado através da classe PlugPagNFCResult
. Se a autenticação for efetuada com sucesso, o método getResult()
irá retornar o valor 1
. Do contrário, o método getResult()
retornará -1
.
Escrever no cartão NFC
O exemplo abaixo apresenta como realizar a escrita de cartões NFC.
public void writeToNFCCard() {
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context);
String info = "teste_com16bytes";
byte[] infoBytes = info.getBytes();
PlugPagNearFieldCardData dataCard = new PlugPagNearFieldCardData();
dataCard.setStartSlot(1);
dataCard.setEndSlot(2);
dataCard.getSlots()[1].put(“data”, infoBytes);
// Escreve em um cartão NFC
int result = plugpag.writeToNFCCard(dataCard);
}
O resultado da autenticação será retornado através da classe PlugPagNFCResult
. Se a autenticação for efetuada com sucesso, o método getResult()
irá retornar o valor 1
. Do contrário, o método getResult()
retornará -1
.
Abortar operação de leitura/escrita no cartão NFC
O exemplo abaixo apresenta como realizar o cancelamento de uma operação de leitura ou escrita em um cartão NFC.
public void abortNFC() {
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context);
// Escreve em um cartão NFC
int result = plugpag.abort();
}
O resultado da operação será retornado através da classe PlugPagNFCResult
. Se o cancelamento for efetuado com sucesso, o método getResult()
irá retornar o valor 1
. Do contrário, o método getResult()
retornará -1
.
Imprimir arquivo
O exemplo abaixo demonstra como executar uma solicitação de impressão através do caminho de um arquivo local.
public void printFile() {
// Cria a referência do PlugPag
PlugPag plugPag = new PlugPag(context);
// Cria objeto com informações da impressão
PlugPagPrinterData data = new PlugPagPrinterData(
Environment.getExternalStorageDirectory().getAbsolutePath() + “/SeuDiretorio/SeuArquivo”,
4,
10 * 12));
PlugPagPrinterListener listener = new PlugPagPrinterListener() {
@Override
public void onError(@NotNull PlugPagPrintResult plugPagPrintResult) {
plugPagPrintResult.getMessage(); // Mensagem de erro
plugPagPrintResult.getErrorCode(); // Código de erro
}
};
//Seta listener de impressão
plugPag.setPrinterListener(listener)
// Imprime arquivo
PlugPagPrintResult result = plugPag.printFromFile(plugPagPrinterData)
if (result == PlugPag.RET_OK) {
//sucesso
}
}
Buscar última transação aprovada
O exemplo abaixo demonstra comorealizar a busca da última transação aprovada.
public void getLastApprovedTransaction(Context context) {
// Cria a referência do PlugPag
PlugPag plugpag = new PlugPag(context);
PlugPagTransactionResult lastApprovedTransaction
= plugpag.getLastApprovedTransaction();
}
Pré-autorização
O processo de pré-autorização é realizado quando se mantém o saldo da transação reservado por um período antes da captura do valor, como uma forma de garantia ou segurança. Para realizar esta operação, siga o exemplo abaixo.
public Observable<PlugPagTransactionResult> doPreAutoCreate(int value, int
installmentType, int installments) {
return Observable.create(emitter -> {
PlugPagPreAutoData plugPagPreAutoData = new PlugPagPreAutoData(
value,
installmentType,
installments,
true
"userref”
);
PlugPagTransactionResult plugPagTransactionResult = mPlugPag.doPreAutoCreate(plugPagPreAutoData);
// Trata o retorno do PlugPagTransactionResult
});
}
Efetivar pré-autorização
O exemplo abaixo demonstra como efetivar a captura do valor de uma pré-autorização.
public Observable<PlugPagTransactionResult> doPreAutoEffectuate(
int value,
String transactionId,
String transactionCode
) {
return Observable.create(emitter -> {
PlugPagEffectuatePreAutoData plugPagEffectuatePreAutoData = new
PlugPagEffectuatePreAutoData(
value,
true,
transactionId,
transactionCode,
"userref”
);
PlugPagTransactionResult plugPagTransactionResult =
mPlugPag.doEffectuatePreAuto(plugPagEffectuatePreAutoData);
// Trata o retorno do PlugPagTransactionResult
});
}
Cancelar pré-autorização
O exemplo abaixo demonstra como cancelar um pagamento pré-autorizado.
public Observable<PlugPagTransactionResult> doPreAutoCancel(String transactionId,
String transactionCode) {
return Observable.create(emitter -> {
PlugPagTransactionResult plugPagTransactionResult =
mPlugPag.doPreAutoCancel(transactionId, transactionCode);
// Trata o retorno do PlugPagTransactionResult
});
}
Buscar pré-autorização
O exemplo abaixo demonstra como buscar uma pré-autorização já criada.
public Observable<PlugPagTransactionResult> getPreAutoData() {
return Observable.create(emitter -> {
PlugPagTransactionResult plugPagTransactionResult =
mPlugPag.getPreAutoData();
// Trata o retorno do PlugPagTransactionResult
});
}
Detectar cartão NFC
O exemplo abaixo demonstra como executar uma solicitação de detecção direta de informações de um cartão NFC.
public Observable<PlugPagNFCInfosResultDirectly> detectCardDirectly() {
return Observable.create(emitter -> {
try {
// Starta a antena NFC
int resultStartNfc = mPlugPag.startNFCCardDirectly();
// Realiza a autenticação NFC
PlugPagNFCInfosResultDirectly plugPagNFCInfosResult =
mPlugPag.detectNfcCardDirectly(PlugPagNearFieldCardData.ONLY_M, 20);
if (plugPagNFCInfosResult.getResult() != RET_OK) {
emitter.onError(new PlugPagException("Cartão não identificado"));
emitter.onComplete();
return;
}
emitter.onNext(plugPagNFCInfosResult);
// Stopa a antena NFC
mPlugPag.stopNFCCardDirectly();
} catch (Exception e) {
e.printStackTrace();
emitter.onError(e);
}
emitter.onComplete();
});
}
Solicitar afastamento de cartão NFC
O exemplo abaixo demonstra como executar uma solicitação de detecção de afastamento de um cartão NFC.
public Observable<Integer> detectRemoveCardDirectly() {
return Observable.create(emitter -> {
try {
// Starta a antena NFC
int resultStartNfc = mPlugPag.startNFCCardDirectly();
PlugPagNFCInfosResultDirectly plugPagNFCInfosResult =
mPlugPag.detectNfcCardDirectly(PlugPagNearFieldCardData.ONLY_M, 20);
if (plugPagNFCInfosResult.getResult() != RET_OK) {
emitter.onError(new PlugPagException("Cartão não identificado"));
emitter.onComplete();
return;
}
emitter.onNext(RET_WAITING_REMOVE_CARD);
Thread.sleep(5000);
int result = 0;
if (plugPagNFCInfosResult.getCid() != null) {
final PlugPagNFCDetectRemoveCard plugPagNFCDetectRemoveCard = new
PlugPagNFCDetectRemoveCard(PlugPagNearFieldRemoveCardData.REMOVE,
plugPagNFCInfosResult.getCid());
result =
mPlugPag.detectNfcRemoveDirectly(plugPagNFCDetectRemoveCard);
if (result != RET_OK) {
emitter.onError(new PlugPagException("Cartão não removido"));
emitter.onComplete();
return;
}
}
emitter.onNext(result);
//Starta a antena NFC
mPlugPag.stopNFCCardDirectly();
} catch (Exception e) {
e.printStackTrace();
emitter.onError(e);
}
emitter.onComplete();
});
}
Autenticação de cartão NFC
O exemplo abaixo demonstra como executar uma solicitação de autenticação do cartão NFC diretamente pelo terminal.
public Observable<Integer> detectJustAuthDirectly() {
// chave de autenticacao de um cartao NFC virgem
byte[] key = { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF };
return Observable.create(emitter -> {
try {
// Starta a antena NFC
int resultStartNfc = mPlugPag.startNFCCardDirectly();
PlugPagNFCInfosResultDirectly plugPagNFCInfosResult =
mPlugPag.detectNfcCardDirectly(PlugPagNearFieldCardData.ONLY_M, 20);
if (plugPagNFCInfosResult.getResult() != RET_OK) {
emitter.onError(new PlugPagException("Cartão não identificado"));
emitter.onComplete();
return;
}
final PlugPagNFCAuthDirectly auth = new PlugPagNFCAuthDirectly((byte)
0, key, EM1KeyType.TYPE_B, plugPagNFCInfosResult.getSerialNumber());
int resultAuth = mPlugPag.justAuthNfcDirectly(auth);
if (resultAuth != RET_OK) {
emitter.onError(new PlugPagException(String.format("Erro ao autenticar bloco")));
emitter.onComplete();
return;
}
emitter.onNext(resultAuth);
// Stopa a antena NFC
mPlugPag.stopNFCCardDirectly();
} catch (Exception e) {
e.printStackTrace();
emitter.onError(e);
}
emitter.onComplete();
});
}
Comandos APDU
Na SmartPOS, uma application protocol data unit (APDU), em português unidade de dados de protocolo de aplicativo, é a unidade de comunicação entre o SmartPOS e um cartão NFC.
A leitura do cartão NFC é sempre necessária. Após detectar o cartão, você poderá enviar os comandos APDU. Durante esse processo é necessário que o cliente mantenha o cartão próximo ao leitor. O Exemplo abaixo demontra os comandos necessários para executar esse processo.
public Observable<PlugPagCmdExchangeResult> cmdExchange() {
return Observable.create(emitter -> {
// Comando APDU
byte[] command = new byte[]{
(byte) 0x00,
(byte) 0x00,
(byte) 0x00,
(byte) 0x00,
(byte) 0x00,
(byte) 0x00,
(byte) 0x00
};
try {
PlugPagCmdExchangeResult resultAuth = mPlugPag.apduCommand(command, 256);
if (resultAuth != null && resultAuth.getCmd() != null &&
resultAuth.getCmd().length > 0) {
emitter.onNext(resultAuth);
}else{
; emitter.onError(new PlugPagException("Ocorreu um erro no comando APDU."));
}
emitter.onComplete();
} catch (Exception e) {
e.printStackTrace();
emitter.onError(e);
}
});
}
Updated 9 months ago