refactoring, airtelmoney test

This commit is contained in:
Kwesi Banson Jnr
2025-11-17 18:39:10 +00:00
parent d8164b3139
commit 54edafc9e7
34 changed files with 2811 additions and 27 deletions

View File

@@ -1,20 +1,233 @@
<?php
namespace App\Http\Controllers;
use App\Http\Requests;
use Illuminate\Http\Request;
// Requests\CollectPaymentsRequest
use App\Models;
// use App\Library\Kazang;
use App\Library\AirtelMoneyMw;
use App\Library\MpambaTnm;
use Carbon\Carbon;
use Config;
// Requests\CollectPaymentsRequest //
class MoneyCollectionController extends Controller
{
public function Collect(Requests\CollectPaymentsRequest $request)
{
{
public function collectTest(Request $request){
return response()->json(['code' => 1, 'data' => json_decode($request->all())]);
}
public function CollectFirst(Requests\CollectPaymentsRequest $request, Kazang $kazang){
$current_date = date('Y-m-d');
// Todo : check network and call appropriate endpoint to initiate payment
//$session_uuid = $this->getSessionUuid($kazang);
$endpoint = $this->getEnpoint($request->product_name);
// dd($endpoint);
//TODO : find a way to dynamically retrieve Product ID from the list
#$product_list = $this->getProductIDs($session_uuid);
// {
// "msisdn", "amount", "refID",
// product_name
return response()->json(['code' => 1]);
// dd($product_list);
if ($endpoint !== false) {
$session_uuid = $this->getSessionUuid($kazang);
// send step 1 request here
$transaction_params = [
'session_uuid' => $session_uuid,
'request_reference' => substr(time(), 0, 9), // add a reference from the transactions table
'product_id' => $endpoint['productid'],
'wallet_msisdn' => $request->msisdn,
'routem_client_reference' => $request->refID,
'amount' => $request->amount
];
$saveTransaction = Models\KazangTransaction::create($transaction_params);
if ($saveTransaction == false) {
// code... return to sender
}
$curl_params = [
'session_uuid' => $session_uuid,
'request_reference' => substr(time(), 0, 9), // add a reference from the transactions table
'product_id' => $endpoint['productid'],
'routem_client_reference' => $request->refID,
'amount' => $request->amount
];
if ($request->product_name == 'zamtel_money') {
$curl_params['msisdn'] = $request->msisdn;
}
else{
$curl_params['wallet_msisdn'] = $request->msisdn;
}
$retval = $this->globalCurlPost($endpoint['url'], $curl_params);
$transaction = Models\KazangTransaction::find($saveTransaction->id);
// dd($retval);
// return response()->json(['code' => 1, 'msg' => 'success', 'data' => json_decode($retval)]);
$retval = json_decode($retval, true);
file_put_contents(public_path("logs/" . $current_date . "_api_response_logs.txt"), json_encode($retval) . PHP_EOL, FILE_APPEND);
$transaction->response_code = $retval['response_code'];
$transaction->balance = $retval['balance'];
if (isset($retval['supplier_transaction_id'])) {
$transaction->supplier_transaction_id = $retval['supplier_transaction_id'];
}
if (isset($retval['confirmation_number'])) {
$transaction->confirmation_number = $retval['confirmation_number'];
}
if (isset($retval['confirmation_message'])) {
$transaction->confirmation_message = $retval['confirmation_message'];
}
$transaction->save();
if ($request->product_name == 'mtn_momo_zambia') {
//TODO : check response_code = "0"
if ($retval['response_code'] == "0") {
$data = ['reference_id' => $request->refID, 'supplier_transaction_id' => $retval['supplier_transaction_id'], 'response_message' => $retval['response_message']];
return response()->json(['code' => 1, 'msg' => 'success', 'data' => $data]);
}
else{
return response()->json(['code' => 3, 'msg' => $retval['response_message']]);
}
}
else{
if ($retval['response_code'] == "0") {
$data = ['reference_id' => $request->refID, 'confirmation_number' => $retval['confirmation_number'], 'confirmation_message' => $retval['confirmation_message']];
return response()->json(['code' => 1, 'msg' => 'success', 'data' => $data]);
}
else{
return response()->json(['code' => 3, 'msg' => $retval['$confirmation_message']]);
}
}
//Airtel : confirmation_number
/*
MTN
"data": {
"wallet_msisdn": "+260981112134",
"amount": "0.05",
"request_reference": "167079990",
"response_code": "0",
"balance": "20490.05",
"supplier_transaction_id": "52878",
"response_message": "\r\n********************************\r\n KAZANG \r\n********************************\r\n MOMO Pay Step 1 \r\n--------------------------------\r\n 2022-12-12 01:05 \r\n Pending Payment Created \r\n--------------------------------\r\n API V2 Test - Zambia \r\nVendor: 1000631438\r\nMTN Phone No.: 260981112134\r\nReference: 4458\r\n--------------------------------\r\n MTN Reference \r\n<b> 5287 8 \n\r\n--------------------------------\r\nAmount: 0.05\r\n--------------------------------\r\n A pending transaction has been \ncreated. Please approve on your \nmobile device. Keep this receipt\n to prove payment to the vendor \n after approval. \r\n--------------------------------\r\n Thank you! "
}
Airtel
"data": {
"wallet_msisdn": "978981953",
"confirmation_number": "333366",
"request_reference": "167079973",
"customer_last_name": "Picard",
"response_code": "0",
"amount": "0.05",
"confirmation_message": "\nPlease confirm\nCust. Msisdn: +260978981953\nCust. First Name: Jean-Luc\nCust. Last name: Picard\nAmount: 0.05\n\n\n\n",
"customer_first_name": "Jean-Luc",
"balance": "20490.05"
}
Zamtel
"data": {
"customer_last_name": "killian",
"confirmation_number": "333360",
"request_reference": "167079058",
"msisdn": "+260981112134",
"response_code": "0",
"amount": "0.05",
"confirmation_message": "\nPlease confirm\nCust. Msisdn: +260981112134\nAmount: 0.05\n\nCustomer Details\nName: aaa\nSurname: killian\nID Number: 1234567\n\n\n\n\n\n",
"customer_first_name": "aaa",
"customer_id_number": "1234567",
"balance": "20490.05"
}
*/
return response()->json(['code' => 1, 'data' => json_decode($retval)]);
}
return response()->json(['code' => 3, 'msg' => 'Your request could not handled at this time']);
}
public function Collect(Requests\CollectPaymentsRequest $request){
$current_date = date('Y-m-d');
// Todo : check network and call appropriate endpoint to initiate payment
// log request
// check broker
// check payment mode
// use payment mode pay logic to respond
#$endpoint = $this->getEnpoint($request->product_name);
// dd($endpoint);
//TODO : find a way to dynamically retrieve Product ID from the list
#$product_list = $this->getProductIDs($request->product_name);
return response()->json(['code' => 1, 'data' => json_decode($product_list)]);
return response()->json(['code' => 3, 'msg' => 'Your request could not handled at this time', 'endpoint' => $endpoint]);
}
public function getSessionUuid($kazang){
$kas_session = Models\KazangSession::find(1);
if ($kas_session) {
$current_time = date('Y-m-d H:i:s');
$to = Carbon::createFromFormat('Y-m-d H:s:i', $kas_session->updated_at);
$from = Carbon::createFromFormat('Y-m-d H:s:i', $current_time);
$diff_in_minutes = $to->diffInMinutes($from);
// dd($diff_in_hours);
if ($diff_in_minutes <= 60) {
$session_uuid = $kas_session->session_uuid;
return $session_uuid;
}
else{
$session_uuid = $kazang->login();
$kas_session->session_uuid = $session_uuid;
$kas_session->save();
return $session_uuid;
}
}
else {
$session_uuid = $kazang->login();
$kas_session->session_uuid = $session_uuid;
$kas_session->save();
return $session_uuid;
}
}
public function getEnpoint($product_name){
$kazang = Config('kazang');
$kaz_host = $kazang['test_base_url'];
//TODO : remove the hardcoded productIDs
switch ($product_name) {
case 'airtel_money_zambia':
$productID = 1663;
$endpoint = "$kaz_host/apimanager/api_rest/v1/airtelPayPayment";
break;
case 'mtn_momo_zambia':
$productID = 1612;
$endpoint = "$kaz_host/apimanager/api_rest/v1/mtnDebit";
break;
case 'zamtel_money':
$productID = 1706;
$endpoint = "$kaz_host/apimanager/api_rest/v1/zamtelMoneyPay";
break;
default:
return false;
break;
}
return ['productid' => $productID, 'url' => $endpoint];
}
public function getProductIDs($product_name){
$product = Models\Product::where('name', $product_name)->first();
return $product;
}
public function getProductIDsFirst($session_uuid){
$params = [
"request_reference" => 31000,
"session_uuid" => $session_uuid
];
$kazang = Config('kazang');
$kaz_host = $kazang['test_base_url'];
$url = "$kaz_host/apimanager/api_rest/v1/productList";
$retval = $this->globalCurlPost($url, $params);
return $retval;
}
}
//b1d7d86b-8906-4a24-bb8d-268b085d539c