Single Session with Pre-Selection

In the Pre-selection flow, the customer first selects a product before proceeding to initiate payment. The vending machine remains idle, waiting for product selection. Once the user chooses a product, the payment terminal requests card authorization and, upon approval, dispenses the product.

This method ensures a smooth, secure transaction by separating product selection from payment authorization within a single vending session.

Payment Flow

Visualize the Pre-selection process with the diagram below, which illustrates each step of the single vending session flow, from product selection to payment authorization and dispensing.

Below is a breakdown of the diagram:

  1. The Nayax Device sends a message to the consumer: "Please Select a Product."
  2. The consumer selects a product from the vending machine.
  3. The peripheral's SDK sends a a vending request to the Nayax Device.
    vmc_vend_vend_request(vend_session_t *session)
    vmc_instance.vend.vend_request(session);
    m_vmc.vend.vend_request(m_sessions[m_active_session]);
  4. The Nayax Device sends a message to the consumer: "Please Present Card."
  5. The consumer presents their payment card.
  6. The Nayax Device sends an authorization request to the Nayax Server.
  7. The Nayax Server forwards the authorization request to the Billing Provider.
  8. The Billing Provider sends an authorization response (approved) to the Nayax Server.
  9. The Nayax Server sends the authorization response (approved) back to the Nayax Device.
  10. The peripheral's SDK handles transaction data received from the Nayax Device via Transfer Data command (said data includes information about the Nayax transaction ID and the consumer's card details):
    vmc_vend_event_handler_cb(vm_vend_event_on_transaction_info)
    vend_callbacks(onTransactionInfo(data))
    vmc_vend_events()
    (via onTransactionInfo(data))
  11. The SDK triggers "Vend Approved" events:
    vmc_vend_event_handler_cb(vm_vend_event_on_vend_approved)
    vend_callbacks()
    (via onVendApproved(session))
    vmc_vend_events()
    (via onVendApproved(session))
  12. The peripheral dispenses the product/ provides the service to the consumer.
  13. The SDK reports "vend success":
    vmc_vend_vend_status(&session, __true)
    vmc_vend_events()
    (via onVendApproved(session) -which would return "true")
    vmc_vend_events()
    (via onVendApproved(session) -which would return "true")
    and completes the vend session:
    vmc_vend_vend_session_complete_lowlevel()
    no such function in C# or Java due to the nature of the languages
    no such function in C# or Java due to the nature of the languages

  14. Message to the consumer: "Please Take Product."
  15. The Nayax Device sends a settlement request to the Nayax Server.
  16. The Nayax Server forwards the settlement request to the Billing Provider.
  17. The Billing Provider sends a settlement response (OK) to the Nayax Server.
  18. The Nayax Server returns the settlement response (OK) to the Nayax Device.
  19. The vending session ends.
  20. Message to Card Holder: "Thank you & Goodbye."

See Also