<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\User\KycController;
use App\Http\Controllers\User\CardController;
use App\Providers\Admin\BasicSettingsProvider;
use Pusher\PushNotifications\PushNotifications;
use App\Http\Controllers\User\ProfileController;
use App\Http\Controllers\User\SecurityController;
use App\Http\Controllers\User\AddMoneyController;
use App\Http\Controllers\User\DashboardController;
use App\Http\Controllers\User\MerchantDetailsController;
use App\Http\Controllers\User\SupportTicketController;
use App\Http\Controllers\User\TransactionLogController;
use App\Http\Controllers\User\TransferMoneyController;
Route::prefix("user")->name("user.")->group(function(){
Route::controller(DashboardController::class)->group(function(){
Route::get('dashboard','index')->name('dashboard');
Route::post('logout','logout')->name('logout');
Route::post('check-valid-user','checkValidUser')->name('check.valid.email');
});
//profile
Route::controller(ProfileController::class)->prefix("profile")->name("profile.")->group(function(){
Route::get('/','index')->name('index');
Route::put('password/update','passwordUpdate')->name('password.update')->middleware(['app.mode']);
Route::put('update','update')->name('update')->middleware(['app.mode']);
Route::post('delete-account/{id}','deleteAccount')->name('delete')->middleware(['app.mode']);
});
//add money
Route::controller(AddMoneyController::class)->prefix('add-money')->name('add.money.')->group(function(){
Route::get('/','index')->name('index');
Route::post('confirm','confirm')->name('confirm');
Route::get('success/response/{gateway}','success')->name('payment.success');
Route::get("cancel/response/{gateway}",'cancel')->name('payment.cancel');
Route::post("callback/response/{gateway}",'callback')->name('payment.callback')->withoutMiddleware(['web','auth','kyc.verification.guard','verification.guard','user.google.two.factor']);
// POST Route For Unauthenticated Request
Route::post('success/response/{gateway}', 'postSuccess')->name('payment.success')->withoutMiddleware(['auth','kyc.verification.guard','verification.guard','user.google.two.factor']);
Route::post('cancel/response/{gateway}', 'postCancel')->name('payment.cancel')->withoutMiddleware(['auth','kyc.verification.guard','verification.guard','user.google.two.factor']);
// redirect with HTML form route
Route::get('redirect/form/{gateway}', 'redirectUsingHTMLForm')->name('payment.redirect.form')->withoutMiddleware(['auth','kyc.verification.guard','verification.guard','user.google.two.factor']);
//redirect with Btn Pay
Route::get('redirect/btn/checkout/{gateway}', 'redirectBtnPay')->name('payment.btn.pay')->withoutMiddleware(['auth','kyc.verification.guard','verification.guard','user.google.two.factor']);
Route::get('manual/{token}','showManualForm')->name('manual.form');
Route::post('manual/submit/{token}','manualSubmit')->name('manual.submit');
});
//transfer money
Route::controller(TransferMoneyController::class)->prefix('transfer-money')->name('transfer.money.')->middleware('kyc.verification.guard')->group(function(){
Route::get('/','index')->name('index');
Route::post('confirm','confirm')->name('confirm');
});
//merchant details
Route::controller(MerchantDetailsController::class)->prefix('merchant-details')->name('merchant.details.')->middleware('kyc.verification.guard')->group(function(){
Route::get('/','index')->name('index');
Route::post('update/{id}','update')->name('update');
Route::post('payment-configuration-update/{id}','paymentConfiguartionUpdate')->name('payment.configuration.update');
Route::put('status-update','statusUpdate')->name('api.keys.update');
});
//payment method
Route::controller(CardController::class)->prefix('card')->name('card.')->middleware('kyc.verification.guard')->group(function(){
Route::get('/','index')->name('index');
Route::post('store','store')->name('store');
Route::post('delete/{slug}','delete')->name('delete');
Route::get('make-default/{slug}','makeDefault')->name('make.default');
Route::post('search','search')->name('search');
});
//transaction logs
Route::controller(TransactionLogController::class)->prefix('transaction')->name('transaction.log.')->group(function(){
Route::get('add-money','addMoney')->name('add.money');
Route::get('transfer-money','transferMoney')->name('transfer.money');
Route::get('card-payment','cardPayment')->name('card.payment');
Route::post('search','search')->name('search');
});
Route::controller(SupportTicketController::class)->prefix("support-ticket")->name("support.ticket.")->group(function () {
Route::get('/', 'index')->name('index');
Route::get('create', 'create')->name('create');
Route::post('store', 'store')->name('store');
Route::get('conversation/{encrypt_id}','conversation')->name('conversation');
Route::post('message/send','messageSend')->name('messaage.send');
});
Route::controller(SecurityController::class)->prefix("security")->name('security.')->group(function(){
Route::get('google/2fa','google2FA')->name('google.2fa');
Route::post('google/2fa/status/update','google2FAStatusUpdate')->name('google.2fa.status.update');
});
Route::controller(KycController::class)->prefix('kyc')->name('kyc.')->group(function() {
Route::get('/','index')->name('index');
Route::post('submit','store')->name('submit');
});
});
Route::get('/user/card/{id}/transactions', [DashboardController::class,'getTransactionsByCard']);
// Route For Pusher Beams Auth
Route::get('user/pusher/beams-auth', function (Request $request) {
if(Auth::check() == false) {
return response(['Inconsistent request'], 401);
}
$userID = Auth::user()->id;
$basic_settings = BasicSettingsProvider::get();
if(!$basic_settings) {
return response('Basic setting not found!', 404);
}
$notification_config = $basic_settings->push_notification_config;
if(!$notification_config) {
return response('Notification configuration not found!', 404);
}
$instance_id = $notification_config->instance_id ?? null;
$primary_key = $notification_config->primary_key ?? null;
if($instance_id == null || $primary_key == null) {
return response('Sorry! You have to configure first to send push notification.', 404);
}
$beamsClient = new PushNotifications(
array(
"instanceId" => $notification_config->instance_id,
"secretKey" => $notification_config->primary_key,
)
);
$get_full_host_path = remove_special_char(get_full_url_host(), "-");
$publisherUserId = $get_full_host_path . "-user-".$userID;
try{
$beamsToken = $beamsClient->generateToken($publisherUserId);
}catch(Exception $e) {
return response(['Server Error. Failed to generate beams token.'], 500);
}
return response()->json($beamsToken);
})->name('user.pusher.beams.auth');
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"
}