feat: استيراد كود سيرو إلى تريبز (سيرو @ecfe7568) — بلا تعديل
قرار المالك 2026-07-27: باك إند سيرو PHP هو المعتمد، وتطبيقاته المجرّبة ميدانياً تحل محل إعادة البناء المؤرشفة. سيرو نفسه لم يُمسّ. الخريطة: backend · payment_server · loction_server · ride_server · passenger_server · docker · dashboard · stress_test → الجذر siro_rider → apps/rider siro_driver → apps/driver siro_admin → dashboards/admin siro_service → dashboards/service android_bot → apps/android_bot socialBot → apps/socialBot نُسخ المتعقَّب في git سيرو فقط عبر `git archive` (3,198 ملفاً / ~169 م.ب) لا `cp -r` — فاستُثنيت مخلفات البناء تلقائياً. بلا أي تعديل محتوى عمداً: كل ما يلي يصير فرقاً مقروءاً مقابل المصدر. لم يُستورد وسببه: siromove.com (الموقع التسويقي يبقى marketing/ في تريبز، سيرو فيه 8 ملفات) · docs و planning (تريبز له docs/ الخاص) · deploy.sh (ليس نشراً على سيرفر بل `git add . && git push origin --all` — فخّ في مستودع آخر) · transit_dashboard (بانتظار قرار مصير backend-transit و dashboards/transit-web). ⚠️ لا يبني بعد — ثلاثة نواقص متوقعة ومقصودة: 1. `.env` و `lib/env/env.g.dart` غير متعقَّبين في سيرو (أسرار لكل مستأجر): كل تطبيق فلاتر يحتاج .env خاصاً ثم توليد env.g.dart بـ build_runner. 2. إعدادات Firebase (9 ملفات google-services.json و GoogleService-Info.plist) يستبعدها .gitignore تريبز — ولكل مستأجر مشروع Firebase خاص أصلاً. 3. apps/driver في سيرو يشير إلى `../../Intaleq/packages/get` خارج المستودع → يجب ضمّ الحزم داخله أسوة بـ apps/rider. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
9909d9b4c1
commit
4d8414c96b
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
include "../../../jwtconnect.php"; // تأكد من أن هذا الملف يحتوي على الاتصال بقاعدة البيانات ودوال المساعدة
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| ملف بدء الدفع مع eCash
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| هذا الملف مسؤول عن:
|
||||
| 1. استقبال طلب الدفع من تطبيق فلاتر (المبلغ ومعرّف المستخدم/السائق).
|
||||
| 2. إنشاء رابط دفع فريد وخاص ببوابة eCash.
|
||||
| 3. حساب رمز التحقق (Verification Code) المطلوب من eCash.
|
||||
| 4. تسجيل محاولة الدفع في قاعدة البيانات بحالة "قيد الانتظار".
|
||||
| 5. إعادة رابط الدفع إلى التطبيق ليتم عرضه في WebView.
|
||||
|
|
||||
*/
|
||||
|
||||
// --- الإعدادات الرئيسية - يجب تخزينها كمتغيرات بيئة (Environment Variables) ---
|
||||
$ecash_merchant_id = getenv('ECASH_MERCHANT_ID'); // معرّف التاجر الخاص بك من eCash
|
||||
$ecash_merchant_secret = getenv('ECASH_MERCHANT_SECRET'); // المفتاح السري الخاص بك من eCash
|
||||
$ecash_terminal_key = getenv('ECASH_TERMINAL_KEY'); // مفتاح المحطة الطرفية (Terminal Key) من eCash
|
||||
$ecash_checkout_url = 'https://checkout.ecash-pay.com/'; //
|
||||
$ecash_checkout_url_stage = 'https://checkout.ecash-pay.co/';//رابط بوابة الدفع
|
||||
$base_app_url = getenv('APP_BASE_URL'); // الرابط الأساسي لواجهة API الخاصة بك
|
||||
|
||||
// --- استقبال البيانات من تطبيق فلاتر ---
|
||||
$amount = filterRequest("amount");
|
||||
$passengerId = filterRequest("passengerId"); // معرّف السائق أو المستخدم
|
||||
|
||||
// --- التحقق من صحة البيانات المدخلة ---
|
||||
if (empty($amount) || empty($passengerId) || !is_numeric($amount) || $amount <= 0) {
|
||||
printFailure("المبلغ أو معرّف المستخدم غير صالح.");
|
||||
exit;
|
||||
}
|
||||
|
||||
// --- إعداد متغيرات الدفع ---
|
||||
$currency = "SYP"; // العملة حسب متطلبات eCash
|
||||
$lang = "AR"; // لغة واجهة الدفع (AR أو EN)
|
||||
//$orderRef = uniqid($passengerId . "_"); // إنشاء رقم مرجعي فريد للطلب لربطه بالمستخدم
|
||||
$orderRef = "tripz_" . $passengerId . "_" . time();
|
||||
// --- إنشاء رمز التحقق (Verification Code) ---
|
||||
// هو عبارة عن MD5 لمجموعة من الحقول ويجب أن يكون بأحرف كبيرة
|
||||
$verification_string = $ecash_merchant_id . $ecash_merchant_secret . $amount . $orderRef;
|
||||
$verificationCode = strtoupper(md5($verification_string));
|
||||
|
||||
// --- تحديد روابط إعادة التوجيه والاستدعاء (Redirect & Callback) ---
|
||||
// الرابط الذي يتم توجيه المستخدم إليه بعد إتمام الدفع
|
||||
$redirectUrl = urlencode($base_app_url . "/passenger/ecash_verify.php?orderRef=" . $orderRef);
|
||||
// الرابط الذي تستدعيه eCash لإبلاغ سيرفرك بنتيجة العملية (Webhook)
|
||||
$callbackUrl = urlencode($base_app_url . "/passenger/ecash_webhook.php");
|
||||
|
||||
// --- بناء رابط الدفع النهائي الخاص بـ eCash ---
|
||||
$paymentUrl = "{$ecash_checkout_url}Checkout/CardCheckout" .
|
||||
"?tk=" . urlencode($ecash_terminal_key) .
|
||||
"&mid=" . urlencode($ecash_merchant_id) .
|
||||
"&vc=" . urlencode($verificationCode) .
|
||||
"&c=" . urlencode($currency) .
|
||||
"&a=" . urlencode($amount) .
|
||||
"&lang=" . urlencode($lang) .
|
||||
"&or=" . urlencode($orderRef) .
|
||||
"&ru=" . $redirectUrl .
|
||||
"&cu=" . $callbackUrl;
|
||||
//error_log("eCash - فشل تسجيل الدفعة المبدئية: " . $paymentUrl);
|
||||
// --- تسجيل العملية المبدئية في قاعدة البيانات ---
|
||||
// هذا يساعد على تتبع الطلب وربطه بالـ callback القادم من eCash
|
||||
// نفترض أن حقل status يقبل القيم: 0=فشل، 1=نجاح، 2=قيد الانتظار
|
||||
try {
|
||||
$stmt = $con->prepare(
|
||||
"INSERT INTO `paymentsLogSyria`( `user_id`, `amount`, `status`, `order_ref`, `payment_method`, `created_at`)
|
||||
VALUES (:user_id, :amount, 2, :order_ref,'ecash-passenger', NOW())"
|
||||
);
|
||||
$stmt->execute([
|
||||
':user_id' => $passengerId,
|
||||
':amount' => $amount,
|
||||
':order_ref' => $orderRef
|
||||
]);
|
||||
} catch (PDOException $e) {
|
||||
error_log("eCash - فشل تسجيل الدفعة المبدئية: " . $e->getMessage());
|
||||
printFailure("حدث خطأ أثناء بدء عملية الدفع. يرجى المحاولة مرة أخرى.");
|
||||
exit;
|
||||
}
|
||||
|
||||
// --- إعادة رابط الدفع إلى تطبيق فلاتر ---
|
||||
// التطبيق سيستقبل هذا الرابط ويفتحه في WebView
|
||||
// نرسل الرابط داخل حقل 'message' كما يتوقع كود فلاتر
|
||||
printSuccess($paymentUrl);
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user