Sale Hooks
Sale Hooks
Every time a sale is modified and saved locally the top level window
object will emit an event via the postMessage API.
Data structure
The data
attribute of that event will have the following structure:
{
"event_name": "sale:update",
"data": {
"sale": {
"id": "a604d16b-a999-8748-11e6-9a4e7ba6e8d3",
"client_id": "web_register",
"client_sale_id": "a604d16b-a999-8748-11e6-9a4e7ba6e8d3",
"totals": {
"total_tax": "0.39131",
"total_price": "2.60870",
"total_paid": "0.00",
"total_to_pay": "3.00"
},
"line_items": [{
"id": "875479a5-d96d-a37f-11ef-a7af2ae09344",
"gift_card_number": "",
"tags": ["firstTag", "secondTag"],
"product_id": "b1db66d5-f019-11e3-a0f5-b8ca3a64f8f4",
"quantity": "1",
"unit_price": "2.60870",
"unit_tax": "0.39131",
"tax_id": "b1d192bc-f019-11e3-a0f5-b8ca3a64f8f4"
}],
"customer_id": "dc85058a-a683-11e4-ef46-e256d3551c9d"
}
},
"source": "Vend Client API"
}
NOTE: Currently the
id
and theclient_sale_id
will be identical but generally, it should not be assumed that this is always going to be the case. Theid
is the final id that the sale will have on the server and theclient_sale_id
is an id generated on the client side for the purpose of tracking the sale's state locally.
Note: The
gift_card_number
will be an empty string unless the product for the line item is a gift card, in which case it will be populated.
Event handling
Here's an example of how a browser extension can subscribe to those events and perform actions based on them:
window.addEventListener('message', event => {
let eventData
try {
eventData = JSON.parse(event.data)
} catch (e) {
// @todo handle/log error
return
}
if (eventData.event_name === 'sale:update') {
const saleData = eventData.data.sale
// @todo do stuff with saleData
}
})
In addition to the sale:update
event there are also events for when a sale has been completed (sale:complete
) or discarded (sale:discard
). All 3 of these events include the same sale payload.
Updated 27 days ago