Update: 2026-06-11 19:26:42
This commit is contained in:
@@ -1,141 +0,0 @@
|
||||
<?php
|
||||
// /v1/main/ride/syriatel/driver/start_payment.php
|
||||
include "../../../connect.php";
|
||||
include_once "./syriatel_token_handler.php";
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
/** دوال الطباعة (لو موجودة أصلاً في connect.php تجاهل هذه) */
|
||||
if (!function_exists('printSuccess')) {
|
||||
function printSuccess($data = null, $message = "success") {
|
||||
echo json_encode(["status"=>"success","message"=>$message,"data"=>$data], JSON_UNESCAPED_UNICODE); exit;
|
||||
}
|
||||
}
|
||||
if (!function_exists('printFailure')) {
|
||||
function printFailure($message = "failure", $code = null) {
|
||||
$resp = ["status"=>"failure","message"=>$message]; if ($code!==null) $resp["code"]=$code;
|
||||
echo json_encode($resp, JSON_UNESCAPED_UNICODE); exit;
|
||||
}
|
||||
}
|
||||
|
||||
/** مولّد مرجع الطلب (TransactionID) */
|
||||
function generate_order_ref(): string {
|
||||
// مرجع مقروء + فريد: INT-YYYYMMDDHHMMSS-6digits
|
||||
$ts = date('YmdHis');
|
||||
$rand = str_pad((string)random_int(0, 999999), 6, '0', STR_PAD_LEFT);
|
||||
return "INT-$ts-$rand";
|
||||
}
|
||||
|
||||
// --- Input Parameters ---
|
||||
$amount = filterRequest('amount');
|
||||
$driverId = filterRequest('driverId');
|
||||
$phone = filterRequest('phone'); // customerMSISDN
|
||||
$lang = filterRequest('lang') ?? 'ar';
|
||||
|
||||
error_log("Syriatel Start: Request received for driver {$driverId} with amount {$amount}");
|
||||
|
||||
if (!$amount || !$driverId || !$phone) {
|
||||
printFailure("Missing required parameters.");
|
||||
}
|
||||
|
||||
// --- Environment Variables ---
|
||||
$baseUrl = rtrim((string)getenv('SYRIATEL_API_BASE_URL'), '/');
|
||||
$merchantMSISDN = (string)getenv('SYRIATEL_MERCHANT_MSISDN');
|
||||
|
||||
if ($baseUrl === '' || $merchantMSISDN === '') {
|
||||
error_log("Syriatel Start: Missing SYRIATEL_API_BASE_URL or SYRIATEL_MERCHANT_MSISDN");
|
||||
printFailure("Server configuration error.");
|
||||
}
|
||||
|
||||
// --- Logic ---
|
||||
try {
|
||||
// 1) Token
|
||||
$token = getSyriatelToken();
|
||||
error_log("Syriatel Start: token=" . ($token ? substr($token,0,8).'...' : 'NULL'));
|
||||
|
||||
if (!$token) {
|
||||
printFailure("Could not authenticate with the payment provider.");
|
||||
}
|
||||
|
||||
// 2) Transaction ID + log DB
|
||||
$transactionID = generate_order_ref();
|
||||
$stmt = $con->prepare(
|
||||
"INSERT INTO `paymentsLogSyriaDriver` (user_id, amount, status, order_ref, payment_method, created_at)
|
||||
VALUES (:user_id, :amount, 0, :order_ref, 'syriatel', NOW())"
|
||||
);
|
||||
$stmt->execute([
|
||||
':user_id' => $driverId,
|
||||
':amount' => $amount,
|
||||
':order_ref' => $transactionID
|
||||
]);
|
||||
error_log("Syriatel Start: Logged transaction {$transactionID} for driver {$driverId}");
|
||||
|
||||
// 3) Payment Request → Syriatel
|
||||
$body = [
|
||||
"customerMSISDN" => $phone, // مثال: 09xxxxxxxx (حسب وثيقتهم)
|
||||
"merchantMSISDN" => $merchantMSISDN, // من env
|
||||
"amount" => $amount,
|
||||
"transactionID" => $transactionID,
|
||||
"token" => $token
|
||||
];
|
||||
error_log("Syriatel Start: customerMSISDN {$phone} merchantMSISDN {$merchantMSISDN}");
|
||||
$url = "{$baseUrl}/ePaymentExternalModule/paymentRequest";
|
||||
$ch = curl_init($url);
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_POST => true,
|
||||
CURLOPT_POSTFIELDS => json_encode($body, JSON_UNESCAPED_UNICODE),
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_HTTPHEADER => [
|
||||
"Content-Type: application/json",
|
||||
"User-Agent: Mozilla/5.0",
|
||||
"Accept: application/json"
|
||||
],
|
||||
CURLOPT_CONNECTTIMEOUT => 8,
|
||||
CURLOPT_TIMEOUT => 40,
|
||||
CURLOPT_SSL_VERIFYPEER => true,
|
||||
CURLOPT_SSL_VERIFYHOST => 2,
|
||||
]);
|
||||
$response = curl_exec($ch);
|
||||
$errno = curl_errno($ch);
|
||||
$errstr = curl_error($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
error_log("Syriatel Start: paymentRequest HTTP {$httpCode} errno={$errno} resp=" . substr((string)$response,0,300));
|
||||
|
||||
if ($errno) {
|
||||
printFailure("Payment gateway communication error.", $errno);
|
||||
}
|
||||
if ($httpCode !== 200) {
|
||||
printFailure("Payment gateway communication error (HTTP {$httpCode}).");
|
||||
}
|
||||
|
||||
$responseData = json_decode($response, true);
|
||||
|
||||
// حسب الدوكيومنت: resultCode = 1 يعني OTP انرسل بنجاح
|
||||
//errorCode = 0 => Success
|
||||
if (isset($responseData['errorCode']) && (string)$responseData['errorCode'] === "0") {
|
||||
printSuccess([
|
||||
'message' => 'OTP sent successfully.',
|
||||
'transactionID' => $transactionID,
|
||||
]);
|
||||
}
|
||||
// 2) إذا resultCode = 1 => OTP sent
|
||||
elseif (isset($responseData['resultCode']) && (int)$responseData['resultCode'] === 1) {
|
||||
printSuccess([
|
||||
'message' => 'OTP sent successfully.',
|
||||
'transactionID' => $transactionID,
|
||||
]);
|
||||
}
|
||||
// 3) أي شيء آخر => فشل
|
||||
else {
|
||||
$errorMessage = $responseData['resultDescription']
|
||||
?? $responseData['errorDesc']
|
||||
?? 'Failed to initiate payment.';
|
||||
printFailure($errorMessage);
|
||||
}
|
||||
|
||||
} catch (Throwable $e) {
|
||||
error_log("Syriatel Start: Exception - " . $e->getMessage());
|
||||
printFailure("An unexpected server error occurred.");
|
||||
}
|
||||
Reference in New Issue
Block a user