Customer Not Present Card Payment

You can perform a Customer Not Present Card Payment request using the REST API for Oracle Retail EFTLink as long as a logon request was successfully performed. For more details, see the Use Case Logon.

Note:

The following use case will also describe interactions which include how to handle the device requests and responses which may occur during the Customer Not Present Card Payment request and response. The reason it is known as a Customer Not Present Card Payment is that the associate will be expected to key the card details into the payment device in order to get the approval. Therefore the customer will not be expected to present their payment card in order for the transaction to be successfully processed. Typically the customer is providing the card details over the phone to the associate.

To perform a Customer Not Present Card Payment request:

URL: wss://localhost:8443/payment

Sample request from client:

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

Note:

Additional key required to drive the flow; "CustomerNotPresent":true, this gets added to the IFSF XML as the <CardHolderPresent>false</CardHolderPresent> tag.

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="5" WorkstationID="1" ApplicationSender="XSTORE" RequestType="CardPayment">
  <POSdata LanguageCode="en">
    <POSTimeStamp>2020-07-09T15:19:08</POSTimeStamp>
    <StoreID>731</StoreID>
    <CardHolderPresent>false</CardHolderPresent>
    <TransactionNumber>217</TransactionNumber>
  </POSdata>
  <TotalAmount Currency="GBP">50.00</TotalAmount>
</CardServiceRequest>

Note:

In this use case the Card Not Present payment will be authorized but there will be data in the payment provider's response which may require more interaction with the client in order to finalise the transaction.

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

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

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

{
       "RequestType":"Output",
       "ApplicationSender":"MICROS",
       "WorkstationID":"1",
       "RequestID":"2.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":"2.1",
       "OverallResult":"Success"
}

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

<?xml version="1.0" encoding="UTF-8"?>
<DeviceResponse RequestID="2.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="2.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 : SALE</TextLine>
    <TextLine/>
    <TextLine>Cardh. Name : Mr A BMSTESTCARDA5603</TextLine>
    <TextLine>Card No.    : XXXXXXXXXXXX0002</TextLine>
    <TextLine>Card Type   : VISA</TextLine>
    <TextLine>Exp. Date   : 9912</TextLine>
    <TextLine/>
    <TextLine>Trans. Time : 10/07/2020 09:45</TextLine>
    <TextLine>Trace No.   : 270137</TextLine>
    <TextLine>RRN         : 732164</TextLine>
    <TextLine>Offline Auth: N</TextLine>
    <TextLine>Auth Code   : 154310</TextLine>
    <TextLine/>
    <TextLine>App Label   : Personal Account</TextLine>
    <TextLine>AID         : A000000#####0801</TextLine>
    <TextLine>AC          : 52A80ACE8E0D9CA4</TextLine>
    <TextLine/>
    <TextLine>AMOUNT      : ??50.00</TextLine>
    <TextLine> TOTAL      : ??50.00</TextLine>
    <TextLine/>
    <TextLine>Approved</TextLine>
    <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":"2.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 : SALE\n\n
               
               Cardh. Name : Mr A BMSTESTCARDA5603\n
               Card No.    : XXXXXXXXXXXX0002\n
               Card Type   : VISA\n
               Exp. Date   : 9912\n\n
               
               Trans. Time : 10/07/2020 09:45\n
               Trace No.   : 270137\n
               RRN         : 732164\n
               Offline Auth: N\n
               Auth Code   : 154310\n\n
               
               App Label   : Personal Account\n
               AID         : A000000025010801\n
               AC          : 52A80ACE8E0D9CA4\n\n
               
               AMOUNT      : ??50.00\n 
               TOTAL       : ??50.00\n\n
               
               Approved\n\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":"2.2",
			"OverallResult":"Success"
}

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

<?xml version="1.0" encoding="UTF-8"?>
<DeviceResponse RequestID="2.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="2" WorkstationID="1" OverallResult="Success" ApplicationSender="XSTORE" RequestType="CardPayment">
  <Terminal STAN="732164" TerminalID="12345678" MerchantID="Simulator123456"/>
  <Tender>
    <TotalAmount Currency="GBP">50.00</TotalAmount>
    <Authorization CardPAN="XXXXXX******0002" ExpiryDate="1299" CardType="80" CardCircuit="VISA" EntryMode="Manual" AcquirerID="UNKNOWN" AcquirerTransactionReference="732164" TimeStamp="2020-07-10T09:45:50" ApprovalCode="154310"/>
  </Tender>
  <CardValue CardType="80" EntryMode="Manual" LoyaltyEligible="true">
    <CardPAN>XXXXXX******0002</CardPAN>
    <EndDate>####</EndDate>
    <CardCircuit>VISA</CardCircuit>
    <Token>VaultCardToken123</Token>
    <VaultCardToken>VaultCardToken123</VaultCardToken>
  </CardValue>
  <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 : SALE</TextLine>
  <TextLine/>
  <TextLine>Cardh. Name : Mr A BMSTESTCARDA5603</TextLine>
  <TextLine>Card No.    : XXXXXXXXXXXX0002</TextLine>
  <TextLine>Card Type   : VISA</TextLine>
  <TextLine>Exp. Date   : 9912</TextLine>
  <TextLine/>
  <TextLine>Trans. Time : 10/07/2020 09:45</TextLine>
  <TextLine>Trace No.   : 270137</TextLine>
  <TextLine>RRN         : 732164</TextLine>
  <TextLine>Offline Auth: N</TextLine>
  <TextLine>Auth Code   : 154310</TextLine>
  <TextLine/>
  <TextLine>App Label   : Personal Account</TextLine>
  <TextLine>AID         : A000000#####0801</TextLine>
  <TextLine>AC          : 52A80ACE8E0D9CA4</TextLine>
  <TextLine/>
  <TextLine>AMOUNT      : ??50.00</TextLine>
  <TextLine> TOTAL      : ??50.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:

{
       "Terminal":
       {
                 "TerminalID":"12345678",
                 "MerchantID":"Simulator123456",
                 "STAN":"732164"
       },
       "Tender":
       {
               "TotalAmount":
               {
                    "Currency":"GBP",
                    "text":"50.00"
               },
               "Authorization":
               {
                      "AcquirerID":"UNKNOWN",
                      "AcquirerTransactionReference":"732164",
                      "TimeStamp":"Fri Jul 10 09:45:50 BST 2020",
                      "ApprovalCode":"154310",
                      "CardType":"80",
                      "EntryMode":"1",
                      "CardPAN":"XXXXXX******0002",
                      "ExpiryDate":"1299",
                      "CardCircuit":"VISA"
              }
      },
      "CardValue":
      {
           "ICC":{},
           "CardPAN":"XXXXXX******0002",
           "EndDate":"1299",
           "CardCircuit":"VISA",
           "Category":"0",
           "Token":"VaultCardToken123",
           "CardType":"80",
           "EntryMode":"1"
      },
      "PaymentProviderName":"oracle.eftlink.opiretail.OPIRetailCore",
      "RequestType":"1",
      "ApplicationSender":"XSTORE",
      "WorkstationID":"1",
      "RequestID":"2",
      "OverallResult":"Success",
      "Success":true,
      "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 : SALE\n\n
      
      Cardh. Name : Mr A BMSTESTCARDA5603\n
      Card No.    : XXXXXXXXXXXX0002\n
      Card Type   : VISA\n
      Exp. Date   : 9912\n\n
      
      Trans. Time : 10/07/2020 09:45\n
      Trace No.   : 270137\n
      RRN         : 732164\n
      Offline Auth: N\n
      Auth Code   : 154310\n\n
      
      App Label   : Personal Account\n
      AID         : A000000025010801\n
      AC          : 52A80ACE8E0D9CA4\n\n
      
      AMOUNT      : ??50.00\n 
      TOTAL       : ??50.00\n\n
      
      Approved\n\n
      
      I agree to the terms of my\n
      credit agreement."
}