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
| Constante | Presença | Observação |
|---|---|---|
| PPC_INP_TRNTYPE | O | Tipo 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_APPTYPE | M | Tipo de aplicação desejada: "01" = crédito; "02" = débito. |
| PPC_INP_CTLSON | O | Indica 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_AMOUNT | M | Valor total da transação, em centavos. Corresponde a JSON{"Payment.Amount"}. |
| PPC_INP_CASHBACK | O | Valor do saque em dinheiro, em centavos. Utilizado apenas quando PPC_INP_TRNTYPE = "09". |
| PPC_INP_DATETIME | M | Data e hora da transação. Corresponde a JSON{"Payment.PaymentDateTime"}. |
| PPC_INP_INITVER | M | Últimos 10 caracteres da Versão da Inicialização. Corresponde a JSON{"InitializationVersion"}. |
Dados de resposta
| Constante | Observação |
|---|---|
| PPC_OUT_CARDTYPE | Tipo de cartão utilizado: "MagStripe", "Emv", "ContactlessMagStripe" ou "ContactlessEmv". Corresponde a JSON{"CreditCard.InputMode"}. |
| PPC_OUT_CARDBIN | BIN do cartão, utilizado para pesquisa nas tabelas. Corresponde a JSON{"Bins.InitialBin"} / JSON{"Bins.FinalBin"}. |
| PPC_OUT_4LASTDIG | Quatro últimos dígitos do número do cartão (PAN). |
| PPC_OUT_CARDID | Código de referência para identificação do cartão. |
| PPC_OUT_CARDAID | AID do cartão utilizado (chip com contato ou contactless), para pesquisa nas tabelas. (*) |
| PPC_OUT_SERVCODE | Código de serviço (disponível somente para cartão magnético). |
| PPC_OUT_CHNAME | Nome do portador do cartão, quando disponível. |
| PPC_OUT_PANSEQNBR | PAN Sequence Number, quando existente em cartões com chip (contato ou contactless). Corresponde a JSON{"CreditCard.PanSequenceNumber"}. |
| PPC_OUT_CARDEXP | Data de expiração do cartão. Corresponde a JSON{"CreditCard.ExpirationDate"}. |
| PPC_OUT_ISFBACK | Indica se a transação ocorreu em fallback. Disponível somente para cartão magnético. Corresponde a JSON{"CreditCard.IsFallback"}. |
| PPC_OUT_LABEL | Label do cartão com chip para impressão no comprovante. |
| PPC_OUT_VALCODE | Có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
| Retorno | Descrição |
|---|---|
| PPC_OK | Cartão capturado com sucesso. |
| PPC_NOTOPEN | O comando PPC_CMD_OPEN não foi chamado previamente. |
| PPC_ERRMANDAT | Um parâmetro mandatório não foi fornecido. |
| PPC_INVPARAM | Um parâmetro informado possui valor inválido. |
| PPC_TABEXP | A 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_MCDATAERR | Erro na leitura do cartão magnético. |
| PPC_CARDINV | Cartão com chip inválido ou desconhecido e, portanto, não pode ser processado. |
| PPC_CTLSSCOMMERR | Erro de comunicação entre o pin pad e o cartão contactless. |
| PPC_CANCEL | O portador cancelou a operação no menu de seleção de aplicação. |
| PPC_EXPLICENSE | A 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;
} Updated about 1 month ago