fix some bugs from zarin 3

This commit is contained in:
2026-07-28 14:57:28 +03:30
parent 2c9e969965
commit 91f6b24da4
2 changed files with 23 additions and 5 deletions
+20 -4
View File
@@ -142,9 +142,16 @@ class ZarinController extends Controller
return $nameG !== '' ? $nameG : 'مشتری نقدی (خریدار)'; return $nameG !== '' ? $nameG : 'مشتری نقدی (خریدار)';
} }
/** آیا درخواست لیست زرین را خواسته؟ (query/body؛ مقاوم به boolean عجیب) */ /** آیا درخواست لیست زرین را خواسته؟ (query/body/header؛ مقاوم به QUERY_STRING خالی) */
private function requestWantsZarinList(Request $request): bool private function requestWantsZarinList(Request $request): bool
{ {
$header = $request->header('X-Include-Zarin', $request->header('Include-Zarin'));
if ($header !== null && $header !== '') {
if (filter_var($header, FILTER_VALIDATE_BOOLEAN) || in_array($header, [1, '1', 'yes', 'on'], true)) {
return true;
}
}
foreach (['include_zarin', 'include_tahesab'] as $key) { foreach (['include_zarin', 'include_tahesab'] as $key) {
$raw = $request->query($key, $request->input($key, null)); $raw = $request->query($key, $request->input($key, null));
if ($raw === null && !$request->query->has($key) && !$request->exists($key)) { if ($raw === null && !$request->query->has($key) && !$request->exists($key)) {
@@ -695,6 +702,17 @@ class ZarinController extends Controller
} }
public function customerSyncStatus(Request $request): \Illuminate\Http\JsonResponse public function customerSyncStatus(Request $request): \Illuminate\Http\JsonResponse
{
return $this->buildCustomerSyncStatus($request, $this->requestWantsZarinList($request));
}
/** مسیر بدون query — وقتی nginx QUERY_STRING را نمی‌فرستد */
public function customerSyncStatusWithZarin(Request $request): \Illuminate\Http\JsonResponse
{
return $this->buildCustomerSyncStatus($request, true);
}
private function buildCustomerSyncStatus(Request $request, bool $include): \Illuminate\Http\JsonResponse
{ {
$panelTotal = Customer::whereNull('deleted_at')->count(); $panelTotal = Customer::whereNull('deleted_at')->count();
$panelRegistered = Customer::whereNull('deleted_at')->whereNotNull('moshtari_code')->count(); $panelRegistered = Customer::whereNull('deleted_at')->whereNotNull('moshtari_code')->count();
@@ -719,8 +737,6 @@ class ZarinController extends Controller
$zarinOnlyResult = ['data' => [], 'total' => 0, 'current_page' => 1, 'last_page' => 1]; $zarinOnlyResult = ['data' => [], 'total' => 0, 'current_page' => 1, 'last_page' => 1];
$debugSample = []; $debugSample = [];
$include = $this->requestWantsZarinList($request);
if ($include) { if ($include) {
$fetched = $this->fetchAllZarinCustomers(); $fetched = $this->fetchAllZarinCustomers();
$zarinCustomers = $fetched['rows']; $zarinCustomers = $fetched['rows'];
@@ -802,7 +818,7 @@ class ZarinController extends Controller
'zarin_only_list' => $zarinOnlyResult, 'zarin_only_list' => $zarinOnlyResult,
]; ];
if ($include && $request->boolean('raw')) { if ($include && ($request->boolean('raw') || $request->input('raw'))) {
$payload['zarin_debug_sample'] = $debugSample; $payload['zarin_debug_sample'] = $debugSample;
} }
+3 -1
View File
@@ -205,7 +205,9 @@ Route::middleware('auth:user')->group(function (){
Route::get('zarin/health', [ZarinController::class, 'healthCheck']); Route::get('zarin/health', [ZarinController::class, 'healthCheck']);
Route::post('wallet/zarin', [ZarinController::class, 'wallet']); Route::post('wallet/zarin', [ZarinController::class, 'wallet']);
Route::post('zarin/table', [ZarinController::class, 'table']); Route::post('zarin/table', [ZarinController::class, 'table']);
Route::get('zarin/customer-sync/status', [ZarinController::class, 'customerSyncStatus']); // status با query روی بعضی سرورها QUERY_STRING خالی است — مسیر جدا برای لیست زرین
Route::get('zarin/customer-sync/status-with-zarin', [ZarinController::class, 'customerSyncStatusWithZarin']);
Route::match(['get', 'post'], 'zarin/customer-sync/status', [ZarinController::class, 'customerSyncStatus']);
Route::post('zarin/customer-sync/panel-to-zarin', [ZarinController::class, 'syncPanelToZarin']); Route::post('zarin/customer-sync/panel-to-zarin', [ZarinController::class, 'syncPanelToZarin']);
Route::post('zarin/customer-sync/import-from-zarin', [ZarinController::class, 'importFromZarin']); Route::post('zarin/customer-sync/import-from-zarin', [ZarinController::class, 'importFromZarin']);
Route::post('zarin/customer-sync/rollback-import', [ZarinController::class, 'rollbackImport']); Route::post('zarin/customer-sync/rollback-import', [ZarinController::class, 'rollbackImport']);