Point-of-sale icon

Faça pagamentos à mesa

Como usar os fluxos de pagamento iniciados pelo terminal, como fazer o pagamento na ou na calçada.

Usando nossa solução não integrada?

Nossa solução não integrada não suporta o pagamento na mesa.

Dependendo de como você interage com seus clientes, pode ser necessário iniciar pagamentos a partir de um terminal em vez de uma caixa registradora. Isso permite que você aceite pagamentos de seus clientes em uma mesa, em um quarto de hotel ou na calçada.

O fluxo de pagamento iniciado pelo terminal oferece:

  • Divisão de pagamentos de forma igual e desigual.
  • Suporte para todos os métodos de pagamento adicionados à sua conta, bem como pagamentos em dinheiro.
  • Combinações simples com opções de gorjeta.
    Os clientes podem inserir um valor de gorjeta no terminal a cada pagamento dividido. Se você permitir que sua equipe insira um número de referência quando iniciar o pagamento a partir do terminal, poderá registrar gorjeta com esse membro da equipe para evitar ajustes posteriores.

Como funciona

Para começar, você precisa configurar o recurso. Consulte Etapa 1: Configurar o pagamento na mesa. Depois de fazer isso, o fluxo é o seguinte:

  1. No terminal, sua equipe seleciona um botão para iniciar o pagamento na mesa e insere o número de referência.
  2. O terminal envia uma notificação de evento para a caixa registradora. A notificação informa à caixa registradora que o terminal está aguardando para receber uma solicitação de pagamento para o número de referência.
  3. Se o número de referência não for suficiente para decidir qual solicitação de pagamento enviar, você envia um InputRequest para o terminal, solicitando mais detalhes à sua equipe. Por exemplo, peça um número de mesa, selecione em uma lista de comandas ou um número de entrega. Consulte Etapa 2: colete informações de sua equipe.
  4. Sua equipe fornece a entrada solicitada no terminal.
  5. Você envia um PrintRequest para imprimir a fatura usando o terminal. Isso é opcional. Depende das necessidades de seu negócio.
  6. Você envia um PaymentRequest da caixa registradora para o terminal. Consulte Etapa 3: faça um pagamento.
  7. O terminal mostra o valor a ser pago, o Split check, e monstra opções para:
    • Dividir a conta Igualmente. O terminal solicitará em quantas partes a conta deverá ser dividida.
    • Dividir a conta de forma Desigual. O terminal solicitará o valor da primeira parte a ser paga. Essa também é a opção a ser escolhida se há um único cliente pagando a conta inteira.
  8. Em seguida, o terminal mostra o valor dividido e as opções para:
    • Pague em Dinheiro (Cash). Sua equipe recebe o dinheiro e seleciona o botão no visor do terminal para confirmar.
    • Pagar com Cartão (Card). Sua equipe entrega o terminal ao cliente para que ele possa pagar sua parte da divisão e responder às opções de gorjeta no terminal (se configuradas).
  9. Depois que o pagamento dividido é Aprovado e Enviado, o terminal imprime um recibo.
  10. Você processa a resposta do pagamento dividido, para acompanhar o valor pago. Consulte Etapa 4: receber o resultado do pagamento.
  11. Se houver um valor restante a ser pago, o terminal mostrará a próxima parte da divisão e as seguintes opções:
    • Pague depois. Essa opção é útil quando há um grupo de clientes que está pagando sua parte da fatura em momentos diferentes. Quando sua equipe seleciona esse botão, o terminal mostra Cancelled. Quando alguém do grupo estiver pronto para pagar, sua equipe precisará iniciar o Pagamento na mesa novamente.
    • Pague o restante. Você envia outro PaymentRequest para o próximo pagamento dividido (consulte Etapa 3 e Etapa 4).
      Com divisões iguais, o terminal calcula o valor do próximo pagamento parcelado com base no número de divisões. Com divisões desiguais, o terminal mostra o valor restante e sua equipe insere o valor do próximo pagamento parcelado.

Isso continua até que o valor total tenha sido pago.

No terminal, você pode:
Pressionar para voltar um passo no fluxo. Isso é possível até o momento em que Dinheiro ou Cartão é selecionado.
Pressionar para cancelar o fluxo a qualquer momento.

Antes de você começar

Antes de fazer transações de pagamento na mesa, certifique-se de:

Verifique também se você está usando terminais de pagamento com uma impressora integrada e uma conexão Wi-Fi, por exemplo:

  • V400c
  • V400m. Este modelo pode mudar automaticamente para uma conexão 3G / 4G se a conexão Wi-Fi cair.

Etapa 1: configurar o pagamento à mesa

Nesta etapa, você:

  • Habilite o recurso que permite ao terminal enviar uma notificação SaleWakeUp de evento para a caixa registradora. Esta notificação alerta a caixa registradora que o terminal está aguardando para receber uma solicitação de pagamento.
  • Escreva o texto do botão que sua equipe seleciona no visor do terminal para iniciar o Pagamento na mesa. Selecionar o botão aciona a notificação SaleWakeUp do evento.
  • (Opcional) Escreva o texto para solicitar à sua equipe que digite o número de referência. A notificação SaleWakeUp do evento incluirá o número de referência digitado pela sua equipe. Você pode usar isso, por exemplo, para recuperar uma conta associada ou registrar vendas e dicas por cada membro da equipe.
  • Adicione lógica à sua caixa registradora para poder lidar com a notificação SaleWakeUp do evento.

Depois de concluir esta etapa, você não precisará executá-la novamente.

Para ativar o pagamento à mesa e definir o texto mostrado no visor do terminal:

  1. Em sua Customer Area, vá para In-person payments > Terminals e selecione selecione seu terminal.

  2. Na página do terminal, selecione a guia Terminal API.

  3. Em Event Notification Buttons defina os seguintes valores:

    Campo Descrição
    Enable notification button Selecione Yes
    Notification category Selecione Sale wake up
    Title Digite o texto a ser exibido no botão que inicia o fluxo do terminal. Por exemplo, Pay@tTable
    Details Digite o texto para solicitar um número de referência.

    O número de referência pode consistir em no máximo 10 dígitos.

    Se você deixar esse campo vazio, o terminal enviará a notificação de evento SaleWakeUp imediatamente quando o botão for selecionado.

  4. Selecione Save.

O terminal agora pode enviar notificações SaleWakeUp de eventos para a caixa registradora. Essas notificações incluem:

  • EventToNotify: SaleWakeUp
  • EventDetails: O número de referência que sua equipe digitou.

Quando a caixa registradora recebe essas notificações de eventos, ela precisa lidar com elas. Verifique se sua caixa registradora é capaz de:

  1. Processar o número de referência recebido no campo EventDetails da notificação do evento.
  2. Recuperar as transações de venda (as contas) associadas ao terminal ou o número de referência e decida o que fazer a seguir. Por exemplo:

    • Se houver apenas uma fatura em aberto, envie o PaymentRequest. Ou envie a PrintRequest, para permitir que o terminal imprima a fatura, seguido da PaymentRequest.
    • Se houver mais faturas em aberto, envie um InputRequest para solicitar mais detalhes à sua equipe.

Etapa 2: colete informações de sua equipe

Ao receber uma notificação SaleWakeUp de evento do terminal, você precisa encontrar a fatura associada ao terminal ou o número de referência incluído na notificação e enviar uma solicitação de pagamento. No entanto, pode haver várias contas em aberto para você escolher. Nesse caso, faça o seguinte:

  1. Faça uma InputRequest (ou uma série de solicitações de entrada) para solicitar que sua equipe insira mais informações no terminal.
    Por exemplo: Primeiro, solicite o número da tabela com uma solicitação de entrada de texto. Em seguida, envie uma solicitação de entrada do menu para mostrar uma lista de contas associadas ao número da tabela e peça à sua equipe para selecionar uma
  2. Processe as respostas às suas solicitações de entrada para que sua caixa registradora possa recuperar a fatura correta para enviar uma solicitação de pagamento.

Etapa 3: efetue um pagamento

Tecnicamente, o pagamento na mesa é um fluxo de pagamentos divididos. Você faz várias solicitações de pagamento subsequentes para a mesma venda até que o valor total tenha sido pago. Se um único cliente pagar a fatura inteira, você a trataria como uma divisão desigual do valor total e precisará de apenas uma solicitação de pagamento dividido para receber o valor total pago.

Nesse fluxo de pagamentos divididos, você:

  • Defina o sinalizador de pagamentos divididos como true em cada solicitação de pagamento.
  • Especifique um ID de transação de venda exclusivo na primeira solicitação de pagamento e repita esse mesmo ID em todos os pagamentos parcelados subsequentes para a mesma venda.
  • Verifique se a sua caixa registradora controla o valor que já foi pago.

Depois de receber uma notificação SaleWakeUp de evento do terminal e coletar informações para determinar para qual fatura o terminal deseja receber uma solicitação de pagamento, faça o seguinte:

  1. Na sua caixa registradora, faça uma solicitação POST para um endpoint da API de terminais, especificando:

    • MessageHeader: Segue a estrutura da MessageHeader padrão, explicada nos fundamentos da API de terminais, que incluem:

      • ProtocolVersion: 3.0
      • MessageClass: Service
      • MessageCategory: Payment.
      • MessageType: Request
      • SaleID: Seu ID exclusivo para a caixa registradora.
      • ServiceID: Seu ID exclusivo para esta tentativa de transação, consistindo em 1 a 10 caracteres alfanuméricos. Esse valor precisa ser exclusivo nas últimas 48 horas.
      • POIID: ID exclusivo do terminal. Isso indica para qual terminal o pagamento será roteado.

    • PaymentRequest.SaleData: O objeto SaleData será repetido na resposta. Este contém:

      • SaleTransactionID.TransactionID: Sua referência exclusiva para a venda (por exemplo, a fatura da tabela 5). Todos os pagamentos divididos pertencentes à mesma venda (a mesma fatura) devem usar essa mesma TransactionID da venda.
      • SaleTransactionID.TimeStamp: Data e hora da solicitação de pagamento, no formato UTC.
      • Outros campos, conforme necessário..
        Por exemplo, você pode usar tenderOption=AskGratuity no SaleToAcquirerData para acionar o terminal e mostrar as opções de gorjeta que você configurou.
        Ou você pode usar o SaleToAcquirerData e TokenRequestedType para o reconhecimento cliente.

    • PaymentRequest.PaymentTransaction: Esta parte do corpo da solicitação indica quanto resta a ser pago e quanto já foi pago:

      • AmountsReq.Currency: A moeda da transação.
      • AmountsReq.RequestedAmount: A quantia que resta a ser paga. Para a primeira parcela, esse é o valor total da venda. Para uma parcela subsequente, esse é o valor da venda menos o PaidAmount.
      • PaidAmount: O valor já pago. Para a primeira parcela, este valor é zero. Para uma parcela subsequente, essa é a soma dos valores pagos em pagamentos parcelados anteriores para a mesma venda.

    • PaymentRequest.PaymentData: Esta parte do corpo da solicitação é onde você define o sinalizador de pagamento dividido:

      • PaymentType: Normal
      • SplitPaymentFlag: true

    Para obter mais informações sobre a estrutura de solicitação da API de terminais, consulte os fundamentos da API de terminais .

    Sample first Pay at table payment request
    Expand view
    Copy link to code block
    Copy code
    Copy code
    {
    "SaleToPOIRequest": {
    "MessageHeader": {
    "ProtocolVersion":"3.0",
    "MessageClass":"Service",
    "MessageCategory":"Payment",
    "MessageType":"Request",
    "SaleID":"POSSystemID12345",
    "ServiceID":"0207111104",
    "POIID":"V400cPlus-301506502"
    },
    "PaymentRequest": {
    "SaleData": {
    "SaleTransactionID": {
    "TransactionID": "9820s",
    "TimeStamp": "2019-11-12T12:58:23.000Z"
    }
    },
    "PaymentTransaction": {
    "AmountsReq": {
    "Currency": "USD",
    "RequestedAmount": 89.65,
    "PaidAmount": 0
    }
    },
    "PaymentData": {
    "PaymentType": "Normal",
    "SplitPaymentFlag": true
    }
    }
    }
    }

    A solicitação de pagamento é roteada para o terminal. Isso mostra as opções para dividir de forma Igual (Equally) ou de forma Desigual (Unequally), conforme descrito em Como funciona.
    Quando o pagamento é processado, você recebe o resultado do pagamento.

    Se apenas um valor parcial tiver sido pago, o terminal mostrará opções para Pagar mais tarde (Pay later) ou Pagar o remanescente (Pay remainder).
    Se Pay remainder for selecionado, o terminal calculará automaticamente a próxima parcela em caso de divisões iguais, ou solicitará o próximo valor em caso de parcelas desiguais.
    Em seguida, você faria a próxima solicitação de pagamento dividido, conforme mostrado no próximo exemplo.

    Request for the next split payment after USD 20 has been paid
    Expand view
    Copy link to code block
    Copy code
    Copy code
    {
    "SaleToPOIRequest": {
    "MessageHeader": {...},
    "PaymentRequest": {
    "SaleData": {
    "SaleTransactionID": {
    "TransactionID": "9820s",
    "TimeStamp": "2019-11-12T13:44:20.000Z"
    }
    },
    "PaymentTransaction": {
    "AmountsReq": {
    "Currency": "USD",
    "RequestedAmount": 69.65,
    "PaidAmount": 20
    }
    },
    "PaymentData": {
    "PaymentType": "Normal",
    "SplitPaymentFlag": true
    }
    }
    }
    }

Etapa 4: receber o resultado do pagamento

Quando um pagamento dividido é processado, você recebe seu resultado.

  • Se o pagamento for bem-sucedido, o corpo da PaymentResponse na resposta da API do terminais conterá:

    • SaleData: Esta parte do PaymentResponse ecoa o objeto SaleData do PaymentRequest. Este inclui a TransactionID da venda (a fatura) à qual esse pagamento dividido pertence.

    • PaymentResult: Esta parte do PaymentResponse mostra o método de pagamento e o valor pago:

      • OnlineFlag: true para um pagamento com cartão ou carteira ou false para um pagamento em dinheiro.
      • PaymentInstrumentData.PaymentInstrumentType: Cash ou Card
      • AmountsResp.AuthorizedAmount: O valor pago com esta transação. Sua caixa registradora deve acompanhar isso e adicioná-la ao PaidAmount do pagamento dividido subsequente para a mesma venda.
      • PaymentType: Normal

    • Response: Esta parte do PaymentResponse mostra se são necessários mais parcelas do pagamento dividido para pagar a fatura:

      • Result: Success indica que o valor total da RequestedAmount foi pago. Partial indica que ainda há um valor para ser pago, portanto, são necessárias mais parcelas do pagamento dividido.
      • AdditionalResponse: Uma sequência base64. Quando decodificado, este é um objeto JSON com dados de transação adicionais. Para um pagamento à vista, este campo não está incluído.
    Response for a partial card payment of USD 20
    Expand view
    Copy link to code block
    Copy code
    Copy code
    {
    "SaleToPOIResponse": {
    "MessageHeader": {...}, // Echoed from request
    "PaymentResponse": {
    "POIData": {...},
    "SaleData": { // Echoed from request
    "SaleTransactionID": { // Echoed from request
    "TimeStamp": "2019-11-12T12:58:23.000Z", // Echoed from request
    "TransactionID": "9820s" // Echoed from request
    }
    },
    "PaymentResult": {
    "OnlineFlag": true,
    "PaymentAcquirerData": {...},
    "PaymentInstrumentData": {
    "CardData": {...}
    },
    "PaymentInstrumentType": "Card"
    },
    "AmountsResp": {
    "AuthorizedAmount": 20,
    "Currency": "USD"
    },
    "PaymentType": "Normal"
    },
    "Response": {
    "Result": "Partial",
    "AdditionalResponse": "tid=01506502&AID=A0000000041010&transactionType=GOODS_SERVICES&backendGiftcardIndicator=false&posadditionalamounts.originalAmountValue=2000&..."
    }
    }
    }
    }
    Sample response for cash payment of the full remaining amount
    Expand view
    Copy link to code block
    Copy code
    Copy code
    {
    "SaleToPOIResponse": {
    "MessageHeader": {...}, // Echoed from request
    "PaymentResponse": {
    "POIData": {...},
    "SaleData": { // Echoed from request
    "SaleTransactionID": { // Echoed from request
    "TimeStamp": "2019-11-12T13:44:20.000Z", // Echoed from request
    "TransactionID": "9820s" // Echoed from request
    }
    },
    "PaymentResult": {
    "OnlineFlag": false,
    "PaymentAcquirerData": {...},
    "PaymentInstrumentData": {
    "PaymentInstrumentType": "Cash"
    },
    "AmountsResp": {
    "AuthorizedAmount": 69.65,
    "Currency": "USD"
    },
    "PaymentType": "Normal"
    },
    "Response": {
    "Result": "Success"
    }
    }
    }
    }
  • Se Pay later for selecionado no terminal ao receber uma solicitação de pagamento divido subsequente, o terminal exibirá Cancelled. Você recebe um resultado de pagamento contendo:

    • PaymentResponse.Response.Result: Failure
    • PaymentResponse.Response.ErrorCondition: PaymentRestriction. Isso indica que o fluxo de pagamento à mesa foi interrompido. Não foi a parcela do pagamento divido anterior que falhou.

  • Se o pagamento falhar, o terminal mostra Declined e você recebe um resultado de pagamento contendo:

    • PaymentResponse.Response.Result: Failure
    • PaymentResponse.Response.ErrorCondition: ndica porque o pagamento falhou. Por exemplo, Refused indica que o emissor do cartão recusou a transação e Cancel indica que a transação foi cancelada no terminal. Consulte nossa documentação sobre motivos de recusa.

Mantendo sua equipe informada

O terminal mostrará as mensagens de progresso usuais enquanto um pagamento é processado. No entanto, quaisquer erros que ocorram em outros momentos do fluxo de pagamento na mesa são recebidos na caixa registradora. Como sua equipe não está perto da caixa registradora, eles não saberão o que aconteceu e o que precisam fazer. Para ajudá-los, você pode criar uma DisplayRequest para enviar uma mensagem da caixa registradora para o terminal

Etapas relacionadas