Initial commit
This commit is contained in:
323
mobile_money/airtelmoney/disbursements.php
Normal file
323
mobile_money/airtelmoney/disbursements.php
Normal file
@@ -0,0 +1,323 @@
|
||||
<?php
|
||||
$incoming=file_get_contents("php://input");
|
||||
$data=json_decode($incoming,true);
|
||||
|
||||
|
||||
$subscriber_country = $data['country'];
|
||||
$subscriber_currency = $data['currency'];
|
||||
$subscriber_msisdn = $data['msisdn'];
|
||||
|
||||
$transaction_amount = $data['amount'];
|
||||
$transaction_country = $data['country'];
|
||||
$transaction_currency = $data['currency'];
|
||||
$transaction_id = $data['transactionID'];
|
||||
|
||||
|
||||
$authURL="https://openapiuat.airtel.mw/auth/oauth2/token";
|
||||
/*CEDAR CAPITAL
|
||||
$clientID="94351d4d-4909-4056-ad9d-8052a332d6b9";
|
||||
$clientSecret="bf665590-2519-49af-8d1f-7cd0dce1dc7a";*/
|
||||
|
||||
|
||||
//CONTINENTAL CAPITAL DISBURSEMENTS
|
||||
$clientID="7f96ba01-2a74-4342-a50d-f0a36874f985";
|
||||
$clientSecret="d31861d6-125e-4c0f-a0b3-2bca7af3cad0";
|
||||
|
||||
//CEDAR DISBURSEMENTS
|
||||
//$clientID="0ffd5cef-40f6-4673-8620-9ace5c798364";
|
||||
//$clientSecret="15fdc659-1431-4536-8c95-4307857464ce";
|
||||
|
||||
//STOCK BROKERS DISBURSEMENTS [not approved]
|
||||
//$clientID="9ff18a6d-331e-4ec5-9ecc-4e512e13747c";
|
||||
//$clientSecret="40f44254-10e7-4eb8-b161-38125117f4ba";
|
||||
|
||||
|
||||
$res=authenticate($authURL, $clientID, $clientSecret);
|
||||
|
||||
if($res['success']){
|
||||
$bearerToken=$res['token'];
|
||||
|
||||
echo $bearerToken;
|
||||
|
||||
//send a payment request
|
||||
$payment = airtelDisbursement(
|
||||
$bearerToken,
|
||||
$subscriber_msisdn,
|
||||
$transaction_amount,
|
||||
'MSEMW',
|
||||
'IGbCqXwRoiqsHTIIjxfo6vWyzPMKg6iF3+pNQK6gTXbOyJgOd1bbPuIstTcMwSAiRXOgQrkRC0+sQU5wHF33aha+AL0TevBntLzVyGl8002ZXy6Ux4Pu+zymRdlw7J6H/PXRC2kXhbR2GIHLHlqHC49gu65OzpJ8fvpnscg1yjE=',
|
||||
uniqid('mse-')
|
||||
);
|
||||
|
||||
echo (json_encode($payment));
|
||||
//$data = json_decode($res, true);
|
||||
|
||||
/* Check if the response has a status and success flag
|
||||
if (isset($data['status']['success']) && $data['status']['success'] === true) {
|
||||
// Success case
|
||||
$transactionId = $data['data']['transaction']['id'];
|
||||
$transactionStatus = $data['data']['transaction']['status'];
|
||||
$message = $data['status']['message'];
|
||||
|
||||
echo "✅ Transaction Successful!\n";
|
||||
echo "Transaction ID: $transactionId\n";
|
||||
echo "Status: $transactionStatus\n";
|
||||
echo "Message: $message\n";
|
||||
} else {
|
||||
// Failure case
|
||||
$errorCode = $data['status']['result_code'] ?? 'N/A';
|
||||
$errorMessage = $data['status']['message'] ?? 'Unknown error';
|
||||
|
||||
echo "❌ Transaction Failed!\n";
|
||||
echo "Error Code: $errorCode\n";
|
||||
echo "Message: $errorMessage\n";
|
||||
}
|
||||
|
||||
*/
|
||||
}else{
|
||||
echo(json_encode($res));
|
||||
exit();
|
||||
}
|
||||
|
||||
|
||||
function airtelDisbursement(string $accessToken,string $msisdn,float $amount,string $reference,string $pin,string $transactionId,
|
||||
string $country = 'MW',string $currency = 'MWK',int $timeout = 30) {
|
||||
|
||||
$url = 'https://openapiuat.airtel.mw/standard/v1/disbursements/';
|
||||
|
||||
$payload = [
|
||||
"payee" => [
|
||||
"msisdn" => $msisdn
|
||||
],
|
||||
"reference" => $reference,
|
||||
"pin" => $pin,
|
||||
"transaction" => [
|
||||
"amount" => $amount,
|
||||
"id" => $transactionId
|
||||
]
|
||||
];
|
||||
file_put_contents('logs/requests.txt',json_encode($payload).PHP_EOL,FILE_APPEND);
|
||||
|
||||
$headers = [
|
||||
'Content-Type: application/json',
|
||||
'Accept: */*',
|
||||
'X-Country: ' . $country,
|
||||
'X-Currency: ' . $currency,
|
||||
'Authorization: Bearer ' . $accessToken
|
||||
];
|
||||
|
||||
$ch = curl_init($url);
|
||||
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_POST => true,
|
||||
CURLOPT_HTTPHEADER => $headers,
|
||||
CURLOPT_POSTFIELDS => json_encode($payload),
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_TIMEOUT => $timeout,
|
||||
CURLOPT_SSL_VERIFYPEER => true
|
||||
]);
|
||||
|
||||
$response = curl_exec($ch);
|
||||
$error = curl_error($ch);
|
||||
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
|
||||
curl_close($ch);
|
||||
|
||||
if ($error) {
|
||||
return [
|
||||
'success' => false,
|
||||
'error' => 'CURL_ERROR',
|
||||
'message' => $error
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'success' => ($code === 200),
|
||||
'http_code' => $code,
|
||||
'response' => json_decode($response, true),
|
||||
'raw' => $response
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
function sendUSSDPush($token, $data) {
|
||||
// Endpoint
|
||||
$url = "https://openapiuat.airtel.africa/merchant/v1/payments/";
|
||||
|
||||
// Initialize cURL
|
||||
$ch = curl_init($url);
|
||||
|
||||
// Set cURL options
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
"Authorization: Bearer " . $token,
|
||||
"Content-Type: application/json",
|
||||
"X-Country: MW",
|
||||
"X-Currency: MWK"
|
||||
]);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
|
||||
// Execute request
|
||||
$response = curl_exec($ch);
|
||||
|
||||
// Check for cURL errors
|
||||
if (curl_errno($ch)) {
|
||||
echo "cURL Error: " . curl_error($ch);
|
||||
curl_close($ch);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Close connection
|
||||
curl_close($ch);
|
||||
|
||||
// Decode and return response
|
||||
return $response;
|
||||
}
|
||||
|
||||
function changePassword($baseURL, $token,$newPassword, $newPasswordConfirmation) {
|
||||
// Endpoint URL
|
||||
$url = rtrim($baseURL, "/") . "/password";
|
||||
|
||||
// Prepare data
|
||||
$data = [
|
||||
"new_password" => $newPassword,
|
||||
"new_password_confirmation" => $newPasswordConfirmation
|
||||
];
|
||||
|
||||
// Initialize cURL
|
||||
$ch = curl_init($url);
|
||||
|
||||
// Set cURL options
|
||||
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH"); // PATCH request
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
"Authorization: Bearer " . $token,
|
||||
"Content-Type: application/json"
|
||||
]);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
|
||||
// Execute and capture response
|
||||
$response = curl_exec($ch);
|
||||
|
||||
// Check for errors
|
||||
if (curl_errno($ch)) {
|
||||
echo "cURL Error: " . curl_error($ch);
|
||||
curl_close($ch);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Close connection
|
||||
curl_close($ch);
|
||||
|
||||
// Decode JSON response
|
||||
return json_decode($response, true);
|
||||
}
|
||||
|
||||
function validate_msisdn($baseURL, $msisdn, $bearerToken)
|
||||
{
|
||||
// Ensure proper endpoint format
|
||||
$url = rtrim($baseURL, '/') . '/payments/validate/' . urlencode($msisdn);
|
||||
|
||||
// Initialize cURL
|
||||
$ch = curl_init($url);
|
||||
|
||||
// Set cURL options
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_HTTPGET, true);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
'Authorization: Bearer ' . $bearerToken,
|
||||
'Accept: application/json'
|
||||
]);
|
||||
|
||||
// Execute the request
|
||||
$response = curl_exec($ch);
|
||||
|
||||
// Handle cURL error
|
||||
if (curl_errno($ch)) {
|
||||
curl_close($ch);
|
||||
return [
|
||||
'success' => false,
|
||||
'error' => 'Curl error: ' . curl_error($ch)
|
||||
];
|
||||
}
|
||||
|
||||
// Get HTTP status code
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
// Decode JSON response
|
||||
$result = json_decode($response, true);
|
||||
|
||||
if ($httpCode === 200 && isset($result['data']['full_name'])) {
|
||||
return [
|
||||
'success' => true,
|
||||
'full_name' => $result['data']['full_name']
|
||||
];
|
||||
} else {
|
||||
return [
|
||||
'success' => false,
|
||||
'error' => $result['message'] ?? 'Unknown error',
|
||||
'details' => $result['errors'] ?? []
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function authenticate($baseURL, $wallet, $password)
|
||||
{
|
||||
// JSON payload
|
||||
$postData = json_encode([
|
||||
'client_id' => $wallet,
|
||||
'client_secret' => $password,
|
||||
'grant_type' => "client_credentials"
|
||||
]);
|
||||
|
||||
// Initialize cURL
|
||||
$ch = curl_init($baseURL);
|
||||
|
||||
// Set cURL options
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Return the response
|
||||
curl_setopt($ch, CURLOPT_POST, true); // Use POST method
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);// Set the request body
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
'Content-Type: application/json',
|
||||
'Content-Length: ' . strlen($postData)
|
||||
]);
|
||||
|
||||
// Execute the request
|
||||
$response = curl_exec($ch);
|
||||
|
||||
// Check for cURL errors
|
||||
if (curl_errno($ch)) {
|
||||
curl_close($ch);
|
||||
return [
|
||||
'success' => false,
|
||||
'error' => 'Curl error: ' . curl_error($ch)
|
||||
];
|
||||
}
|
||||
|
||||
// Get HTTP status code
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
// Decode JSON response
|
||||
$result = json_decode($response, true);
|
||||
|
||||
// Check if token is present
|
||||
if ($httpCode === 200 && isset($result['access_token'])) {
|
||||
return [
|
||||
'success' => true,
|
||||
'token' => $result['access_token']
|
||||
];
|
||||
} else {
|
||||
return [
|
||||
'success' => false,
|
||||
'error' => $result['error_description'] ?? 'Unknown error',
|
||||
'details' => $result['error'] ?? []
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user