Pesquisar

Are you looking for test card numbers?

Would you like to contact support?

Point-of-sale icon

Reconhecimento de clientes e tokenização

Vincule os detalhes da transação a um cliente para obter insights, informações sobre o engajamento do cliente e tokenização.

A conexão dos identificadores de clientes com os detalhes da transação permite:

  • Reconhecimento passivo de clientes: obtenha insights para expandir seus negócios.
    Por exemplo, os dados de origem do cliente podem ajudá-lo a decidir se você deve aceitar novas formas de pagamento, oferecer conversão de moeda em seus terminais, adicionar sinalização em outros idiomas da loja e assim por diante.

  • Reconhecimento ativo de clientes: Envolva clientes já reconhecidos personalizando sua experiência de compra.
    Por exemplo, aplique descontos ou presentes de fidelidade no local ou envie ao comprador um recibo eletrônico por e-mail.

  • Tokenização: para pagamentos recorrentes.
    Você pode usar isso ao vender produtos cruzados que exigem pagamentos regulares, como uma apólice de seguro para um produto que o cliente comprou em sua loja.

Tudo isso é especialmente poderoso em todos os canais. Veja nossa solução de comércio unificado para obter mais informações e casos de uso.

Identificadores de clientes e perfis de clientes

As solicitações de aquisição e pagamento de cartão podem retornar vários identificadores de clientes que você pode usar para reconhecimento e tokenização passivos e ativos dos clientes:

  • Alias do cartão: Um valor que representa exclusivamente o número do cartão (PAN) do comprador, por exemplo A37317672402294.
  • Referência do cliente: Um valor exclusivo de sua escolha para identificar o cliente. Se você também coletar o endereço de e-mail do cliente, poderá vincular vários aliases de cartão ao mesmo cliente por meio do endereço de e-mail.
  • País emissor: Código do país em que o cartão foi emitido. Geralmente, esse é um bom indicador da nacionalidade do cliente.
  • Fonte de financiamento: Fonte de financiamento do cartão, como débito, crédito ou pré-pago.
  • Referência detalhada recorrente: O token para pagamentos recorrentes. Para esses pagamentos, o cliente não precisa estar presente, mas o alias do cartão deve estar vinculado ao endereço de e-mail do cliente. Para mais informações, consulte nossa documentação sobre Tokenização documentation.

Cabe a você decidir qual desses identificadores você deseja usar. No banco de dados do cliente, você precisa criar um perfil para cada cliente para armazenar seus identificadores, bem como os detalhes da transação. Dessa forma, você poderá vincular um novo pagamento a pagamentos anteriores feitos com o mesmo cartão ou pelo mesmo cliente.

Antes de começar

Antes de começar a vincular os detalhes do cartão aos clientes:

  1. Certifique-se de:

  2. Considere como você deverá lidar com as implicações de privacidade.

Gerenciando dados e privacidade do cliente

Antes de armazenar quaisquer dados do cliente, você deve consultar as leis e regulamentos locais nos países em que opera. Você também deve solicitar permissão explícita do seu cliente para armazenar esses dados e ter clareza sobre o que pretende usá-los.

Oferecemos uma API de proteção de dados. Você pode usá-la para remover todos os dados do cliente que você armazenou na Adyen, a fim de atender ao right to erasure mandate do Regulamento Geral de Proteção de Dados (GDPR).

Ativar receptores de identificadores de clientes

  1. Em sua Customer Area, vá para Developers > API URLs e, na guia Additional data settings tselecione estas opções:

    • Recurring details
    • Recurring contract type
    • issuerCountry
    • Funding source

    A API de terminais retorna esses dados no AdditionalResponse.

  2. Opcionalmente, receba identificadores de clientes também em webhooks de notificação:

    1. Configure webhooks de notificação .
    2. Entre em contato com nossa POS Support Team e solicite que ele garanta que o alias do cartão esteja incluído na notificação.

Como funciona

Quando o cliente faz uma compra na sua loja:

  1. Você faz uma solicitação de aquisição de cartão para verificar se o cliente é reconhecido.
  2. Se a resposta de aquisição do cartão indicar que você não possui registro do cliente, rie um novo perfil de cliente e faça um pagamento. Opcionalmente, tokenize os detalhes do cartão para pagamentos recorrentes.
    A partir de agora, o cliente será reconhecido com base na referência que você criar com essa solicitação de pagamento.
  3. Se a resposta de aquisição do cartão indicar que você já possui o cliente registrado, efetue um pagamento para um cliente reconhecido.

Verifique se o cliente é reconhecido

Quando o cliente faz uma compra, verifique primeiro se você já possui o registro. Isso também é conhecido como 'reconhecimento pré-transação'.

  1. Faça uma solicitação de aquisição de cartão request.

    {
        "SaleToPOIRequest":{
            "MessageHeader":{
                "ProtocolVersion":"3.0",
                "MessageClass":"Service",
                "MessageCategory":"CardAcquisition",
                "MessageType":"Request",
                "SaleID":"POSSystemID12345",
                "ServiceID":"1020711110",
                "POIID":"V400m-346403161"
            },
            "CardAcquisitionRequest":{
                "SaleData":{
                    "SaleTransactionID":{
                        "TransactionID":"02072",
                        "TimeStamp":"2020-01-07T14:14:04+00:00"
                    },
                    "TokenRequestedType":"Customer"
                },
                "CardAcquisitionTransaction":{
                    "TotalAmount":24.98
                }
            }
        }
    }
    {
        "SaleToPOIResponse": {
            "CardAcquisitionResponse": {
                "POIData": {
                    "POITransactionID": {
                        "TimeStamp": "2020-01-17T14:14:48.000Z",
                        "TransactionID": "8ha5001579009268002"
                    },
                    "SaleData": {...}
                },
                "PaymentInstrumentData": {
                    "CardData": {
                        "PaymentToken": {
                            "TokenRequestedType": "Customer",
                            "TokenValue": "M469509594859802"
                        },
                        "PaymentBrand": "mc",
                        "MaskedPan": "541333 **** 9999",
                        "SensitiveCardData": {
                            "ExpiryDate": "0228"
                        }
                    },
                    "PaymentInstrumentType": "Card"
                },
                "Response": {
                    "Result": "Success",
                    "AdditionalResponse": "tid=46403161&transactionType=GOODS_SERVICES&backendGiftcardIndicator=false&posadditionalamounts.originalAmountValue=2370&expiryYear=2028&alias=M469509594859802&posAmountGratuityValue=0&giftcardIndicator=false&paymentMethodVariant=mc&txtime=17%3a34%3a33&iso8601TxDate=2020-01-08T16%3a34%3a33.0000000%2b0000&cardType=mc&posOriginalAmountValue=2370&aliasType=Default&txdate=08-01-2020&paymentMethod=mc&merchantReference=02076&expiryMonth=02&cardSummary=9999&posadditionalamounts.originalAmountCurrency=EUR&posAuthAmountCurrency=EUR&posAmountCashbackValue=0&posEntryMode=CLESS_CHIP&fundingSource=CREDIT&cardScheme=mc&cardBin=541333&posAuthAmountValue=2370"
                }
            },
            "MessageHeader": {...}
        }
    }
    String serviceID = "YOUR_UNIQUE_ATTEMPT_ID";
    String saleID = "YOUR_CASH_REGISTER_ID";
    String POIID = "YOUR_TERMINAL_ID";
    String transactionID = "YOUR_UNIQUE_TRANSACTION_ID";
    
    SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();
    MessageHeader messageHeader = new MessageHeader();
    messageHeader.setProtocolVersion("3.0");
    messageHeader.setMessageClass( MessageClassType.SERVICE );
    messageHeader.setMessageCategory( MessageCategoryType.CARD_ACQUISITION );
    messageHeader.setMessageType( MessageType.REQUEST );
    messageHeader.setServiceID(serviceID);
    messageHeader.setSaleID(saleID);
    messageHeader.setPOIID(POIID);
    saleToPOIRequest.setMessageHeader(messageHeader);
    
    CardAcquisitionRequest cardAcquisitionRequest = new CardAcquisitionRequest();
    SaleData saleData = new SaleData();
    TransactionIdentification saleTransactionID = new TransactionIdentification();
    saleTransactionID.setTransactionID(transactionID);
    saleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
    saleData.setSaleTransactionID(saleTransactionID);
    saleData.setTokenRequestedType( TokenRequestedType.CUSTOMER );
    cardAcquisitionRequest.setSaleData(saleData);
    
    CardAcquisitionTransaction cardAcquisitionTransaction = new CardAcquisitionTransaction();
    cardAcquisitionTransaction.setTotalAmount( BigDecimal.valueOf(24.98) );
    cardAcquisitionRequest.setCardAcquisitionTransaction(cardAcquisitionTransaction);
    saleToPOIRequest.setCardAcquisitionRequest(cardAcquisitionRequest);
    terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);
  2. No CardAcquisitionResponse, observe o seguinte:

    • POIData.POITransactionID: O TimeStamp e TransactionID desta solicitação de aquisição de cartão. Você precisará desses dados posteriormente quando continuar com o pagamento.
    • PaymentInstrumentData.CardData.PaymentToken.TokenValue: O alias do cartão. Este campo está incluído se você especificou um TokenRequestedType do Cliente em seu pedido. O alias também está incluído no Response.AdditionalResponse.
  3. Verifique se a sequêcia AdditionalResponse da resposta de aquisição do cartão contém a shopperReference.

Crie um novo perfil de cliente e efetue um pagamento

Quando a resposta de aquisição do cartão mostra que o cliente ainda não é conhecido, você continua com uma solicitação de pagamento que se refere à aquisição do cartão e também cria identificadores de cliente.

  1. Para reconhecimento ativo do cliente: Dependendo da lógica de negócios, primeiro colete o endereço de e-mail do cliente, pergunte se ele deseja se inscrever no seu programa de fidelidade e assim por diante.
    Você pode fazer solicitações de entrada para coletar essas informações ou permitir que sua equipe insira as informações no seu software de caixa registradora.
  2. Faça uma solicitação de pagamento especificando um objeto PaymentRequest.SaleData que inclua adicionalmente:

    • TokenRequestedType: Customer. Isso retorna o alias do cartão no campo TokenValue da resposta. Se você não incluir o campo TokenRequestedType, o alias do cartão será retornado apenas no campo AdditionalResponse. Para o reconhecimento passivo de clien isso é suficiente e você não precisa especificar mais identificadores de clientes.
    • SaleToAcquirerData: Dados para cirar identificadores de clientes para reconhecimento ativo de clientes e tokenização:

      • shopperEmail: O endereço de e-mail do cliente, se você o coletou na primeira etapa.
      • shopperReference: Your unique reference for this shopper.
      • recurringContract: ONECLICK,RECURRING. Inclua isso se desejar criar um token para pagamentos recorrentes online.

      Passe esses dados em um dos seguintes formatos:

      • Um objeto JSON convertido em uma sequência codificada Base64.
      • Pares de valores-chave codificados em formulário (usando & como separador). Por exemplo:
        shopperEmail=S.Hopper@example.com&shopperReference=12345&recurringContract=ONECLICK,RECURRING

      O formato que você usa aqui determina o formato AdditionalResponse que você receberá.

    • PaymentData.CardAcquisitionReference: O Timestamp e TransactionID da solicitação de aquisição do cartão. Você recebeu esses dados no objeto POIData.POITransactionID do CardAcquisitionResponse.

    {
        "SaleToPOIRequest":{
            "MessageHeader":{
                "ProtocolVersion":"3.0",
                "MessageClass":"Service",
                "MessageCategory":"Payment",
                "MessageType":"Request",
                "SaleID":"POSSystemID12345",
                "ServiceID":"01142",
                "POIID":"V400m-346403161"
            },
            "PaymentRequest":{
                "SaleData":{
                    "SaleTransactionID":{
                        "TransactionID":"12420",
                        "TimeStamp":"2020-01-07T14:15:25.114Z"
                    },
                    "SaleToAcquirerData":"shopperEmail=S.Hopper@example.com&shopperReference=YOUR_UNIQUE_SHOPPER_ID&recurringContract=ONECLICK,RECURRING",
                    "TokenRequestedType":"Customer"
                },
                "PaymentTransaction":{
                    "AmountsReq":{
                        "Currency":"EUR",
                        "RequestedAmount":24.98
                    }
                }
            }
        }
    }
    {
        "SaleToPOIResponse": {
            "PaymentResponse": {
                "POIData": {...},
                "SaleData": {...}
                "PaymentReceipt": [...],
                "PaymentResult": {
                    ...
                    "PaymentInstrumentData": {
                        "CardData": {
                            "EntryMode": [
                                "Contactless"
                            ],
                        "PaymentToken": {
                            "TokenRequestedType": "Customer",
                            "TokenValue": "M469509594859802"
                        },
                        "PaymentBrand": "mc",
                        "MaskedPan": "541333 **** 9999",
                        "SensitiveCardData": {
                            "CardSeqNumb": "83",
                            "ExpiryDate": "0228"
                        }
                    },
                    "PaymentInstrumentType": "Card"
                },
                "AmountsResp": {
                    "AuthorizedAmount": 24.98,
                    "Currency": "EUR"
                },
                "Response": {
                    "Result": "Success",
                    "AdditionalResponse": "...recurring.recurringDetailReference=8415790083332048...&recurring.shopperReference=YOUR_UNIQUE_SHOPPER_ID...&shopperReference=YOUR_UNIQUE_SHOPPER_ID&shopperEmail=S.Hopper%40gmail.com...&adjustAuthorisationData=BQABAQBoaOt7n1q1Ons6Ec..."
                }
            },
            "MessageHeader": {...}
        }
    }
    String serviceID = "YOUR_UNIQUE_ATTEMPT_ID";
    String saleID = "YOUR_CASH_REGISTER_ID";
    String POIID = "YOUR_TERMINAL_ID";
    String transactionID = "YOUR_UNIQUE_TRANSACTION_ID";
    
    SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();
    MessageHeader messageHeader = new MessageHeader();
    messageHeader.setProtocolVersion("3.0");
    messageHeader.setMessageClass( MessageClassType.SERVICE );
    messageHeader.setMessageCategory( MessageCategoryType.PAYMENT );
    messageHeader.setMessageType( MessageType.REQUEST );
    messageHeader.setServiceID(serviceID);
    messageHeader.setSaleID(saleID);
    messageHeader.setPOIID(POIID);
    saleToPOIRequest.setMessageHeader(messageHeader);
    
    PaymentRequest paymentRequest = new PaymentRequest();
    SaleData saleData = new SaleData();
    saleData.setSaleToAcquirerData("shopperEmail=s.hopper@example.com&shopperReference=YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j&recurringContract=RECURRING");
    saleData.setTokenRequestedType( TokenRequestedType.CUSTOMER );
    TransactionIdentification saleTransactionID = new TransactionIdentification();
    saleTransactionID.setTransactionID(transactionID);
    saleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
    saleData.setSaleTransactionID(saleTransactionID);
    paymentRequest.setSaleData(saleData);
    
    PaymentTransaction paymentTransaction = new PaymentTransaction();
    AmountsReq amountsReq = new AmountsReq();
    amountsReq.setCurrency("EUR");
    amountsReq.setRequestedAmount( BigDecimal.valueOf(24.98) );
    paymentTransaction.setAmountsReq(amountsReq);
    paymentRequest.setPaymentTransaction(paymentTransaction);
    
    PaymentData paymentData = new PaymentData();
    TransactionIdentification cardAcquisitionReference = new TransactionIdentification();
    cardAcquisitionReference.setTransactionID(transactionID);
    cardAcquisitionReference.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
    paymentData.setCardAcquisitionReference(cardAcquisitionReference);
    paymentRequest.setPaymentData(paymentData);
    saleToPOIRequest.setPaymentRequest(paymentRequest);
    terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);
  3. Na resposta de pagamento, observe o seguinte (pode ser necessário decodificar Base64 a cadeia primeiro):

    • PaymentToken.TokenValue: O alias do cartão. Isso está incluído se você especificou um TokenRequestedType de Customer no seu pedido.
    • Os identificadores de clientes em Response.AdditionalResponse:

      • alias: O alias do cartão.
      • recurringDetailReference: Um token que representa o método de pagamento do cliente, para uso em pagamentos recorrentes on-line. Você recebe isso se você incluiu o parâmetro recurringContract na solicitação.
      • shopperReference: Sua referência exclusiva para este comprador que você especificou na solicitação.
      • shopperEmail: O endereço de e-mail do cliente que você especificou na solicitação.

    Os identificadores de cliente para esse comprador agora estão armazenados na plataforma de pagamentos da Adyen.

  4. No seu sistema, crie um perfil de cliente para o cliente e armazene os identificadores de cliente que você recebeu na resposta de pagamento.
  5. Também armazene os dados da transação com o perfil do cliente do cliente.

Efetue um pagamento para um cliente reconhecido

Quando a resposta de aquisição do cartão mostra que o cliente já é conhecido, você segue uma solicitação de pagamento referente à aquisição do cartão.

  1. Combine o shopperReference que você recebeu na resposta de aquisição do cartão com o shopperReference armazenado no seu sistema.
  2. Para reconhecimento ativo do cliente: Dependendo da lógica de negócios, decida se deseja aplicar um desconto, oferecer um presente e assim por diante. Se necessário, atualize o valor devido.
  3. Faça uma solicitação de pagamento especificando um objeto PaymentRequest.PaymentData que inclua adicionalmente:

    • TokenRequestedType: Customer. Isso retorna o alias do cartão no campo TokenValue da resposta. Se você não incluir o campo TokenRequestedType, o alias do cartão será retornado apenas no AdditionalResponse.
    • CardAcquisitionReference: A Timestamp e TransactionID da solicitação de aquisição do cartão. Você recebeu esses dados no obejto POIData.POITransactionID da CardAcquisitionResponse.

    {
        "SaleToPOIRequest":{
            "MessageHeader":{
                "ProtocolVersion":"3.0",
                "MessageClass":"Service",
                "MessageCategory":"Payment",
                "MessageType":"Request",
                "SaleID":"POSSystemID12345",
                "ServiceID":"01142",
                "POIID":"V400m-346403161"
            },
            "PaymentRequest":{
                "SaleData":{
                    "SaleTransactionID":{
                        "TransactionID":"12420",
                        "TimeStamp":"2020-01-07T14:15:25.114Z"
                    },
                    "TokenRequestedType":"Customer"
                },
                "PaymentTransaction":{
                    "AmountsReq":{
                        "Currency":"EUR",
                        "RequestedAmount":24.98
                    }
                },
                "PaymentData":{
                    "CardAcquisitionReference":{
                        "TimeStamp": "2020-01-17T14:14:48.000Z",
                        "TransactionID": "8ha5001579009268002"
                    }
                }
            }
        }
    }
    {
        "SaleToPOIResponse": {
            "PaymentResponse": {
                "POIData": {...},
                "PaymentReceipt": [...],
                "PaymentResult": {
                    ...,
                    "PaymentInstrumentData": {
                        "CardData": {
                            ...,
                            "PaymentToken": {
                                "TokenRequestedType": "Customer",
                                "TokenValue": "M469509594859802"
                            },
                            "PaymentBrand": "mc",
                            "MaskedPan": "541333 **** 9999",
                            "SensitiveCardData": {
                                "CardSeqNumb": "83",
                                "ExpiryDate": "0228"
                            }
                        },
                        "PaymentInstrumentType": "Card"
                    },
                    "AmountsResp": {
                        "AuthorizedAmount": 24.98,
                        "Currency": "EUR"
                    }
                },
                "Response": {
                    "Result": "Success",
                    "AdditionalResponse": "...recurring.recurringDetailReference=8415790083332048...&recurring.shopperReference=YOUR_UNIQUE_SHOPPER_ID...&shopperReference=YOUR_UNIQUE_SHOPPER_ID&shopperEmail=S.Hopper%40gmail.com...&adjustAuthorisationData=BQABAQBoaOt7n1q1Ons6Ec..."
                }
            },
            "MessageHeader": {...}
        }
    }
    String serviceID = "YOUR_UNIQUE_ATTEMPT_ID";
    String saleID = "YOUR_CASH_REGISTER_ID";
    String POIID = "YOUR_TERMINAL_ID";
    String transactionID = "YOUR_UNIQUE_TRANSACTION_ID";
    
    SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();
    MessageHeader messageHeader = new MessageHeader();
    messageHeader.setProtocolVersion("3.0");
    messageHeader.setMessageClass( MessageClassType.SERVICE );
    messageHeader.setMessageCategory( MessageCategoryType.PAYMENT );
    messageHeader.setMessageType( MessageType.REQUEST );
    messageHeader.setServiceID(serviceID);
    messageHeader.setSaleID(saleID);
    messageHeader.setPOIID(POIID);
    saleToPOIRequest.setMessageHeader(messageHeader);
    
    PaymentRequest paymentRequest = new PaymentRequest();
    SaleData saleData = new SaleData();
    saleData.setTokenRequestedType( TokenRequestedType.CUSTOMER );
    TransactionIdentification saleTransactionID = new TransactionIdentification();
    saleTransactionID.setTransactionID(transactionID);
    saleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
    saleData.setSaleTransactionID(saleTransactionID);
    paymentRequest.setSaleData(saleData);
    
    PaymentTransaction paymentTransaction = new PaymentTransaction();
    AmountsReq amountsReq = new AmountsReq();
    amountsReq.setCurrency("EUR");
    amountsReq.setRequestedAmount( BigDecimal.valueOf(24.98) );
    paymentTransaction.setAmountsReq(amountsReq);
    paymentRequest.setPaymentTransaction(paymentTransaction);
    
    PaymentData paymentData = new PaymentData();
    TransactionIdentification cardAcquisitionReference = new TransactionIdentification();
    cardAcquisitionReference.setTransactionID(transactionID);
    cardAcquisitionReference.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
    paymentData.setCardAcquisitionReference(cardAcquisitionReference);
    paymentRequest.setPaymentData(paymentData);
    saleToPOIRequest.setPaymentRequest(paymentRequest);
    terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);
  4. Na resposta de pagamento, observe o seguinte (pode ser necessário decodificar Base64 a cadeia primeiro):

    • PaymentToken.TokenValue: O alias do cartão. Isso está incluído se você especificou um TokenRequestedType do Customer no seu pedido.
    • Os identificadores de cliente no Response.AdditionalResponse:

      • alias: O alias do cartão.
      • recurringDetailReference: Um token que representa o método de pagamento do cliente, para uso em pagamentos recorrentes online.
      • shopperReference: Sua referência exclusiva para este cliente.
      • shopperEmail: O endereço de e-mail do cliente.

      Você pode não receber tudo isso, dependendo dos parâmetros que você incluiu ao criar um novo perfil de cliente.

  5. No seu sistema, armazene os dados da transação com o perfil do cliente.

Veja também