<?php
namespace App\Http\Controllers\Admin;
use Exception;
use App\Models\UserWallet;
use App\Models\Transaction;
use Illuminate\Http\Request;
use App\Http\Helpers\Response;
use App\Models\UserNotification;
use App\Models\TransactionDevice;
use App\Models\Admin\BasicSettings;
use App\Http\Controllers\Controller;
use App\Constants\PaymentGatewayConst;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Notification;
use App\Notifications\Admin\AddMoneyEmailNotification;
class AddMoneyLogsController extends Controller
{
/**
* Method for view add money logs
* @return view
*/
public function index(){
$page_title = "Add Money Logs";
$transactions = Transaction::with(['payment_gateway'])
->where('type',PaymentGatewayConst::TYPEADDMONEY)
->orderBy('id','desc')->paginate(15);
return view('admin.sections.add-money-logs.index',compact(
'page_title',
'transactions'
));
}
/**
* Method for view add money pending logs
* @return view
*/
public function pending(){
$page_title = "Add Money Pending Logs";
$transactions = Transaction::with(['payment_gateway'])
->where('type',PaymentGatewayConst::TYPEADDMONEY)
->where('status',PaymentGatewayConst::STATUSPENDING)
->orderBy('id','desc')->paginate(15);
return view('admin.sections.add-money-logs.pending',compact(
'page_title',
'transactions'
));
}
/**
* Method for view add money confirm logs
* @return view
*/
public function confirm(){
$page_title = "Add Money Confirm Logs";
$transactions = Transaction::with(['payment_gateway'])
->where('type',PaymentGatewayConst::TYPEADDMONEY)
->where('status',PaymentGatewayConst::STATUSSUCCESS)
->orderBy('id','desc')->paginate(15);
return view('admin.sections.add-money-logs.confirm',compact(
'page_title',
'transactions'
));
}
/**
* Method for view add money reject logs
* @return view
*/
public function reject(){
$page_title = "Add Money Reject Logs";
$transactions = Transaction::with(['payment_gateway'])
->where('type',PaymentGatewayConst::TYPEADDMONEY)
->where('status',PaymentGatewayConst::STATUSREJECTED)
->orderBy('id','desc')->paginate(15);
return view('admin.sections.add-money-logs.reject',compact(
'page_title',
'transactions'
));
}
/**
* Method for transfer money confirm logs
* @return view
*/
public function details($trx_id){
$page_title = "Add Money Log Details";
$transaction = Transaction::with(['payment_gateway'])->where('trx_id',$trx_id)->first();
$transaction_device = TransactionDevice::where('transaction_id',$transaction->id)->first();
if(!$transaction) return back()->with(['error' => ['Sorry! Data not found.']]);
return view('admin.sections.add-money-logs.details',compact(
'page_title',
'transaction',
'transaction_device'
));
}
/**
* Method for search all log
*/
public function search(Request $request) {
$validator = Validator::make($request->all(),[
'text' => 'required|string',
]);
if($validator->fails()) {
$error = ['error' => $validator->errors()];
return Response::error($error,null,400);
}
$validated = $validator->validate();
$transactions = Transaction::where('type',PaymentGatewayConst::TYPEADDMONEY)
->search($validated['text'])->get();
return view('admin.components.data-table.add-money-table',compact('transactions'));
}
/**
* Method for update the transaction status from pending to success
* @param Illuminate\Http\Request $request, $trx_id
*/
public function statusConfirm(Request $request, $trx_id){
$basic_setting = BasicSettings::first();
$validator = Validator::make($request->all(),[
'status' => 'required|integer',
]);
if($validator->fails()) {
$errors = ['error' => $validator->errors() ];
return Response::error($errors);
}
$validated = $validator->validate();
$transaction = Transaction::with('payment_gateway')->where('trx_id',$trx_id)->first();
try{
$transaction->update([
'status' => $validated['status'],
]);
if($basic_setting->email_notification == true){
Notification::route("mail",$transaction->user->email)->notify(new AddMoneyEmailNotification($transaction));
}
UserNotification::create([
'user_id' => $transaction->user->id,
'transaction_id' => $transaction->id,
'details' => [
'title' => 'Add Money Request',
'amount' => $transaction->request_amount,
'currency' => $transaction->request_currency,
'message' => "Successfully placed."
],
]);
$user_wallet = UserWallet::where('user_id',$transaction->user->id)->first();
if(!$user_wallet) return back()->with(['error' => ['Sorry! Wallet not found.']]);
$user_wallet->update([
'balance' => $user_wallet->balance + $transaction->request_amount,
]);
}catch(Exception $e){
return back()->with(['error' => ['Something went wrong! Please try again.']]);
}
return back()->with(['success' => ['Transaction Status updated successfully']]);
}
/**
* Method for update the transaction status from pending to rejected.
* @param Illuminate\Http\Request $request, $trx_id
*/
public function statusRejected(Request $request, $trx_id){
$basic_setting = BasicSettings::first();
$validator = Validator::make($request->all(),[
'status' => 'required|integer',
'reject_reason' => 'required',
]);
if($validator->fails()) {
$errors = ['error' => $validator->errors() ];
return Response::error($errors);
}
$validated = $validator->validate();
$transaction = Transaction::with('payment_gateway')->where('trx_id',$trx_id)->first();
try{
$transaction->update([
'status' => $validated['status'],
'reject_reason' => $validated['reject_reason']
]);
if($basic_setting->email_notification == true){
Notification::route("mail",$transaction->user->email)->notify(new AddMoneyEmailNotification($transaction));
}
UserNotification::create([
'user_id' => $transaction->user->id,
'transaction_id' => $transaction->id,
'details' => [
'title' => 'Add Money Request',
'amount' => $transaction->request_amount,
'currency' => $transaction->request_currency,
'message' => "Rejected."
],
]);
}catch(Exception $e){
return back()->with(['error' => ['Something went wrong! Please try again.']]);
}
return back()->with(['success' => ['Transaction Rejected.']]);
}
}
Initiates a new payment transaction.
create-order
| Parameter | Type | Details |
|---|---|---|
| amount | decimal | Your Amount , Must be rounded at 2 precision. |
| currency | string | Currency Code, Must be in Upper Case (Alpha-3 code) |
| success_url | string | Enter your return or success URL |
| cancel_url | string (optional) | Enter your cancel or failed URL |
Request Example (guzzle)
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', $base_url.'create-order', [
'headers' => [
'Authorization' => 'Bearer '. $authorizationToken,
'accept' => 'application/json',
'content-type' => 'application/json',
],
'form_params' => [
'amount' => '$amount',
'currency' => 'currency',
'success_url' => 'success_url',
'cancel_url' => 'cancel_url',
],
]);
echo $response->getBody();
**Response: SUCCESS (200 OK)**
{
"message": {
"success": [
"Order created successfully."
]
},
"data": {
"redirect_url":"https://example.com/login/OISADFDFSDFSF",
"order_details":{
"amount" : "10",
"fixed_charge" : 2,
"percent_charge" : 1,
"total_charge" : 3,
"total_payable" : 13,
"currency" : "USD",
"expiry_time": "2024-04-25T06:48:35.984285Z",
"success_url": "http://127.0.0.1/nfcpay/user/transaction/success",
"cancel_url": "http://127.0.0.1/nfcpay/user/transaction/cancel"
}
},
"type": "success"
}
**Response: ERROR (400 FAILED)**
{
"message": {
"error": [
"Invalid token."
]
},
"data": null,
"type": "error"
}