110 lines
4.1 KiB
PHP
Executable File
110 lines
4.1 KiB
PHP
Executable File
<?php
|
|
// paymob_payout.php
|
|
// سكريبت بي ات بي لمعاملات Paymob Payout (محفظة وبنك) بدون تخزين في قاعدة البيانات
|
|
|
|
declare(strict_types=1);
|
|
include '../../../jwtconnect.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);
|
|
?>
|