No momento, esta página não está disponível em português
Point-of-sale icon

Split the screen to show two requests

Split the screen on the payment terminal to show data while collecting input.

You can vertically split a landscape display of a payment terminal, such as the M400. This allows you to show data on one side of the screen and collect input from a shopper on the other side of the screen. like taking a survey. For example, show a shopper receipt on one side, and take a survey on the other side.

You can send two display requests at the same time. But you can only send one input request next to a display request.

This feature will be available from software version 1.90.

How it works

  1. You specify in an XML file what data you want to show. You convert that XML file to Base64.
    You will pass the Base64-encoded string inside the DisplayOutput.OutputContent.OutputXHTML of the DisplayRequest.
  2. You specify in an XML file what data you want to collect. You convert that XML file to Base64.
    You will pass the Base64-encoded string inside the DisplayOutput.OutputContent.OutputXHTML of the InputRequest.
  3. You send both requests simultaneously. If you don't send both requests at the same time, the terminal screen shows the first request on one side. The other side shows a black background until you send the second request.
  4. If input is collected, you receive the data inside InputResult.Input of the InputResponse.
  5. You then pass the relevant data from InputResult.Input to your system for validation and further use.

Show data

We currently support showing an image or a virtual receipt without a QR code.

  1. In the XML example below, specify:

    • <screen name>: the screen split ratio. Can be split_50x50, split_40x60, and split_60x40.
    • <screen side>: the side of the split screen on which to show the request. Can be left or right.
    • <ReferenceID>: the type of request: Image.
    • <Text>: the image file converted to a Base64-encoded string.
  2. Encode the XML object to Base64. You will pass the resulting string in OutputContent.OutputXHTML.

  3. Make a POST request to a Terminal API endpoint, specifying:

    • MessageHeader: the standard SaleToPOIRequest.MessageHeader object. Specify:

      Parameter Required Description
      ProtocolVersion -white_check_mark- 3.0
      MessageClass -white_check_mark- Device
      MessageCategory -white_check_mark- Display
      MessageType -white_check_mark- Request
      ServiceID -white_check_mark- Your unique ID for this request, consisting of 1-10 alphanumeric characters. Must be unique within the last 48 hours for the terminal (POIID) being used.
      SaleID -white_check_mark- Your unique ID for the POS system component to send this request from.
      POIID -white_check_mark- The unique ID of the terminal to send this request to. Format: [device model]-[serial number].
    • DisplayRequest.DisplayOutput : an array with one array item containing:

      Parameter Description
      Device CustomerDisplay
      InfoQualify Display
      OutputContent.OutputFormat XHTML
      OutputContent.OutputXHTML The Base64-encoded string from Step 2.
  4. Check the result.

    • If the request is successful, the payment terminal shows the data on the specified side of the screen and you receive a display response with OutputResult.Response.Result: Success.
      The other side of the screen shows a black background until you send the other request.
    • If an error occurs while decoding the image, the image won't be shown and you receive a display response with OutputResult.Response.Result: Failure. See XML validation for information about how errors in the XML content are reported.

After the input is collected on the other part of the screen, the shown data resizes to the full width of the screen and continues to show.
To stop it from showing, you need to send a payment request, or a request to show the standby screen.

Collect input

We currently support presenting shoppers with a form to collect their phone number or a multiple choice form that allows a single answer.

When using split screen input requests, the users cannot select the Confirm or Cancel keys on the terminal keypad. Instead, you need to implement logic to confirm or decline the request using the buttons on the input screen.
The numerical keypad and the Clear key can still be used.

  1. In the XML example below, specify:

    • <screen name>: the screen split ratio. Can be split_50x50, split_40x60, and split_60x40.
    • <screen side>: the side of the split screen on which to show the request. Can be left or right.
    • <ReferenceID>: the type of request: GetPhoneNumber.
    • <Text>: shows the specified text on screen, for example Enter your phone number:.
  2. Encode the XML object to Base64. You will pass the resulting string in OutputContent.OutputXHTML.

  3. Make a POST request to a Terminal API endpoint, specifying:

    • MessageHeader: the standard SaleToPOIRequest.MessageHeader object. Specify:

      Parameter Required Description
      ProtocolVersion -white_check_mark- 3.0
      MessageClass -white_check_mark- Device
      MessageCategory -white_check_mark- Display
      MessageType -white_check_mark- Request
      ServiceID -white_check_mark- Your unique ID for this request, consisting of 1-10 alphanumeric characters. Must be unique within the last 48 hours for the terminal (POIID) being used.
      SaleID -white_check_mark- Your unique ID for the POS system component to send this request from.
      POIID -white_check_mark- The unique ID of the terminal to send this request to. Format: [device model]-[serial number].
    • InputRequest.DisplayOutput : an array with one array item containing:

      Parameter Description
      Device CustomerDisplay
      InfoQualify Display
      OutputContent.OutputFormat XHTML
      OutputContent.OutputXHTML The Base64-encoded string from Step 2.
    • InputRequest.InputData: this part of the request body handles the user input.

      Parameter Description
      Device CustomerInput
      InfoQualify Input
      InputCommand DigitString
      MaxInputTime (Integer) Time-out in seconds. This is the time that the user gets to finish their input.
      InputData.DefaultInputString Placeholder text for the input box, to let the user know what input format you are expecting.

    The payment terminal shows the input request on the specified side of the screen. The other side of the screen shows a black background, until you send the other request.

  4. Wait for the user to supply the requested input.

    The provided input is not validated against a format.

    If the input is received from the terminal, the InputResult.Input contains the entered numerals (phone number) inside DigitInput.

    • If the input request times out, the InputResult.Response has AdditionalResponse: message=Screen%20timeout, Result: Failure, and ErrorCondition: Cancel.

    • If you make a payment request while the input request is waiting for input on the terminal, the payment request overrides the input request. The InputResult.Response has AdditionalResponse: message=A%20higher%20priority%20request%20has%20been%20received, Result: Failure, and ErrorCondition: Busy.

    • If the user declines to respond (by selecting the Skip button), the InputResult.Input.DigitInput field is empty. The InputResult.Response has Result: Failure and ErrorCondition: Cancel.

  5. Pass the phone number from the DigitInput field to your system for validation and further use.

See XML validation for information about how errors in the XML content are reported.

XML validation

When we receive your display and input requests, we check if we can parse the XML content. We can also check whether the XML content matches the XML Schema Definition (XSD). We only do this XSD check if it is enabled for your account.

  • Parsing
    We always check whether we can parse the XML content of your request.

    For example, if the XML contains a syntax error like a missing caret >, we can't parse the XML. We'll send a failure response with XHTML data could not be parsed.

  • XSD
    If we can parse the XML content and XSD checking is enabled, we validate the XML against the XSD.

    To use this validation, ask our Support Team to enable the virtual receipt XSD check.

    For example, if you add an element that is not in the XSD or if you omit a required element, the XML doesn't match the XSD. We'll send a failure response with XSD validation failed.

    The details of any XSD errors are in the terminal log.

See also