89 lines
4.7 KiB
PHP
Executable File
89 lines
4.7 KiB
PHP
Executable File
<?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");
|
|
$driverId = filterRequest("driverId"); // معرّف السائق أو المستخدم
|
|
|
|
// --- التحقق من صحة البيانات المدخلة ---
|
|
if (empty($amount) || empty($driverId) || !is_numeric($amount) || $amount <= 0) {
|
|
printFailure("المبلغ أو معرّف المستخدم غير صالح.");
|
|
exit;
|
|
}
|
|
|
|
// --- إعداد متغيرات الدفع ---
|
|
$currency = "SYP"; // العملة حسب متطلبات eCash
|
|
$lang = "AR"; // لغة واجهة الدفع (AR أو EN)
|
|
//$orderRef = uniqid($driverId . "_"); // إنشاء رقم مرجعي فريد للطلب لربطه بالمستخدم
|
|
$orderRef = "tripz_" . $driverId . "_" . 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 . "/driver/ecash_verify.php?orderRef=" . $orderRef);
|
|
// الرابط الذي تستدعيه eCash لإبلاغ سيرفرك بنتيجة العملية (Webhook)
|
|
$callbackUrl = urlencode($base_app_url . "/driver/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;
|
|
|
|
// --- تسجيل العملية المبدئية في قاعدة البيانات ---
|
|
// هذا يساعد على تتبع الطلب وربطه بالـ callback القادم من eCash
|
|
// نفترض أن حقل status يقبل القيم: 0=فشل، 1=نجاح، 2=قيد الانتظار
|
|
try {
|
|
$stmt = $con->prepare(
|
|
"INSERT INTO `paymentsLogSyriaDriver`( `user_id`, `amount`, `status`, `order_ref`, `payment_method`, `created_at`)
|
|
VALUES (:user_id, :amount, 2, :order_ref,'ecash-driver', NOW())"
|
|
);
|
|
$stmt->execute([
|
|
':user_id' => $driverId,
|
|
':amount' => $amount,
|
|
':order_ref' => $orderRef
|
|
]);
|
|
} catch (PDOException $e) {
|
|
error_log("eCash - فشل تسجيل الدفعة المبدئية: " . $e->getMessage());
|
|
printFailure("حدث خطأ أثناء بدء عملية الدفع. يرجى المحاولة مرة أخرى.");
|
|
exit;
|
|
}
|
|
|
|
// --- إعادة رابط الدفع إلى تطبيق فلاتر ---
|
|
// التطبيق سيستقبل هذا الرابط ويفتحه في WebView
|
|
// نرسل الرابط داخل حقل 'message' كما يتوقع كود فلاتر
|
|
printSuccess($paymentUrl);
|
|
|
|
?>
|