<?php
namespace App\Http\Controllers\Admin;
use Exception;
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 App\Notifications\Admin\CardMethodConfirmLogEmailNotification;
use App\Notifications\Admin\CardMethodRejectLogEmailNotification;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Notification;
class PaymentLogsController extends Controller
{
/**
* Method for all card method logs
* @return view
*/
public function index(){
$page_title = "All Logs";
$transactions = Transaction::where('type',PaymentGatewayConst::CARD_PAYMENT)
->whereNot('status',PaymentGatewayConst::STATUSTEST)
->orderBy('id','desc')->paginate(10);
return view('admin.sections.payment-logs.index',compact(
'page_title',
'transactions'
));
}
/**
* Method for pending card method logs
* @return view
*/
public function pending(){
$page_title = "Pending Logs";
$transactions = Transaction::where('type',PaymentGatewayConst::CARD_PAYMENT)
->where('status',PaymentGatewayConst::STATUSPENDING)
->orderBy('id','desc')->paginate(10);
return view('admin.sections.payment-logs.pending',compact(
'page_title',
'transactions'
));
}
/**
* Method for complete card method logs
* @return view
*/
public function complete(){
$page_title = "Confirm Logs";
$transactions = Transaction::where('type',PaymentGatewayConst::CARD_PAYMENT)
->where('status',PaymentGatewayConst::STATUSSUCCESS)
->orderBy('id','desc')->paginate(10);
return view('admin.sections.payment-logs.complete',compact(
'page_title',
'transactions'
));
}
/**
* Method for rejected card method logs
* @return view
*/
public function rejected(){
$page_title = "Rejected Logs";
$transactions = Transaction::where('type',PaymentGatewayConst::CARD_PAYMENT)
->where('status',PaymentGatewayConst::STATUSREJECTED)
->orderBy('id','desc')->paginate(10);
return view('admin.sections.payment-logs.rejected',compact(
'page_title',
'transactions'
));
}
/**
* Method for view test card method logs
* @return view
*/
public function test(){
$page_title = "Test Logs";
$transactions = Transaction::where('type',PaymentGatewayConst::CARD_PAYMENT)
->where('status',PaymentGatewayConst::STATUSTEST)
->orderBy("id","desc")->paginate(10);
return view('admin.sections.payment-logs.test',compact(
'page_title',
'transactions'
));
}
/**
* Method for view card method log details page
* @return view
* @param $trx_id
*/
public function details($trx_id){
$page_title = "Payment Log Details";
$transaction = Transaction::with(['card_method','user_wallet'])->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.payment-logs.details',compact(
'page_title',
'transaction',
'transaction_device'
));
}
/**
* Method for update status
* @param $trx_id
* @param Illuminate\Http\Request $request
*/
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('card_payment_method')->where('trx_id',$trx_id)->first();
try{
$transaction->update([
'status' => $validated['status'],
]);
$form_data = [
'data' => $transaction,
'status' => "Confirm",
];
if($basic_setting->email_notification == true){
Notification::route("mail",$transaction->user->email)->notify(new CardMethodConfirmLogEmailNotification($form_data));
}
UserNotification::create([
'user_id' => $transaction->user->id,
'transaction_id' => $transaction->id,
'details' => [
'title' => 'Your Order',
'amount' => $transaction->request_amount,
'currency' => $transaction->request_currency,
'card_number' => $transaction->card_payment_method->card_number,
'message' => "Successfully placed."
],
]);
}catch(Exception $e){
return back()->with(['error' => ['Something went wrong! Please try again.']]);
}
return back()->with(['success' => ['Transaction Status updated successfully']]);
}
/**
* Method for reject transaction
* @param $trx_id
* @param \Illuminate\Http\Request $request
*/
public function statusRejected(Request $request,$trx_id){
$basic_setting = BasicSettings::first();
$validator = Validator::make($request->all(),[
'reject_reason' => 'required',
'status' => 'required|integer',
]);
if($validator->fails()) {
$errors = ['error' => $validator->errors() ];
return Response::error($errors);
}
$validated = $validator->validate();
$transaction = Transaction::with('card_payment_method')->where('trx_id',$trx_id)->first();
try{
$transaction->update([
'status' => $validated['status'],
'reject_reason' => $validated['reject_reason']
]);
$form_data = [
'data' => $transaction,
'status' => "Reject",
];
if($basic_setting->email_notification == true){
Notification::route("mail",$transaction->user->email)->notify(new CardMethodRejectLogEmailNotification($form_data));
}
UserNotification::create([
'user_id' => $transaction->user->id,
'transaction_id' => $transaction->id,
'details' => [
'title' => 'Your Order',
'amount' => $transaction->request_amount,
'currency' => $transaction->request_currency,
'card_number' => $transaction->card_payment_method->card_number,
'message' => "Successfully placed."
],
]);
}catch(Exception $e){
return back()->with(['error' => ['Something went wrong! Please try again.']]);
}
return back()->with(['success' => ['Transaction Rejected successfully']]);
}
/**
* 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::CARD_PAYMENT)
->search($validated['text'])->get();
return view('admin.components.search.all-log-search',compact('transactions'));
}
/**
* Method for search pending log
*/
public function searchPending(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::CARD_PAYMENT)
->where('status',PaymentGatewayConst::STATUSPENDING)
->search($validated['text'])
->get();
return view('admin.components.search.all-log-search',compact('transactions'));
}
/**
* Method for search confirm log
*/
public function searchComplete(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::CARD_PAYMENT)
->where('status',PaymentGatewayConst::STATUSSUCCESS)
->search($validated['text'])
->get();
return view('admin.components.search.all-log-search',compact('transactions'));
}
/**
* Method for search confirm log
*/
public function searchReject(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::CARD_PAYMENT)
->where('status',PaymentGatewayConst::STATUSREJECTED)
->search($validated['text'])
->get();
return view('admin.components.search.all-log-search',compact('transactions'));
}
}
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"
}