Pesquisar

Are you looking for test card numbers?

Would you like to contact support?

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 Point of Sale > 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
    {
      "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.

    Sample request for the next split payment after 20 USD has been paid
    {
      "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.
    Sample response for a partial card payment of 20 USD
    {
      "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
    {
      "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