Skip to content
English
  • There are no suggestions because the search field is empty.

How TillPayments Terminal Transactions Work

Source: tillpayments_controller.rb

  • The test/live mode toggle is inverted — the code uses !ap_use_test_mode, so enabling "test mode" in settings actually puts you in live mode and vice versa
  • Terminal transactions are only supported for objects of type "invoice" or "payment"; other object types will be rejected
  • A terminal ID is required to initiate a transaction; the system also checks that no existing intent already exists on the object before creating a new one
  • Lost transaction status recovery compares the EFT receipt record against the original object state to determine what happened
  • Surcharge handling has two paths: if the surcharge amount is zero, the payment processes directly; if positive, the surcharge is applied to the object first and then synced to accounting
  • Refunds are only allowed for credits that are fully processed and have not been partially applied to other invoices
  • When processing multiple payment items, the total of all items must equal the total of all payment methods; you cannot overpay any individual invoice in the batch
  • Accounting sync is queued as a delayed job with deduplication logic and a 1-minute delay to prevent duplicate sync entries

Support scenarios

  • "Terminal is processing in live mode but we have test mode enabled" → The test/live toggle is inverted in the code. If the workshop has "test mode" ticked, they are actually in live mode. Toggle the setting to the opposite of what seems logical.
  • "Customer says they paid but the terminal shows no transaction" → Check if there is an existing intent record stuck on the invoice. Only one intent is allowed per object — a previous abandoned attempt may be blocking new transactions.
  • "Surcharge isn't showing up in our accounting software" → Surcharge accounting sync uses a delayed job with a 1-minute delay. If the job failed, the surcharge was applied in Workshop but not pushed to accounting. Check the delayed jobs queue.
  • "We tried to refund a credit but it won't let us" → Refunds require the credit to be fully processed with no partial applications. If the credit has been partially applied to invoices, it cannot be refunded through the terminal.