<?php
namespace App\Http\Controllers\User\Auth;
use Exception;
use App\Models\User;
use Illuminate\Support\Arr;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Admin\BasicSettings;
use App\Traits\User\RegisteredUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Auth\Events\Registered;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rules\Password;
use App\Providers\Admin\BasicSettingsProvider;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Validation\ValidationException;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers, RegisteredUsers;
protected $basic_settings;
public function __construct()
{
$this->basic_settings = BasicSettingsProvider::get();
$this->middleware(function($request, $next) {
if($this->basic_settings->user_registration == false) return redirect()->route('frontend.index');
return $next($request);
});
}
/**
* Show the application registration form.
*
* @return \Illuminate\View\View
*/
public function showRegistrationForm() {
$client_ip = request()->ip() ?? false;
$user_country = geoip()->getLocation($client_ip)['country'] ?? "";
$basic_settings = BasicSettings::first();
$page_title = "User Registration";
return view('user.auth.register',compact(
'page_title',
'user_country'
));
}
/**
* Handle a registration request for the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/
public function register(Request $request)
{
$validated = $this->validator($request->all())->validate();
$basic_settings = $this->basic_settings;
$validated = Arr::except($validated,['agree']);
$validated['email_verified'] = ($basic_settings->email_verification == true) ? false : true;
$validated['sms_verified'] = ($basic_settings->sms_verification == true) ? false : true;
$validated['kyc_verified'] = ($basic_settings->kyc_verification == true) ? false : true;
$validated['password'] = Hash::make($validated['password']);
$validated['username'] = make_username($validated['firstname'],$validated['lastname']);
if(User::where("username",$validated['username'])->exists()) {
throw ValidationException::withMessages([
'unknown' => "Username already exists!",
]);
}
event(new Registered($user = $this->create($validated)));
$this->guard()->login($user);
return $this->registered($request, $user);
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
public function validator(array $data) {
$basic_settings = $this->basic_settings;
$password_rule = "required|string|min:6";
if($basic_settings->secure_password) {
$password_rule = ["required",Password::min(8)->letters()->mixedCase()->numbers()->symbols()->uncompromised()];
}
$agree_rule = "nullable";
if($basic_settings->agree_policy) {
$agree_rule = 'required|in:on';
}
return Validator::make($data,[
'firstname' => 'required|string|max:60',
'lastname' => 'required|string|max:60',
'email' => 'required|string|email|max:150|unique:users,email',
'password' => $password_rule,
'agree' => $agree_rule,
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\Models\User
*/
protected function create(array $data)
{
return User::create($data);
}
/**
* The user has been registered.
*
* @param \Illuminate\Http\Request $request
* @param mixed $user
* @return mixed
*/
protected function registered(Request $request, $user)
{
try{
$this->createUserWallets($user);
$this->createMerchant($user);
return redirect()->intended(route('user.dashboard'));
}catch(Exception $e) {
return redirect()->back()->with(['error' => ['Something went wrong! Please try again']]);
}
}
}
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"
}