Update: 2026-06-11 18:22:57
This commit is contained in:
110
walletintaleq.intaleq.xyz/v2/main/ride/payMob/paymob_driver/paymob_payout.php
Executable file
110
walletintaleq.intaleq.xyz/v2/main/ride/payMob/paymob_driver/paymob_payout.php
Executable file
@@ -0,0 +1,110 @@
|
||||
<?php
|
||||
// paymob_payout.php
|
||||
// سكريبت بي ات بي لمعاملات Paymob Payout (محفظة وبنك) بدون تخزين في قاعدة البيانات
|
||||
|
||||
declare(strict_types=1);
|
||||
include '../../../connect.php'; // يعطيك $con، filterRequest(), printSuccess(), printFailure()
|
||||
|
||||
// 1) جلب باراميترات الطلب عبر filterRequest
|
||||
$driverId = filterRequest('driverID');
|
||||
$amount = filterRequest('amount');
|
||||
$method = filterRequest('method'); // 'wallet' أو 'bank'
|
||||
$msisdn = filterRequest('msisdn');
|
||||
$bankCard = filterRequest('bankCard'); // يُستعمل عند method == 'bank'
|
||||
$bankCode = filterRequest('bankCode'); // يُستعمل عند method == 'bank'
|
||||
|
||||
if (empty($driverId) || empty($amount) || empty($method)) {
|
||||
printFailure('Missing parameters');
|
||||
exit;
|
||||
}
|
||||
|
||||
// 2) جلب بيانات Paymob من البيئة (Environment Variables)
|
||||
$pmUser = getenv('payMobOutUserName');
|
||||
$pmPass = getenv('payMobOutPassword');
|
||||
$pmClientId = getenv('PAYMOBOUTCLIENT_ID'); // من static const pmobid
|
||||
$pmSecret = getenv('PAYMOBOUTCLIENTSECRET'); // من static const pmobsec
|
||||
|
||||
// 3) دالة للحصول على OAuth Token من Paymob
|
||||
function fetchPaymobToken(string $user, string $pass, string $cid, string $secret): ?string {
|
||||
$ch = curl_init('https://payouts.paymobsolutions.com/api/secure/o/token/');
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_POST => true,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_HTTPHEADER => ['Content-Type: application/x-www-form-urlencoded'],
|
||||
CURLOPT_POSTFIELDS => http_build_query([
|
||||
'grant_type' => 'password',
|
||||
'username' => $user,
|
||||
'password' => $pass,
|
||||
'client_id' => $cid,
|
||||
'client_secret' => $secret,
|
||||
]),
|
||||
]);
|
||||
$resp = curl_exec($ch);
|
||||
if (!$resp) return null;
|
||||
$data = json_decode($resp, true);
|
||||
return $data['access_token'] ?? null;
|
||||
}
|
||||
|
||||
$oauthToken = fetchPaymobToken($pmUser, $pmPass, $pmClientId, $pmSecret);
|
||||
if (!$oauthToken) {
|
||||
printFailure('Failed to retrieve Paymob token');
|
||||
exit;
|
||||
}
|
||||
|
||||
// 4) دوال صرف الأموال
|
||||
function disburseWallet(string $token, string $amt, string $msisdn): array {
|
||||
$ch = curl_init('https://payouts.paymobsolutions.com/api/secure/disburse/');
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_POST => true,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_HTTPHEADER => [
|
||||
"Authorization: Bearer $token",
|
||||
'Content-Type: application/json',
|
||||
],
|
||||
CURLOPT_POSTFIELDS => json_encode([
|
||||
'amount' => $amt,
|
||||
'issuer' => 'wallet',
|
||||
'msisdn' => $msisdn,
|
||||
]),
|
||||
]);
|
||||
$resp = curl_exec($ch);
|
||||
return $resp ? json_decode($resp, true) : [];
|
||||
}
|
||||
|
||||
function disburseBank(string $token, string $amt, string $card, string $code): array {
|
||||
$ch = curl_init('https://payouts.paymobsolutions.com/api/secure/disburse/');
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_POST => true,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_HTTPHEADER => [
|
||||
"Authorization: Bearer $token",
|
||||
'Content-Type: application/json',
|
||||
],
|
||||
CURLOPT_POSTFIELDS => json_encode([
|
||||
'amount' => $amt,
|
||||
'issuer' => 'bank_card',
|
||||
'bank_card_number' => $card,
|
||||
'bank_code' => $code,
|
||||
'bank_transaction_type' => 'cash_transfer',
|
||||
]),
|
||||
]);
|
||||
$resp = curl_exec($ch);
|
||||
return $resp ? json_decode($resp, true) : [];
|
||||
}
|
||||
|
||||
// 5) استدعاء الدالة المناسبة وتنفيذ الصرف
|
||||
if ($method === 'wallet') {
|
||||
$result = disburseWallet($oauthToken, $amount, $msisdn);
|
||||
} else {
|
||||
$result = disburseBank($oauthToken, $amount, $bankCard, $bankCode);
|
||||
}
|
||||
|
||||
// 6) التحقق من نجاح الصرف وإرجاع النتيجة
|
||||
if (empty($result) || ($result['disbursement_status'] ?? '') !== 'successful') {
|
||||
printFailure('Disbursement failed');
|
||||
exit;
|
||||
}
|
||||
|
||||
// 7) إرجاع التوكن والنتيجة للعميل بدون تخزين في DB
|
||||
printSuccess( $result);
|
||||
?>
|
||||
Reference in New Issue
Block a user