Aqui, descrevemos como você pode usar um InputRequest
para mostrar um menu com várias opções ou uma pergunta de múltipla escolha e permitir que o usuário selecione uma opção. Você pode usar isso, por exemplo, para criar uma pesquisa de cliente.
Faça uma solicitação de entrada de menu
Para usar o terminal de pagamento para mostrar um menu com várias opções:
-
Faça uma solicitação POST para um endpoiont da API de Terminais, especificando:
-
MessageHeader
: the standardSaleToPOIRequest.MessageHeader
object. This includes:Parameter Required Description MessageClass
Device MessageCategory
Input
-
InputRequest.DisplayOutput
: Esta parte do corpo da solicitação define o que é mostrado no terminal:Parâmetro Requerimentos Descrição Device
CustomerDisplay InfoQualify
Display OutputContent.OutputFormat
Text OutputContent.PredefinedContent.ReferenceID
MenuButtons OutputContent.OutputText
Uma matriz de um campo Text
contendo seu próprio texto para mostrar no terminal. Use para especificar a pergunta ou o nome do menu. -
InputRequest.MenuEntry
: Uma matriz de até 15 itens que representam as opções de escolha. O terminal mostra esses itens como uma lista rolável de caixas que o usuário pode tocar para selecionar. Cada item da matriz tem:Parâmetro Requerimentos Descrição OutputFormat
Text OutputText
Uma matriz de três campos Text
com seu próprio texto que, juntos, formam a resposta ou opção de menu.
O primeiro campoText
será exibido em negrito. Use uma string vazia paraText
não usados.
Por exemplo, você pode escrever uma resposta curta no primeiro campo, a resposta longa no segundo campo e não usar o terceiro campo. Ou você pode usar os três campos para o nome do artigo, descrição e rótulo. -
InputRequest.InputData
: Esta parte do corpo da solicitação lida com a entrada do usuário:Parâmetro Requerimentos Descrição Device
CustomerInput InfoQualify
Input InputCommand
GetMenuEntry MaxInputTime
(Integer) Tempo limite em segundos. Este é o momento em que o usuário conclui sua entrada.
O exemplo a seguir pede ao cliente para responder a uma pergunta da pesquisa..
{ "SaleToPOIRequest":{ "MessageHeader":{ "ProtocolVersion":"3.0", "MessageClass":"Device", "MessageCategory":"Input", "MessageType":"Request", "ServiceID":"0207111104", "SaleID":"POSSystemID12345", "POIID":"V400m-324688179" }, "InputRequest":{ "DisplayOutput":{ "Device":"CustomerDisplay", "InfoQualify":"Display", "OutputContent":{ "OutputFormat":"Text", "PredefinedContent":{ "ReferenceID":"MenuButtons" }, "OutputText":[ { "Text":"How was your visit?" }, { "Text":"Please tap one of the options below:" } ] }, "MenuEntry":[ { "OutputFormat":"Text", "OutputText":[ { "Text":"Excellent" } ] }, { "OutputFormat":"Text", "OutputText":[ { "Text":"Good" } ] }, { "OutputFormat":"Text", "OutputText":[ { "Text":"Not so good" } ] }, { "OutputFormat":"Text", "OutputText":[ { "Text":"Bad" } ] } ] }, "InputData":{ "Device":"CustomerInput", "InfoQualify":"Input", "InputCommand":"GetMenuEntry", "MaxInputTime":120 } } } }
SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest(); MessageHeader messageHeader = new MessageHeader(); saleToPOIRequest.setMessageHeader(messageHeader); InputRequest inputRequest = new InputRequest(); DisplayOutput displayOutput = new DisplayOutput(); displayOutput.setDevice( DeviceType.CUSTOMER_DISPLAY ); displayOutput.setInfoQualify( InfoQualifyType.DISPLAY ); OutputContent outputContent = new OutputContent(); outputContent.setOutputFormat( OutputFormatType.TEXT ); PredefinedContent predefinedContent = new PredefinedContent(); predefinedContent.setReferenceID("MenuButtons"); outputContent.setPredefinedContent(predefinedContent); OutputText headerLine1 = new OutputText(); headerLine1.setText("How was your visit?"); OutputText headerLine2 = new OutputText(); headerLine2.setText("Please tap one of the options below:"); outputContent.getOutputText().add(headerLine1); outputContent.getOutputText().add(headerLine2); displayOutput.setOutputContent(outputContent); MenuEntry menuEntry1 = new MenuEntry(); menuEntry1.setOutputFormat( OutputFormatType.TEXT ); OutputText option1Line1 = new OutputText(); option1Line1.setText("Excellent"); menuEntry1.getOutputText().add(option1Line1); displayOutput.getMenuEntry().add(menuEntry1); MenuEntry menuEntry2 = new MenuEntry(); menuEntry2.setOutputFormat( OutputFormatType.TEXT ); OutputText option2Line1 = new OutputText(); option2Line1.setText("Good"); menuEntry2.getOutputText().add(option2Line1); displayOutput.getMenuEntry().add(menuEntry2); MenuEntry menuEntry3 = new MenuEntry(); menuEntry3.setOutputFormat( OutputFormatType.TEXT ); OutputText option3Line1 = new OutputText(); option3Line1.setText("Not so good"); menuEntry3.getOutputText().add(option3Line1); displayOutput.getMenuEntry().add(menuEntry3); MenuEntry menuEntry4 = new MenuEntry(); menuEntry4.setOutputFormat( OutputFormatType.TEXT ); OutputText option4Line1 = new OutputText(); option4Line1.setText("Bad"); menuEntry4.getOutputText().add(option4Line1); displayOutput.getMenuEntry().add(menuEntry4); inputRequest.setDisplayOutput(displayOutput); InputData inputData = new InputData(); inputData.setDevice( DeviceType.CUSTOMER_INPUT ); inputData.setInfoQualify( InfoQualifyType.INPUT ); inputData.setInputCommand( InputCommandType.GET_MENU_ENTRY ); inputData.setMaxInputTime( BigInteger.valueOf(120) ); inputRequest.setInputData(inputData); saleToPOIRequest.setInputRequest(inputRequest); terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);
Para obter uma lista completa de campos que você pode passar em uma solicitação de entrada de menu, consulte a referência da API Menu InputRequest.
-
-
Aguarde até que o usuário forneça a entrada solicitada.
A entrada fornecida não é validada em um formato.
-
Se a solicitação de entrada expirar, você receberá uma
EventNotification
comEventDetails
: message=Did+not+receive+a+response+from+the+POI. -
Se você fizer uma solicitação de pagamento enquanto a solicitação de entrada está aguardando a entrada no terminal, a solicitação de pagamento substitui a solicitação de entrada. Você recebe uma
InputResponse
indicação de que a solicitação de entrada foi fechada. -
Se o usuário se recusou a responder (selecionou a tecla Cancel
), o
InputResult
temResponse.Result
: Failure eResponse.ErrorCondition
: Cancel. -
Se a entrada for recebida do terminal, o
InputResponse
tem umInputResult
com:Input.MenuEntryNumber
: que indica a opção que o usuário selecionou. Por exemplo, se a terceira opção foi selecionada, o terceiro item da matriz é1
e todos os outros itens da matriz são0
.
{ "SaleToPOIResponse": { "InputResponse": { "InputResult": { "Device": "CustomerInput", "InfoQualify": "Input", "Response": { "Result": "Success" }, "Input": { "MenuEntryNumber": [ 0, 0, 1, 0, 0 ], "InputCommand": "GetMenuEntry" } }, "OutputResult": { "Device": "CustomerDisplay", "InfoQualify": "Display", "Response": { "Result": "Success" } } }, "MessageHeader": { "ProtocolVersion": "3.0", "SaleID": "POSSystemID12345", "MessageClass": "Device", "MessageCategory": "Input", "ServiceID": "0207111104", "POIID": "V400m-324688179", "MessageType": "Response" } } }
Para uma lista completa de campos que você pode receber em uma resposta de entrada de pesquisa, consulte a referência da API Menu InputResponse.
-
-
Passe os dados relevantes do
InputResult
para o seu sistema para validação e uso posterior.