54 lines
1.5 KiB
PHP
54 lines
1.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Controllers;
|
|
|
|
use Core\Request;
|
|
use Core\Response;
|
|
use App\Services\QrTokenService;
|
|
|
|
class QrController
|
|
{
|
|
/**
|
|
* GET /api/v1/qr/dynamic-token
|
|
* User's Flutter app requests a rotating QR token.
|
|
*/
|
|
public function getDynamicToken(Request $request): void
|
|
{
|
|
$userId = (int)$request->getHeader('x-user-id');
|
|
$res = QrTokenService::generateToken($userId);
|
|
|
|
if (!$res['success']) {
|
|
Response::forbidden($res['message']);
|
|
}
|
|
|
|
Response::success($res, 'Dynamic QR token generated.');
|
|
}
|
|
|
|
/**
|
|
* POST /api/v1/qr/verify-token
|
|
* Scanned by hospital/hotel front desk or verification portal.
|
|
*/
|
|
public function verifyToken(Request $request): void
|
|
{
|
|
$token = trim((string)$request->get('token'));
|
|
$partnerId = (int)$request->get('partner_id', 1);
|
|
$staffName = trim((string)$request->get('staff_name', 'موظف الاستقبال'));
|
|
$billAmount = (float)$request->get('bill_amount', 0.0);
|
|
$serviceName = trim((string)$request->get('service_name', 'استخدام خدمات الشريك'));
|
|
|
|
if (empty($token)) {
|
|
Response::error('QR token is required for verification.');
|
|
}
|
|
|
|
$res = QrTokenService::verifyScannedToken($token, $partnerId, $staffName, $billAmount, $serviceName);
|
|
|
|
if (!$res['success']) {
|
|
Response::error($res['message'], 400);
|
|
}
|
|
|
|
Response::success($res, 'Member verified successfully.');
|
|
}
|
|
}
|