getDetail.php was computing total as subtotal + tax + tip, omitting the
Payfrit service fee. This caused the order detail view to show a lower
total than what the cart/checkout displayed at order time.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Complete port of all 163 API endpoints from Lucee/CFML to PHP 8.3.
Shared helpers in api/helpers.php (DB, auth, request/response, security).
PDO prepared statements throughout. Same JSON response shapes as CFML.