SVC Unload

You can perform an SVC Unload request using the REST API for Oracle Retail EFTLink as long as a logon request was successfully performed. For details, see the Use Case Logon.

The following use case will also describe interactions which include how to handle the device requests and responses which may occur during the SVC Unload request and response.

To perform an SVC Unload request:

URL: wss://localhost:8443/svc_deduct

Sample request from client:

{
       "POSdata":
       {
             "TransactionNumber":"217",
             "StoreID":"731",
             "LanguageCode":"eng"
       },
       "TotalAmount":
       {
             "Currency":"GBP",
             "text":"5.00"
       },
       "PaymentProviderName":"",
       "RequestType":"",
       "RequestSubType":"Unload",
       "ApplicationSender":"XSTORE",
       "WorkstationID":"1",
}

Note:

It is also possible to perform a cash out by specifying ???RequestSubType???:???CashOut???.
This will then be converted to the following IFSF XML request and sent over the SSL socket channel 0:
<?xml version="1.0" encoding="UTF-8"?>
<CardServiceRequest RequestID="4" WorkstationID="1" ApplicationSender="XSTORE" RequestType="RefundValueFromCard" RequestSubType="Unload">
  <POSdata LanguageCode="en">
    <POSTimeStamp>2020-07-08T15:40:27</POSTimeStamp>
    <StoreID>731</StoreID>
    <TransactionNumber>217</TransactionNumber>
  </POSdata>
  <TotalAmount Currency="GBP">5.00</TotalAmount>
</CardServiceRequest>

If the request is successful, depending on the EFTLink Core a device request could be sent over SSL channel 1 to confirm that the request was successful as follows:

<?xml version="1.0" encoding="UTF-8"?>
<DeviceRequest RequestID="4.1" WorkstationID="1" ApplicationSender="MICROS" RequestType="Output">
  <Output OutDeviceTarget="CashierDisplay">
    <TextLine>Transaction Approved</TextLine>
  </Output>
</DeviceRequest>

This will be converted to JSON and sent back over the web socket channel to the client:

{
       "RequestType":"Output",
       "ApplicationSender":"MICROS",
       "WorkstationID":"1",
       "RequestID":"4.1",
       "Output":
       {
             "OutDeviceTarget":"CashierDisplay",
             "TextLine":"Transaction Approved"
       },
       "Input":
       {
             "Command":
             {
                 "PII":false,
                 "Command":"GetAnyKey"
             },
             "CustomerOptions":[]
        }
}

This particular device request is a message to display. The client must respond with an acknowledgement on the same web socket channel, the following JSON is the response to the device request:

{
       "Output":
       {
               "OutDeviceTarget":"CashierDisplay",
               "OutResult":"Success"
       },
       "RequestType":"Output",
       "ApplicationSender":"MICROS",
       "WorkstationID":"1",
       "RequestID":"4.1",
       "OverallResult":"Success"
}

SSL socket channel 1 on the client will receive the following response:

<?xml version="1.0" encoding="UTF-8"?>
<DeviceResponse RequestID="4.1" WorkstationID="1" OverallResult="Success" ApplicationSender="MICROS" RequestType="Output">
  <Output OutDeviceTarget="CashierDisplay" OutResult="Success"/>
</DeviceResponse>

Note:

This response should be sent as soon as the text to display has been rendered on the client user interface.

If the EFTLink payment Core is configured to provide a merchant copy of the receipt a device request will be sent back on SSL socket channel 1 as follows:

<?xml version="1.0" encoding="UTF-8"?>
<DeviceRequest RequestID="4.2" WorkstationID="1" ApplicationSender="MICROS" RequestType="Output">
  <Output OutDeviceTarget="Printer">
    <TextLine>Demo Res</TextLine>
    <TextLine>ORACLE Demo Store</TextLine>
    <TextLine>888 Test Ave., Columbia,MD</TextLine>
    <TextLine/>
    <TextLine> Merchant Copy</TextLine>
    <TextLine/>
    <TextLine>Merchant ID : Simulator123456</TextLine>
    <TextLine>Terminal ID : 12345678</TextLine>
    <TextLine/>
    <TextLine>Trans. Type : CASHOUT</TextLine>
    <TextLine/>
    <TextLine>Card No.    : XXXXXXXXXXXX0002</TextLine>
    <TextLine>Card Type   : SVC</TextLine>
    <TextLine>Exp. Date   : 9912</TextLine>
    <TextLine/>
    <TextLine>Trans. Time : 08/07/2020 15:40</TextLine>
    <TextLine>Trace No.   : 727195</TextLine>
    <TextLine>RRN         : 310185</TextLine>
    <TextLine>Offline Auth: N</TextLine>
    <TextLine>Auth Code   : 770847</TextLine>
    <TextLine/>
    <TextLine>Balance     : ??0.00</TextLine>
    <TextLine>AMOUNT      : ??-95.00</TextLine>
    <TextLine/>
    <TextLine> Approved</TextLine>
    <TextLine/>
    <TextLine>I agree to the terms of my</TextLine>
    <TextLine>credit agreement.</TextLine>
  </Output>
</DeviceRequest>

This will then be converted to JSON and sent back on the web socket channel as follows:

{
      "RequestType":"Output",
      "ApplicationSender":"MICROS",
      "WorkstationID":"1",
      "RequestID":"4.2",
      "Output":
      {
            "OutDeviceTarget":"Printer",
            "TextLine":
            "Demo Res\n
            ORACLE Demo Store\n
            888 Test Ave., Columbia,MD\n\n 
            
            Merchant Copy\n\n
            
            Merchant ID : Simulator123456\n
            Terminal ID : 12345678\n\n
            
            Trans. Type : CASHOUT\n\n
            
            Card No. : XXXXXXXXXXXX0002\n
            Card Type : SVC\n
            Exp. Date : 9912\n\n
            
            Trans. Time : 08/07/2020 15:40\n
            Trace No. : 727195\n
            RRN : 310185\n
            Offline Auth: N\n
            Auth Code : 770847\n\n
            
            Balance : ??0.00\n
            AMOUNT : ??-95.00\n\n 
            
            Approved\n\n
            
            I agree to the terms of my\n
            credit agreement."
     },
     "Input":
     {
           "Command":
           {
                  "PII":false,
                  "Command":"GetAnyKey"
           },
           "CustomerOptions":[]
      }
}

The client should acknowledge the print request by sending the following JSON object on the same WebSocket channel:

Note:

EFTLink can wait up to 3 minutes to receive the device response before continuing the transaction. If the time out expires EFTLink will continue with the remainder of the transaction workflow.
{
       "Output":
       {
             "OutDeviceTarget":"CashierDisplay",
             "OutResult":"Success"
       },
       "RequestType":"Output",
       "ApplicationSender":"MICROS",
       "WorkstationID":"1",
       "RequestID":"4.2",
       "OverallResult":"Success"
}

SSL socket channel 1 on the client will receive the following response:

{<?xml version="1.0" encoding="UTF-8"?>
<DeviceResponse RequestID="4.2" WorkstationID="1" OverallResult="Success" ApplicationSender="MICROS" RequestType="Output">
  <Output OutDeviceTarget="Printer" OutResult="Success"/>
</DeviceResponse>

Finally the client will receive the following payment response on channel 0 as follows:

Note:

In this instance the EFTLink Core is configured for combined receipts which means the customer copy of the receipt will be embedded in the CardServiceResponse as follows.
<?xml version="1.0" encoding="UTF-8"?>
<CardServiceResponse RequestID="4" WorkstationID="1" OverallResult="Success" ApplicationSender="XSTORE" RequestType="RefundValueFromCard">
  <Terminal STAN="310185" TerminalID="12345678" MerchantID="Simulator123456"/>
  <Tender>
    <TotalAmount Currency="GBP" OriginalAmount="5.00">95.00</TotalAmount>
    <Authorization CardPAN="492949******0002" ExpiryDate="1299" CardType="80" CardCircuit="UNKNOWN CARD" EntryMode="MSR" AcquirerID="UNKNOWN" AcquirerTransactionReference="310185" TimeStamp="2020-07-08T15:40:30" ApprovalCode="770847"/>
  </Tender>
  <CardValue CardType="80" EntryMode="MSR" LoyaltyEligible="true">
    <CardPAN>492949******0002</CardPAN>
    <EndDate>####</EndDate>
    <CardCircuit>UNKNOWN CARD</CardCircuit>
    <Token>C735904########2794</Token>
  </CardValue>
  <Balance>0.00</Balance>
  <PaymentProviderName>oracle.eftlink.opiretail.OPIRetailCore</PaymentProviderName>
  <TextLine>Demo Res</TextLine>
  <TextLine>ORACLE Demo Store</TextLine>
  <TextLine>888 Test Ave., Columbia,MD</TextLine>
  <TextLine/>
  <TextLine> Customer Copy</TextLine>
  <TextLine/>
  <TextLine>Merchant ID : Simulator123456</TextLine>
  <TextLine>Terminal ID : 12345678</TextLine>
  <TextLine/>
  <TextLine>Trans. Type : CASHOUT</TextLine>
  <TextLine/>
  <TextLine>Card No.    : XXXXXXXXXXXX0002</TextLine>
  <TextLine>Card Type   : SVC</TextLine>
  <TextLine>Exp. Date   : 9912</TextLine>
  <TextLine/>
  <TextLine>Trans. Time : 08/07/2020 15:40</TextLine>
  <TextLine>Trace No.   : 727195</TextLine>
  <TextLine>RRN         : 310185</TextLine>
  <TextLine>Offline Auth: N</TextLine>
  <TextLine>Auth Code   : 770847</TextLine>
  <TextLine/>
  <TextLine>Balance     : ??0.00</TextLine>
  <TextLine>AMOUNT      : ??-95.00</TextLine>
  <TextLine/>
  <TextLine> Approved</TextLine>
  <TextLine/>
  <TextLine>I agree to the terms of my</TextLine>
  <TextLine>credit agreement.</TextLine>
</CardServiceResponse>

This will then be converted to JSON and sent to the client on the web socket channel:

Note:

The client will be expected to take the receipt details out of the final response and manage the printing as such.
{
        "Terminal":
        {
                "TerminalID":"12345678",
                "MerchantID":"Simulator123456"
        },
        "Tender":
        {
               "TotalAmount":
               {
                        "Currency":"GBP",
                        "text":"95.00"
               },
               "Authorization":
               {
                        "AcquirerID":"UNKNOWN",
                        "AcquirerTransactionReference":"310185",
                        "TimeStamp":"Wed Jul 08 15:40:30 BST 2020",
                        "ApprovalCode":"770847",
                        "CardType":"80",
                        "EntryMode":"2",
                        "CardPAN":"492949******0002",
                        "ExpiryDate":"1299",
                        "CardCircuit":"UNKNOWN CARD"
              }
          },
          "CardValue":
          {
              "ICC":{},
              "CardPAN":"492949******0002",
              "EndDate":"1299",
              "CardCircuit":"UNKNOWN CARD",
              "Category":"0",
              "Token":"C735904208040682794",
              "CardType":"80",
              "EntryMode":"2"
          },
          "PaymentProviderName":"oracle.eftlink.opiretail.OPIRetailCore",
          "RequestType":"16",
          "ApplicationSender":"XSTORE",
          "WorkstationID":"1",
          "RequestID":"4",
          "OverallResult":"Success",
          "Success":true,
          "Balance":"0.00",
          "TextLine":
          "Demo Res\n
          ORACLE Demo Store\n
          888 Test Ave., Columbia,MD\n\n 
          
          Customer Copy\n\n
          Merchant ID : Simulator123456\n
          Terminal ID : 12345678\n\n
          
          Trans. Type : CASHOUT\n\n
          
          Card No.    : XXXXXXXXXXXX0002\n
          Card Type   : SVC\n
          Exp. Date   : 9912\n\n
          
          Trans. Time : 08/07/2020 15:40\n
          Trace No.   : 727195\n
          RRN         : 310185\n
          Offline Auth: N\n
          Auth Code   : 770847\n\n
          Balance     : ??0.00\n
          AMOUNT      : ??-95.00\n\n 
          
          Approved\n\n
          
          I agree to the terms of my\n
          credit agreement."
}