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); // 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 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' => $request->all()]); 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