PPC_CMD_PROCCHIP

Este comando continua o processo de tratamento de cartões com chip caso o comando PPC_CMD_GETCARD tenha sido executado previamente com sucesso para um cartão EMV com contato EMV (PPC_OUT_CARDTYPE = “Emv”) ou contactless EMV (PPC_OUT_CARDTYPE = “ContactlessEmv”).

Caso haja necessidade de validar a senha do portador, este comando já efetua o processo de captura.

📘

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_TRNTYPEOSe não informado, assume o valor passado em PPC_CMD_GETCARD.
PPC_INP_AMOUNTOSe não informado, assume o valor passado em PPC_CMD_GETCARD.
JSONPayment.Amount
PPC_INP_CASHBACKOSe não informado, assume o valor passado em PPC_CMD_GETCARD.
PPC_INP_FLRLIMITOSe não informado, assume o valor zero.
JSONEmv.NatEmvConctactRiskFloorLimit ou JSONEmv.IntEmvConctactRiskFloorLimit
PPC_INP_THRSVALOSe não informado, assume o valor zero.
JSONEmv.NatEmvConctactRiskMinValue ou JSONEmv.IntEmvConctactRiskMinValue
PPC_INP_TGTPRCTOSe não informado, assume o valor zero.
JSONEmv.NatEmvConctactRiskMinPercent ou JSONEmv.IntEmvConctactRiskMinPercent
PPC_INP_MAXTPRCTOSe não informado, assume o valor zero.
JSONEmv.NatEmvConctactRiskMaxPercent ou JSONEmv.IntEmvConctactRiskMaxPercent
PPC_INP_TAGLISTMLista de tags dos objetos EMV requeridos na resposta.
JSONEmv.TagsFirst

Dados de resposta

ConstanteObservação
PPC_OUT_RESULTResultado do processamento:
“0” = Transação aprovada offline;
“1” = Transação negada offline; ou
“2” = Transação requer autorização online.
PPC_OUT_AUTHMETMétodo de autenticação do portador.
JSONCreditCard.AuthenticationMethod
PPC_OUT_PINBLKPIN criptografado, se PPC_OUT_AUTHMET = “OnlineAuthentication”.
JSONPinBlock.EncryptedPinBlock
PPC_OUT_PINKSNKey Serial Number, se PPC_OUT_AUTHMET = “OnlineAuthentication”.
JSONPinBlock.KsnIdentification
PPC_OUT_ENCTYPETipo de criptografia de PIN, se PPC_OUT_AUTHMET = “OnlineAuthentication”.
JSONPinBlock.EncryptionType
PPC_OUT_EMVDATALista dos objetos TLV requeridos por PPC_INP_TAGLIST.
JSONEmvData
PPC_OUT_APLCRYPTCriptograma gerado pelo cartão (“ARQC”) para impressão no comprovante.

Retornos

RetornoDescrição
PPC_OKSucesso.
PPC_NOTOPENComando PPC_CMD_OPEN não foi previamente chamado.
PPC_INVCALLComando PPC_CMD_GETCARD não foi executado previamente com sucesso para cartão EMV contato ou contactless.
PPC_ERRMANDATParâmetro mandatório não foi fornecido.
PPC_INVPARAMParâmetro fornecido possui valor inválido.
PPC_ERRCARDErro de comunicação do terminal com o cartão com chip.
PPC_CANCELPortador cancelou a captura de senha (PIN).

Outros retornos: Ver Códigos de retorno. 

Exemplo

char gszEmvData[1025], gszAuthenticationMethod[25], 
     gszEncryptedPinBlock[17], gszKsnIdentification[21], 
     gszEncryptionType[17]; 
extern char gszTagsFirst[], gszTagsSecond[], gszEmvResponseData[]; 

int iProcessaChip (void) 
{ 
   char sNotifyMsg[32], szRes[2], szRetCode[4]; 
   int iSt; 

   PPC_SetParam (PPC_INP_TAGLIST, gszTagsFirst, -1); 
   iSt = PPC_StartExecCmd (PPC_CMD_PROCCHIP) 
   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_RESULT, sizeof (szRes), szRes); 
   if (iSt != PPC_OK) return iSt; 
   PPC_GetResp (PPC_OUT_EMVDATA, sizeof(gszEmvData), gszEmvData); 

   if (szRes[0] = ‘0’) return APP_TRANS_APROVADA_OFFLINE; 
   if (szRes[0] = ‘1’) return APP_TRANS_NEGADA_OFFLINE; 

   /*--------- Requer autorização online!! -----------*/ 

   PPC_GetResp (PPC_OUT_AUTHMET, 25, gszAuthenticationMethod); 
   if (!strcmp (gszAuthenticationMethod, “OnlineAuthentication”) { 
      PPC_GetResp (PPC_OUT_PINBLK, 17, gszEncryptedPinBlock); 
      PPC_GetResp (PPC_OUT_PINKSN, 21, gszKsnIdentification); 
      PPC_GetResp (PPC_OUT_ENCTYPE, 17, gszEncryptionType); 
   } 
   iSt = iSendOnlineAuthorization (szRetCode); 
   if (iSt == PPC_OK) { 
      PPC_SetParam (PPC_INP_RETCODE, szRetCode, -1); 
      PPC_SetParam (PPC_INP_EMVDATA, gszEmvResponseData, -1); 
      PPC_SetParam (PPC_INP_TAGLIST, gszTagsSecond, -1); 
   } 
   iSt = PPC_StartExecCmd (PPC_CMD_FINISHCHIP); 
   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) { 
      if (!strcmp (szRetCode, “0”)) { 
         EnviaDesfazimento (); 
      } 
      return iSt; 
   } 
   iSt = PPC_GetResp (PPC_OUT_FINALRES, sizeof (szRes), szRes); 
   if (iSt != PPC_OK) return iSt; 
   if (szRes[0] == “1” || szRes[0] == “3”) { 
      if (szRes[0] == “3”) EnviaDesfazimento (); 
      return APP_TRANS_NEGADA; 
   } 
   if (szRes[0] == “0”) return APP_TRANS_APROVADA_OFFLINE; 
   return TRANS_APROVADA; 
} 

Did this page help you?