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