You are on page 1of 32

PixelPoint®

External Order Interface


API Development Guide

Revision 14 – 06/22/2020
Publication Details
Copyright
Copyright © ParTech, Inc. 2019. All Rights Reserved. This product and related documentation are protected by
copyright and are distributed under licenses restricting their use, copying, distribution, and de-compilation. No part
of this product or related documentation may be reproduced in any form by any means without prior written
authorization of PAR and any requisite licensors.

Trademarks
PixelPoint, ParTech, and their respective logos are all trademarks of PAR Technology Corporation.

PAR may have patents, patent applications, trademarks, copyrights, or other intellectual property rights covering
subject matter in this document.

Except as expressly provided in any written license agreement from PAR, the furnishing of this document does not
give you any license to these patents, trademarks, copyrights, or other intellectual property.

Microsoft® and Window s® are registered trademarks of Microsoft Corporation in the United States and/ or other
countries. Other product names may be trademarks or registered trademarks of their respective companies and are
hereby acknowledged.

Disclaimer
PAR has thoroughly reviewed this document and believes it to be reliable. However, this document is provided for
informational purposes only and PAR makes no warranties, either expressed or implied, in this document.
Information in this document is subject to change without notice. Risk of use and responsibility for the results of use
of this document lie with the user.

Patents
The following patents apply to some areas of functionality within the PixelPoint software suite: Pat.
6,384,850; 6,871,325; 6,982,733; 8,146,077; 8,287,340

Revision History
11/05/2012 - Revision 0 06/06/2018 – Revision 10
Initial Release Added EOIEvents Node
05/14/2013 - Revision 1 05/22/2019 – Revision 11
New functionality described New Listing Calls, Additional EOI Events
08/20/2013 - Revision 2 08/27/2019 -Revision 12
New nodes added Added SOD and EOD events
08/23/2013 - Revision 3 05/15/20203 - Revision 13
Includes minor changes Add Payment list request
01/23/2014 - Revision 4 06/22/2020 – Revision 14
New node added. Additional overview and node Added resending an order with RequestID
clarification.
02/20/2014 - Revision 5
New node added. Other miscellaneous document
revisions also made.
06/26/2015 - Revision 6
Version and screenshot updates made.
08/17/2016 – Revision 7
Minor changes & corrections
09/23/2016 – Revision 8
Added functionality to Member node
05/29/2017 – Revision 9
Corrected SaveMemberInfoToDB variable

Revision 14 – 06/22/2020
Contents
Overview ............................................................................................................................................................................ 4
Important Considerations.................................................................................................................................................. 5
General Requirements................................................................................................................................................... 5
PixelPoint Requirements ............................................................................................................................................... 5
External Order Interface API.............................................................................................................................................. 6
Data Types ..................................................................................................................................................................... 7
Inside <Request> Node ...................................................................................................................................................... 8
PixelHQ Web API................................................................................................................................................................ 9
EOI Order Resubmission .................................................................................................................................................. 10
Special Get List Requests ................................................................................................................................................. 11
Products: ...................................................................................................................................................................... 11
Report Categories: ....................................................................................................................................................... 12
Configuration Categories: ............................................................................................................................................ 12
Sales Type: ................................................................................................................................................................... 13
Coupon List: ................................................................................................................................................................. 13
Payment Methods: ...................................................................................................................................................... 14
Inside <Transaction> Node .............................................................................................................................................. 15
Inside <Item> Node ......................................................................................................................................................... 16
Inside <Payment> Node................................................................................................................................................... 20
Inside <Member> Node ................................................................................................................................................... 21
Inside <EOIEvents> Node................................................................................................................................................. 22
Inside <Response> Node ................................................................................................................................................. 23
Transaction Sub Nodes .................................................................................................................................................... 24
Payment Sub Nodes......................................................................................................................................................... 24
Item Sub Nodes ............................................................................................................................................................... 25
Testing Your External Order Interface ............................................................................................................................. 26
Ordering Example: ................................................................................................................................................... 31

3 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Overview
Note: Before proceeding, you should already have a PixelPoint POS test database with
products and an external ordering source that is ready to sell these products. A
PixelPoint NFR license key is also required.

In the chapters that follow, you will learn how to use the PixelPoint API to allow third party applications to apply
payments to POS transactions. You will learn about the External Order Interface (EOI) nodes that are available and how
to configure a system to use EOI. You will also learn how PixelPoint POS responds to XML requests, and how to test the
interface to ensure that it works.

Along with EverServ PixelPoint (store/server-based software) running on the EOI COM Server Station, there also
resides vendor-developed middleware. This is consistent in all EOI environments such as those where orders are
placed over a web service and sent to a remote store over the Internet, as well as those where third party EOI
applications communicate with the POS locally in-store.

The following illustration demonstrates an EOI setup where communication is taking place over the Internet.

This illustration demonstrates an EOI setup where communication is all done locally over a store's LAN.

Each location will need to purchase an additional Interface PixelPoint license and have this component added to the
location's license key.

*Note: A Web API is available through the PixelHQ subscription service

4 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Important Considerations
General Requirements
At this point, you should already have a PixelPoint POS test database with products, an external ordering source that is
ready to sell these products, and a PixelPoint NFR license key.

PixelPoint Requirements
PixelPoint must be configured correctly by integrators with PixelPoint POS configuration experience in order to use
EOI. Refer to the POS Integrator Configuration Guide for additional information not supplied in this document.

The POS station to service the COM request must be started with "ACTIVESERVER=Y" and "INTERNETSERVER=Y" in the
Pixel32.ini settings as follows:

[STATION 12] ACTIVESERVER=Y INTERNETSERVER=Y

Other Information
1. The API is intended for PAR Ecosystem Integration Partners to develop an interface between PixelPoint POS and
the integration partner's external ordering system.
2. As mentioned above, the customer site will require an individual Interface license to run STATION [X] with the
API created.
3. It is the Ecosystem Integration Partner's sole responsibility to ensure that any client application and configuration
within the POS network meets PCI DSS 2.0 requirements.
4. Credit card data is not processed by the POS. Payments must be received by the external ordering source or
paid on pick-up at the location. Totals are then passed on to the POS via the EOI.

5 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
External Order Interface API
IPixPosTrans
IPixPosTrans is a Windows COM interface that can be used with most single and multithreading Windows application
development environments and languages. It does not have any initialization or finalization routines.

Interface: IPixPosTrans
Flags: (4416) Dual OleAutomation Dispatchable
GUID: {A1AED31D-876C-4AA3-AF60-3560062660DF}

IPixPosTrans = interface(IDispatch)
['{A1AED31D-876C-4AA3-AF60-3560062660DF}']
function ProcessRequest(const Request: WideString): WideString; safecall; end;

Note: The ProcessRequest function has a "dispid = 201".

Also note: Multi-threaded and multi-process calls are possible, but they will be internally
serialized.

Request Types
Requests are made by sending an XML string with enclosed data to the POS. XML node names are not case sensitive,
so "<Item>", "<item>", and "<ITEM>" would all work.

If developing in Visual Studio, please note:

PixelPointPOS.exe support is COM interoperable (ActiveX interface).

1. Open your project on the IDE of .NET


2. In the Solution Explorer right click on References and Add Reference
3. Then Browse to C:\PixelPOS, locate PixelPointPOS.exe and OK
The namespace PixelPointPOS should now be available.

6 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Data Types
• String type: Any sequence of characters.
• Integer type: Integer number in the range of -2147483648 to 2147483647 (unless otherwise specified).
• Boolean type: Integer number in the range of 0 to 1, where 0 means False and 1 means True.
• Floating Point type: Consists of at least one digit (0-9), followed by an optional decimal separator. If decimal
separators are present, they must be followed by at least one digit. The decimal separator is always a dot -
ASCII character number 46.
• DateTime type: String in the format yyyy-mm-ddThh:nn:ss.zzz where characters '-', 'T', ':', '.' are literal and
yyyy = 0000 to 9999; mm = 01 to 12; dd = 01 to 28,29,30 or 31; hh = 00 to 23; nn = 00 to 59; ss = 00 to 59; zzz
= 000 to 999. The yyyy-mm-dd components are required; all others are optional. For example, yyyy-mm-
ddThh and yyyy-mm- ddThh:nn:ss are ok.

Request XML Sample

<Request>
<RequestType>…</RequestType>
<DebugMode>…</DebugMode>
<Transaction>

<Items>
<Item>…</Item>
<Item>…</Item>

</Items>
<Payments>
<PaymentAuthorizationTimeout>timeout in seconds</PaymentAuthorizationTimeout>
<Payment>…</Payment>
<Payment>…</Payment>

</Payments>
</Transaction>
<Member>

<ShipToAddress>

</ShipToAddress>
</Member>
</Request>

7 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Inside <Request> Node
<RequestType> - (Required, Integer 1-15)
The value of RequestType is obtained by ORing (i.e. performing bitwise OR operation) and the following constants:
1 Calculate item prices – all item prices will be recalculated according to POS configuration.
2 Calculate transaction totals (currently always required) – transaction amounts and taxes will be calculated.
4 Auto assign payment amounts matching it to transaction's amount due – this option requires that exactly
one payment is passed in transaction request. The payment's tender amount will be set to the transaction
amount due (as calculated by the POS). The payment's tip will be set to zero.
8 Apply transaction – commit transaction to the DB, process any payments, and close if fully paid.

<RequestType>33554432<\RequestType>
This special status request is sent as follows:

<Request>
<RequestType>33554432</RequestType>
</Request>

The returned response looks like this:

<Response>
<ErrorNum>0</ErrorNum>
<Status>
<OkToOrder>1</OkToOrder> Valid EOI Employee and Valid Business Day
<OpenDateValid>1</OpenDateValid> Valid Business Day
<WebEmployeeValid>1</WebEmployeeValid> Valid Web Employee ID
</Status>
</Response>

<DebugMode> - (Boolean)
If 1, a detailed log of every exception is going to be stored in the POS debug directory. This should not normally be
used in release code.

<Transaction>
Node is required.

<Member>
Node is optional if you wish to attach member info to the transaction.

8 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
PixelHQ Web API
Requires POS version of 19.5.x or higher
PixelHQ is a subscription service from PixelPoint which contains web reporting as well as offers a Web API delivery
method for EOI orders.
The XML for the orders is exactly the same as if a standalone agent is being used except now there will be a vendor
plus store token assigned.
The Web API does allow for different status calls than the standalone agent

<RequestType>33554432<\RequestType> detailed above will still exist but this is very taxiing on the HQ system. The
PixelHQ agent is already doing a self ‘health check’ every minute to see if the store is online and available

When using PixelHQ the Vendor can make use of <RequestType>QUICKSTATUS</RequestType> to see if the store is
available and ready to accept orders. This data is available every minute.

<Request>
<RequestType>QUICKSTATUS</RequestType>
<EOITransfer>
<EOIAuthenticationToken>prefixToken–readToken</EOIAuthenticationToken>
</EOITransfer>
</Request>
With the Response:
<Response>
<ErrorNum>0</ErrorNum>
<Status>
<OkToOrder>1</OkToOrder>
<OpenDateValid>1</OpenDateValid>
<WebEmployeeValid>1</WebEmployeeValid>
<PosOnline>1</PosOnline>
<EoiOnline>1</EoiOnline>
<StoreLocalDateTime>2019-05-29 14:57:44</StoreLocalDateTime>
<LastAliveFromStoreUTC>2019-05-29 14:57:49.0</LastAliveFromStoreUTC>
</Status>
</Response>

The above response is a positive response and the store is ready to accept orders

9 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
EOI Order Resubmission
EOI Orders may now be resubmitted using the XML node: <RequestUID>

In the case that an EOI failed to send, timed out, or just did not go through for any reason, resubmitting the same EOI
order while using the same RequestUID will ensure that the order be requested without the POS processing it over
and over again.
This process is only available for up to 3 days. Within the 3 days, the same order with the same RequestUID can be
repeated as many times as required until the order is successful.
The RequestUID node has the format of: ANSI--40 characters long
The minimum recommended length of the RequestUID is 8 character and only uppercase characters.

XML Order with RequestUID Node Example:


<?xml version="1.0"?>
<Request>
<RequestType>10</RequestType>
<RequestUID>4R5G66BJ82D6V4</RequestUID> <----- Place RequestUID after the RequestType
<EOITransfer>
<EOIAuthenticationToken>VendorToken-StoreToken</EOIAuthenticationToken>
</EOITransfer>
<Transaction>
<Items>

10 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Special Get List Requests (Available only if the PixelPoint POS version is v19.12.x or higher)
Special request types have been created to query the database and return a list of information
Get list information that is available are:
Product Numbers, Product Description, Price A, ProdType (0=Product; 1=Option)
Report Category Numbers, Description
Configuration Category Numbers, Configuration Category Description
Coupon Numbers, Coupon Description
Sales Types Numbers, Sales Type Description
Method of Payment Numbers

Products:
Request
<Request>
<RequestType>1024</RequestType>
<Request>
Response
<Response>
<ErrorNum>0</ErrorNum>
<Products>
<Product>
<Desc>Coke</Desc>
<Id>2008</Id>
<ProdType>0</ProdType>
</Product>
<Product>
<Desc>Pepsi</Desc>
<Id>2009</Id>
<ProdType>0</ProdType>
</Product>
<Product>
<Desc>Pumpkin Pie large</Desc>
<Id>2010</Id>
<ProdType>0</ProdType>
</Product>
<Product>
<Desc>Pumpkin Pie small</Desc>
<Id>2011</Id>
<ProdType>0</ProdType>
</Product>
</Products>
</Response>

11 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Report Categories:
Request
<Request>
<RequestType>256</RequestType>
<Request>
Response
<Response>
<ErrorNum>0</ErrorNum>
<ReportCats>
<ReportCat>
<Id>2002</Id>
<Desc>Wines</Desc>
</ReportCat>
<ReportCat>
<Id>11</Id>
<Desc>Appetizers</Desc>
</ReportCat>
</ReportCats>
</Response>

Configuration Categories:
Request
<Request>
<RequestType>512</RequestType>
<Request>
Response
<Response>
<ErrorNum>0</ErrorNum>
<ConfigCats>
<ConfigCat>
<Id>2001</Id>
<Desc>Large Pizza</Desc>
</ConfigCat>
<ConfigCat>
<Id>2002</Id>
<Desc>Med Pizza</Desc>
</ConfigCat>
</ConfigCats>
</Response>

12 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Sales Type:
Request
<Request>
<RequestType>2048</RequestType>
<Request>
Response
<Response>
<ErrorNum>0</ErrorNum>
<SalesTypes>
<SalesType>
<Id>1008</Id>
<Desc>Drive-Thru</Desc>
</SalesType>
<SalesType>
<Id>1007</Id>
<Desc>Catering</Desc>
</SalesType>
<SalesType>
<Id>1006</Id>
<Desc>Pick-Up</Desc>
</SalesType>
<SalesType>
<Id>1005</Id>
<Desc>Delivery</Desc>
</SalesType>
<SalesType>
<Id>1003</Id>
<Desc>Dine-IN</Desc>
</SalesType>
</SalesTypes>
</Response>

Coupon List:
Request
<Request>
<RequestType>4096</RequestType>
<Request>
Response
<Response>
<ErrorNum>0</ErrorNum>
<Coupons>
<Coupon>
<CouponKind>0</CouponKind>
<Desc>10% off</Desc>
<Id>2001</Id>
<PLink/>
</Coupon>
<Coupon>
<CouponKind>1</CouponKind>
<Desc>Free Drink with Cake</Desc>
<Id>2002</Id>
<PLink>CORP:20101018034</PLink>
</Coupon>
</Coupons>
</Response>

13 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Payment Methods:
Request
<Request>
<RequestType>Req_ListPayMeth</RequestType>
<Request>
Response
<Response>
<ErrorNum>0</ErrorNum>
<PayMethods>
<PayMethod>
<Currency>1</Currency>
<Desc>CASH</Desc>
<Exchange>1</Exchange>
<Id>1001</Id>
</PayMethod>
<PayMethod>
<Currency>0</Currency>
<Desc>Credit Card</Desc>
<Exchange>1</Exchange>
<Id>1002</Id>
</PayMethod>
<PayMethod>
<Currency>0</Currency>
<Desc>On Account</Desc>
<Exchange>1</Exchange>
<Id>1009</Id>
</PayMethod>
<PayMethod>
<Currency>0</Currency>
<Desc>Online Payment</Desc>
<Exchange>1</Exchange>
<Id>2146435076</Id>
</PayMethod>
</PayMethods>

14 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Inside <Transaction> Node
<NumCustomers> - (Integer)
Number of customers assigned to transaction. POS will assign 1 if this node does not exist or is <= 0.

<SaleTypeNum> - (Integer)
Sale type index from SalesType DB table. If it does not exist, the POS assigns a default one based on station config.

<ScheduleDate> - (Datetime)
Supply schedule date if this is a future order. Skip otherwise.

<ReferenceId>* Functionality effective as of PixelPoint v12.0


The transaction will be marked with this third party reference ID for use later. For example, the reference ID could be
an order ID.

<TimeStart> - (Datetime)
Supply your own transaction start time. If it is missing, the POS will assign the time of the request.

<Items>
Must always be present and contain at least one <Item>.

<Payments>
Must be present and contain exactly one payment if (RequestType & 4) != 0. It should be skipped if the transaction
will be paid for when picked up.

<CustomRecHeader> - (String)
Contains information appended to the Header of the receipt. Encrypted in base 64.

<CustomRecFooter> - (String)
Contains information inserted above the Footer of the receipt. This is a good place to include the customer's name,
address, and other identifying information when the PixelPoint internal members system - memcode, is not being
used. Encrypted in base 64.

<PrintReceiptAlways> - (Optional, Integer 0 or 1)


Indicates whether or not the POS is to force-print receipt. Only applies to future orders that have a ScheduleDate
node.
• 0=will not print until order processing time has occurred.
• 1=will always print.

15 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Inside <Item> Node
<ProdNum> - (Integer)
POS product number from Product DB table.

<CouponNum> - (Integer)
POS coupon number (PromoNum) from Promo DB table.

Note: Either <ProdNum> or <CouponNum> must be present, but not both.

<ItemId> - (Required, Integer)


Unique ID within transaction to establish parent-child links.

<ParentId> - (Required, Integer)


Must either be equal to own <ItemId> or be equal to <ItemId> of already existing <Item> above it. If coupon applies
to specific product or to selected product, ParentId must be pointing to the very item the coupon applies to.

<AnswerId> - (Integer)
Present if item is an answer and holds UniqueID from ForcedChoices DB table. This applies to products with 'number
of choices' set to 1 in BackOffice Forced Questions Setup.

16 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
An example of the placement of this node follows:
<?xml version="1.0"?>
<Request>
<RequestType>11</RequestType>
<DebugMode>1</DebugMode>
<Transaction>
<items>
<item>
<prodNum>4668</prodNum>
<itemId>1</itemId>
<parentId>1</parentId>
<quantity>1</quantity>
<description>Bread pudding</description>
</item>
<item>
<prodNum>4664</prodNum>
----> <AnswerID>3118</AnswerID> <----
<AnswerPrice>1</AnswerPrice>
<PriceApplied>0</PriceApplied>
<itemId>2</itemId>
<parentId>1</parentId>
<quantity>1</quantity>
<description>raisin</description>
</item>
</items>
</Transaction>
<member>
<firstName>Test</firstName>
<lastName>Test</lastName>
<email>Test@Test.com</email>
<homeTele>4044424652</homeTele>
</member>
</Request>

<AnswerPrice> - (Boolean)
Present if item is an answer and (RequestType & 1) = 0. True if price charged was chosen as configured in Forced
Questions setup page, False if price charged was chosen as configured in Product Setup page.

<ForcedAnswer> - (Boolean)
Present if item is an answer and (RequestType & 1) = 0. True if item was ordered as part of the minimum number of
answers group. This applies to products where the 'number of choices' that may be selected in the POS is more than
one.

An example of the placement of this node follows:

17 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
<?xml version="1.0"?>
<Request>
<RequestType>11</RequestType>
<DebugMode>1</DebugMode>
<Transaction>
<items>
<item>
<prodNum>2094</prodNum>
<itemId>1</itemId>
<parentId>1</parentId>
<quantity>1</quantity>
<description>Bagel CC</description>
</item>
<item>
<prodNum>2102</prodNum>
----> <ForcedAnswer>0</ForcedAnswer>
<AnswerID>3118</AnswerID>
<AnswerPrice>1</AnswerPrice>
<PriceApplied>0</PriceApplied>
<itemId>2</itemId>
<parentId>1</parentId>
<quantity>1</quantity>
<description>Bagel,egg</description>
</item>
</items>
</Transaction>
<member>
<firstName>Test</firstName>
<lastName>Test</lastName>
<email>Test@Test.com</email>
<homeTele>4044424652</homeTele>
</member>
</Request>

<PriceApplied> - (Integer 1-13)


Present if (RequestType & 1) = 0 and Item is not a coupon. Indicates which price was charged. 1 through 10 is
equivalent to PriceA through PriceJ. 11 is for Modify Price, 12 is for Fixed Price (answers only), and 13 is for Manual
Price.

<ComboItemId> - (Integer)
Present if item was ordered as part of the combo. It holds ProductComboId from ProductCombo DB table.

<Quantity> - (Required, Floating point) Quantity of an item, Must be > 0.

<SeatNumber> - (Optional, Integer) Seat number if seating is used.

<CourseType> - (Optional, Integer 1-10) Present if course type is different from default.

<Description> - (String)
If <ProdNum> or <PromoNum> is configured for a manual description, this node is required. Otherwise it will be
ignored.
<TicketNum> - (Integer)
If <ProdNum> denotes product of type 'ticket number', this node is required. Otherwise, it will be ignored.

18 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
<CostEach> - (Floating point)
This node is required if (RequestType & 1) = 0, if <ProdNum> denotes a manually-priced product, or if
<CouponNum> denotes a manually-priced coupon. Otherwise, it will be ignored.

<TimeOrdered> - (Optional, Datetime)


Time the item was ordered. If missing, the POS will assign the time of the request.

19 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Inside <Payment> Node
<MethodNumber> - (Required, Integer)
Payment method number (for payment methods that use "external authorization" - ie credit cards). It holds
MethodNum from MethodPay DB table.

<AuthType> - (Required, Integer)


Authorization type. Currently only Sale(114) is allowed.

<Tender> - (Required, Floating point) Payment amount.

<Tip> - (Optional, Floating point)


Amount of the tip. This node is ignored if payment method is configured as currency.

20 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Inside <Member> Node
<MemCode> - (Integer)
If this subnode exists, the POS ignores anything else inside <Member> (except
<ShipToAddress>), and assumes that it contains a valid member number from Member table in the database. It then
returns that number to the API. The API must not create its own MemCode for new members. If it does, this code
that does not exist in the database will cause an error. If <MemCode> does not exist, the POS will create a new
member record. The data in this record will be populated from subnodes with names and types matching those of
Member database table columns. Any data is optional, but presumably something like
<FirstName>, <LastName>, <Adress1>* would always be present.
*This label matches the field name in the table.

<SaveMemberInfoToDB>* Functionality effective as of PixelPoint v 12.0


The POS will also update the member record with values from the EOI member nodes if the value of this node is 1
and memcode is valid.

<ShipToAddress> - (Optional, Integer)


This is an optional node inside <Member>. If it exists, it will contain extra ship-to address information.

Inside <ShipToAddress> Node

<MemAddrId> - (Integer)
If it exists, the POS ignores anything else inside <ShipToAddress> and assumes that it contains a valid member
address ID from the MemAddr DB table. An error will occur if a valid record cannot be found. If <MemAddrId> does
not exist, it will work akin to <Member> - the subnode names and types must match the columns in the MemAddr
DB table.

If the <ShipToAddress> changes for the member placing an order, a <MemAddrID> of 0 must be sent. <MemAddrID>
will be returned with the XML response for use in future orders by this member.

21 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Inside <EOIEvents> Node
The complete availability for these events requires a POS version of 19.6.x or higher
The POS receives orders via the external order interface and stores the events in the table EOIEvents. This then
triggers the event OrderReceived after the order is saved to the database. The order is then available within the
Deliver module. When the driver takes orders in and out, the corresponding events are triggered.

This event makes a RESTful call to the URL specified in the URL node. If the service is not available or an exception is
raised, it will be logged as part of the POS integrated logging system. When an event is executed, the record in the
table EOIEvents is flagged (Status=1), so that it won’t be called again regardless of if the URL was reached or not.

<Type>
Designates the status of the order.
1 = Order Received
2 = Driver In
3 = Driver Out
4= Cooking *
5= Ready *
6= Pick-up
7= Cancelled by Driver
8= Void Entire Check (refund)
99= Start of Day
100= End of Day
Events designated with * will only be available if the site is using QSR Automations kitchen video system and the QSR
‘Speed of Service’ module is purchased for that location.

XML for TPixPosTrans extended to support events (highlighted in green).


<Request>
<RequestType>11</RequestType>
<DebugMode>1</DebugMode>
<Transaction>
<Items>
<Item>
<ProdNum>2001</ProdNum>
<ItemID>1</ItemID>
<ParentID>1</ParentID>
<Quantity>2</Quantity>
<Description>Test 2</Description>
</Item>
</Items>
</Transaction>
<Member>
<MemCode>2002</MemCode>
</Member>
<Events>
<Event>
<URL>http://yoururl.com/payload1</URL>
<Type>1</Type>
</Event>

22 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
<Event>
<URL>http://yoururl.com/payload2</URL>
<Type>2</Type>
</Event>
<Event>
<URL>http://yoururl.com/payload3</URL>
<Type>3</Type>
</Event>
</Events>
</Request>
If the event URL isn’t defined for an event, then that event will be ignored
For the start and end of day events the URL is defined in the Pixel32.ini file
[EOI]
SOD_URL=[url type 99]
EOD_URL=[url type 100]

Inside <Response> Node


<Response>
<ErrorNum>…</ErrorNum>
<Member>
<MemCode>…</MemCode>
<MemAddrId>…</MemAddrId>
</Member>
<Exception>
<Class>…</Class>
<Message>…</Message>
</Exception>
<Transaction>

<Payments>
<Payment>…</Payment>
<Payment>…</Payment>

</Payments>
<Items>
<Item>…</Item>
<Item>…</Item>

</Items>
</Transaction>
</Response>

<ErrorNum> - (Integer)
0 - no error; -1 - exception.

<Exception>
Node will only be present if ErrorNum = -1.

<Class> - (String)
The exception class name.

<Message> - (String) The exception message.

23 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Note: Info about each exception will be stored in the POS debug log while
in debug mode.

<Transaction>
Node will be present if ErrorNum = 0.

Transaction Sub Nodes


The Transaction node will contain the following sub nodes (among others):

<Status> - (Integer)
If 3, the transaction is closed.

<FinalTotal> - (Floating point) Net total plus taxes.

<GratuityAmount> - (Floating point) Amount of gratuity.

<NetTotal> - (Floating point) Net total of transaction.

<Tax1> - <Tax5> - (Floating point) Amount of each tax.

<Taxable1> - <Taxable5> - (Floating point) Taxable amount for each tax.

<TaxExempt1> - <TaxExempt5> - (Boolean) If 1, the transaction is exempt from that tax.

<AmountDue> - (Floating point)


Amount that is still due. It will be zero if the transaction is paid in full. If no payments were made, it will equal the
final total plus any forced gratuity.

Payment Sub Nodes


Each <Payment> will contain the following sub nodes (among others):

<Tender> - (Floating point) Amount of payment.

<Tip> - (Floating point) Amount of tip.

<AuthCode> - (String) Authorization code.

<Status> - (Integer)
If 3, the payment has been processed.

24 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Item Sub Nodes
Each <Item> will contain the following sub nodes (among others):

<NoTax> - (Boolean)
If 1, the item is tax exempt.

<ProdCode> - (Integer)
Item's product number or coupon number (if coupon).

<TypeOfProd> - (Integer) If 100, the item is a coupon.

<UniqueId> - (Integer)
Item's unique id – same as primary key in PosDetail DB table.

<CostEach> - (Floating point)


Item's cost for quantity of 1. Will include tax in VAT environment.

<Quantity> - (Floating point) Item's quantity.

25 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Testing Your External Order Interface
Creating an EOI Employee
An EOI Employee will now need to be created in BackOffice. This will be the POS employee that will be receiving the
external orders on the POS.

1. Open BackOffice and select Employee Setup from the Employees pull down menu.
2. Enter the Employee Name, Last Name, and P.O.S. Name (e.g. "EOIEmp").
3. Assign a job position to the EOI Employee. Use the Manager job position to avoid possible security credentials
issues.
4. Assign a swipe # to the employee.

5. Close and save changes.


6. Now open System Setup from the Administrator pull down menu.
7. Switch to the Advanced tab.
8. In the Default Internet Employee section, click on 'Change/Set' and apply the EOI employee (i.e. "EOIEmp").

26 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
9. Close and save changes.

Note
Typically, an EOI Employee cannot:

• Have a supervisor job position


• Be in training mode
• Be logged in at another station
• Have multiple job positions
• Have an assigned cash drawer

The POS station for the interface also needs correct Pixel32.ini settings
shown later in this document.

27 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Configuring an EOI Station
An EOI Station runs the API to communicate between the POS and your webpage. It also
runs the PixWinSockServer (Listener) when a TCP connection is needed.

1. From BackOffice, open Station Setup from the Administrator pull down menu.
2. In the Station Options tab, select the station # that will be hosting the EOI
communication, such as Station 12 as shown in the following image.
3. Make sure to apply the Menu, Finish Form, Floor File, and Default Sales Type (like Quick
Order, for example).

4. Switch to the Advanced tab.


5. Uncheck the Play Animation on Main Screen option.
6. Assign a Quick Order Table Num to the station (i.e. "31000"). You will be required to
apply the same Quick Order Table Num to any stations that will need to view Quick
Orders coming from the EOI Station. Refer to the PixelPoint manual for more
information.
7. Close and save changes.

28 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Pixel32.ini Configuration
There are two policy options that need to be set in order for the API module to communicate with PixelPoint POS.
Open Pixel32.ini and add "ActiveServer=Y" and "InternetServer=Y" under the section for the station that is acting as the
EOI Station on the customer site.

For example, if Station 12 is acting as the EOI Station, beneath the "[Station12]" heading, insert these two policies like in
the example below.

Now that a station has been designated as the EOI station, there are additional EOI options that can be set under the
"[EOI]" section in Pixel32.ini:

MinimizeToTray=Y
The EOI can be minimized to the System Tray when this option is set to "Y". Default = "N"

IOLogging=Y
If configured to "Y", the EOI station will log all input and output to the \PixelPOS\Interface\EOI directory. Default = "N"

ShowLog=Y
If configured to "Y", EOI response logs will be sent to the EOI station's window. Default = "Y"

When these three options are set to "Y", Pixel32.ini would have a section that looks like this:

[EOI]
IOLogging=Y
MinimizeToTray=Y
ShowLog=Y

29 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
External Authorization of Transaction Payments
The external ordering source that communicates with the API module must be configured to
use an external authorization payment system to process and verify customer credit card
payments before the transaction is sent to the POS. For PixelPoint to record these payments,
configure an external payment method as follows:

1. In BackOffice Payment Method Setup, create a new payment method. For example,
"VISA- External".
2. Select External Authorization and save changes.

If the customer wants more detailed transaction payment information, it is recommended that
additional external payment methods should created in BackOffice for each credit card type
used by the EOI on that site. Note that any payment method that uses the "External
Authorization" option will not display on the POS Finish screen, but will still be recorded in the
PixelPoint database.

Note: Your API should be configured to use the "methodnum" field associated with
the additional external payment methods created above in BackOffice. PixelPoint
POS payment methods that use PixelAuthorizationManager (like cards processed in
store by a customer in person) should not authorize payments through the EOI.

30 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
POS Table Links Setup – Associated Forced Questions
When ordering products in the POS, PixelPoint will do the following:

1. It will look in the Product table to get the product item being ordered. If the item
(PRODNUM) in the Product table has questions (QUESTION 1, QUESTION 2, QUESTION
3, QUESTION 4 or QUESTION 5) assigned to item, they will be linked to the Questions
table in the database. The Questions table holds the forced questions for each item. The
QUESTION field (1-5) in the Product table is linked to the (OPTIONINDEX) in the Question
table. The (OPTIONINDEX) in the Question table links to the ForceChoices table which
contains the modifier used to answer the question. The values of the answers in the
(CHOICE) field in ForceChoices table are the modifiers that can be applied to the selected
question. The (CHOICE) field is then associated with the (PRODNUM) in the Product
table.

Ordering Example:

1. A customer orders a hamburger (PRODNUM in Product table)


2. The hamburger product has questions - 'What type of topping do you want on your
burger?' (QUESTION 1 in the Product table linked to the OPTIONINDEX in the Question
table.)
3. This will open another window with possible topping selections available for the burger
product question. (OPTIONINDEX in Question table is linked to the OPTIONINDEX in the
ForceChoices table.)
4. The customer now selects the type of toppings that are available for the burger product
question. (CHOICE in the ForceChoices table is linked to the PRODNUM in the Product
table.)

A full diagram representing the table links follows.

31 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020
Table Links Diagram

32 Copyright © ParTech, Inc. 2019. All Rights Reserved June 22, 2020

You might also like