PPC_CMD_GETCARD

Este comando inicia um processo de transação com cartão de pagamento, seja ele magnético, chip contato ou contactless.

Ao ser acionado, o pin pad mostra uma mensagem no display solicitando a apresentação de um cartão. Caso seja utilizado um cartão com chip (contato ou contactless), o processamento EMV é iniciado automaticamente. Para isso, o pin pad necessita que as Tabelas EMV estejam carregadas em sua memória (ver Comandos para manutenção de Tabelas EMV).

📘

Este comando é blocante, portanto deve ser usado com as funções PPC_StartExecCmd e PPC_FinishExecCmd.

Parâmetros de entrada

ConstantePresençaObservação
PPC_INP_TRNTYPEOTipo de transação sendo efetuada: "00" = Compra; "09" = Compra com saque/troco (cashback); "20" = Cancelamento (refund). Se não informado, assume "00" (Compra).
PPC_INP_APPTYPEMTipo de aplicação desejada: "01" = crédito; "02" = débito.
PPC_INP_CTLSONOIndica se a interface de cartão sem contato pode ser usada: "0" = Nunca ativar (não aceita cartões sem contato); "1" = Ativar ou não de acordo com os parâmetros da transação e da Tabela de AID (pode aceitar cartões sem contato). Se não informado, assume "1".
PPC_INP_AMOUNTMValor total da transação, em centavos. Corresponde a JSON{"Payment.Amount"}.
PPC_INP_CASHBACKOValor do saque em dinheiro, em centavos. Utilizado apenas quando PPC_INP_TRNTYPE = "09".
PPC_INP_DATETIMEMData e hora da transação. Corresponde a JSON{"Payment.PaymentDateTime"}.
PPC_INP_INITVERMÚltimos 10 caracteres da Versão da Inicialização. Corresponde a JSON{"InitializationVersion"}.

Dados de resposta

ConstanteObservação
PPC_OUT_CARDTYPETipo de cartão utilizado: "MagStripe", "Emv", "ContactlessMagStripe" ou "ContactlessEmv". Corresponde a JSON{"CreditCard.InputMode"}.
PPC_OUT_CARDBINBIN do cartão, utilizado para pesquisa nas tabelas. Corresponde a JSON{"Bins.InitialBin"} / JSON{"Bins.FinalBin"}.
PPC_OUT_4LASTDIGQuatro últimos dígitos do número do cartão (PAN).
PPC_OUT_CARDIDCódigo de referência para identificação do cartão.
PPC_OUT_CARDAIDAID do cartão utilizado (chip com contato ou contactless), para pesquisa nas tabelas. (*)
PPC_OUT_SERVCODECódigo de serviço (disponível somente para cartão magnético).
PPC_OUT_CHNAMENome do portador do cartão, quando disponível.
PPC_OUT_PANSEQNBRPAN Sequence Number, quando existente em cartões com chip (contato ou contactless). Corresponde a JSON{"CreditCard.PanSequenceNumber"}.
PPC_OUT_CARDEXPData de expiração do cartão. Corresponde a JSON{"CreditCard.ExpirationDate"}.
PPC_OUT_ISFBACKIndica se a transação ocorreu em fallback. Disponível somente para cartão magnético. Corresponde a JSON{"CreditCard.IsFallback"}.
PPC_OUT_LABELLabel do cartão com chip para impressão no comprovante.
PPC_OUT_VALCODECódigo de validação da transação a ser enviado ao Cielo Conecta.
📘

(*) O AID retornado pelo cartão pode ter bytes extras à esquerda, portanto a comparação deve ser feita levando-se em conta o tamanho do AID das tabelas JSON{“Emv.Aid”}. Por exemplo, o AID do cartão “A000000003101001” corresponde ao registro da tabela em que o AID é “A0000000031010”

Retornos

RetornoDescrição
PPC_OKCartão capturado com sucesso.
PPC_NOTOPENO comando PPC_CMD_OPEN não foi chamado previamente.
PPC_ERRMANDATUm parâmetro mandatório não foi fornecido.
PPC_INVPARAMUm parâmetro informado possui valor inválido.
PPC_TABEXPA versão das tabelas do pinpad difere de PPC_INP_INITVER. Nesse caso, as tabelas devem ser atualizadas conforme descrito em Comandos para manutenção de Tabelas EMV.
PPC_MCDATAERRErro na leitura do cartão magnético.
PPC_CARDINVCartão com chip inválido ou desconhecido e, portanto, não pode ser processado.
PPC_CTLSSCOMMERRErro de comunicação entre o pin pad e o cartão contactless.
PPC_CANCELO portador cancelou a operação no menu de seleção de aplicação.
PPC_EXPLICENSEA licença fornecida em PPC_CMD_OPEN está expirada.

Outros retornos: Ver Códigos de retorno.

Exemplo

int iLeCartaoDebito (void) 
{ 
   int iSt; 
   char sNotifyMsg[32],szBIN[7],szType[21],szAID[33],szValCode[5]; 

   PPC_SetParam (PPC_INP_APPTYPE, “02”, -1); 
   PPC_SetParam (PPC_INP_AMOUNT, gszAmount, -1); 
   PPC_SetParam (PPC_INP_DATETIME, gszPaymentDateTime, -1); 
   PPC_SetParam (PPC_INP_INITVER, gszInitializationVersion, -1); 
   iSt  = PPC_StartExecCmd (PPC_CMD_GETCARD); 
   if (iSt != PPC_OK) return iSt; 

   do { 
      iSt = PPC_FinishExecCmd (sNotifyMsg); 
      if (iSt == PPC_NOTIFY) ShowNotifyMessage (sNotifyMsg); 
      if (WishToAbort () == TRUE) { 
         PPC_AbortCmd (); 
         return APP_ABORTED; 
      } 
   } while (iSt == PPC_PROCESSING || iSt == PPC_NOTIFY); 
   if (iSt != PPC_OK) return iSt; 

   iSt = PPC_GetResp (PPC_OUT_CARDTYPE, sizeof (szType), szType); 
   if (iSt != PPC_OK) return iSt; 
   iSt = PPC_GetResp (PPC_OUT_CARDBIN, sizeof (szBIN), szBIN); 
   if (iSt != PPC_OK) return iSt; 
   iSt = PPC_GetResp (PPC_OUT_VALCODE, sizeof(szValCode), szValCode); 
   if (iSt != PPC_OK) return iSt; 

   if (!strcmp (szType, “MagStripe”)) 
      return iProcessaDebitoMagstripe (szBIN); 

   iSt = PPC_GetResp (PPC_OUT_CARDAID, sizeof (szAID), szAID); 
   if (iSt != PPC_OK) return iSt; 
   iSt = iSearchAIDTables (szAID); 
   if (iSt != PPC_OK) return iSt; 

   /*---- Pega a trilha 2 criptografada ----*/ 

   PPC_SetParam (PPC_INP_GTMODE, “1”, 1); 

   iSt = PPC_ExecCmdNBlk (PPC_CMD_GETTRACKS); 
   if (iSt != PPC_OK) return iSt; 

   iSt = PPC_GetResp (PPC_OUT_TRACK2, sizeof (gszTrackTwoData), 
                                      gszTrackTwoData); 
   if (iSt != PPC_OK) return iSt; 
   iSt = PPC_GetResp (PPC_OUT_ENCTYPE, sizeof (gszEncryptionType), 
                                      gszEncryptionType); 
   if (iSt != PPC_OK) return iSt; 
   iSt = PPC_GetResp (PPC_OUT_TRK2KSN, sizeof (gszTrackTwoDataKSN), 
                                      gszTrackTwoDataKSN); 
   return iSt; 
} 

Did this page help you?