inital commit

This commit is contained in:
2026-06-24 18:29:01 +06:00
commit f401802bf7
3918 changed files with 553085 additions and 0 deletions

View File

@@ -0,0 +1,247 @@
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Models\Recurring;
use App\Models\Sale;
use App\Models\User;
use App\Services\ClientService;
use App\Services\Package;
use App\Services\Payment\GateWay;
use App\Services\Payment\Payment;
use App\Services\PaymentService;
use App\Utility\Email;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
use App\Http\Requests\PaymentSettingRequest;
use App\Utility\ActionLogCreate;
use Illuminate\Support\Facades\Cookie;
class PaymentController extends Controller
{
public function paymentSetting(PaymentSettingRequest $request)
{
$message = "Can not update card number.";
$type = 'error';
$status_code = config('constant.API_FAILED_CODE');
$inputData = $request->all();
$inputData['save_card'] = request('save_card', 0);
$inputData['clear_card'] = request('clear_card', 0);
$action = 'PAYMENT_SETTING';
$inputData['user'] = auth()->user();
$inputData['ip'] = request()->getClientIp(true);
$requestData = $this->prepareData($inputData);
try {
$findData['user_id'] = $requestData['user_id'];
$findData['status'] = 1;
$recurringData = (new Recurring())->getRecurringByUserId($findData);
if(!empty($recurringData)) {
// $package = new Package();
// $package->makePayments($requestData);
$deleteRecurringData['email'] = $requestData['email'];
$deleteRecurringData['subscription_id'] = $recurringData['subscription_id'];
$deleteRecurringResponse = (new Package())->deleteRecurringPackage($deleteRecurringData);
if ($deleteRecurringResponse['status_code'] == config('constant.API_SUCCESS_CODE')) {
$updateRecurring['status'] = 2;
$recurringData->update($updateRecurring);
$recurringResponse = (new Package())->recurringPackage($requestData);
if($recurringResponse['status_code'] == config('constant.API_SUCCESS_CODE')) {
Auth::user()->update([
'subscription_status' => config('constant.SUBSCRIPTION_STATUS.SUBSCRIBED'),
'last_payment_date' => getCurrentDateTime(),
'user_access_end_date' => getDateAfterSpicificDay(getCurrentDateTime(),config('constant.PAYMENT_INTERVAL_DAY'))
]);
$message = "Card number has been updated successful.";
$status_code = config('constant.API_SUCCESS_CODE');
$type = 'success';
}
}
}else{
$onetimePayment = (new PaymentService())->makePayment($requestData);
if($onetimePayment['status']) {
// for recurring
$recurringResponse = (new Package())->recurringPackage($requestData);
$this->updateUser($requestData);
$message = "Payment and Card number has been updated successful.";
$status_code = config('constant.API_SUCCESS_CODE');
$type = 'success';
}
}
}catch (\Exception $ex){
$message = "Can not update card number.";
$status_code = config('constant.API_FAILED_CODE');
}
if ($status_code == config('constant.API_SUCCESS_CODE')) {
$this->updateCookies($inputData);
$message = "Card number has been updated successful.";
$type = 'success';
}
ActionLogCreate::logDataCreate($action, $this->prepareLog($inputData), $message, "", $status_code);
return back()->with([$type => $message]);
}
public function subscriptionUpdateByCronJob()
{
$recurringData = (new Recurring())->getRecurringDataForScheduler();
if(!empty($recurringData)) {
foreach ($recurringData as $recurring) {
$logData['action_by_subscription_id_start'] = "CLIENT_SUBSCRIPTION_UPDATE_START";
$paymentData = [];
$paymentData['subscription_id'] = $recurring['subscription_id'];
$response = (new Payment(GateWay::getGateWayInstance(config('constant.PAYMENT_GATEWAY.NMI')), $paymentData))->getSubscriptionInfoBySubscriptionId();
if (!empty($response['data']) && array_key_exists(0,$response['data'])) {
$search_data_by_date = [];
$current_date = getCurrentDate();
// $current_date ='2023-03-02';
foreach ($response['data'] as $item) {
if($item['condition'] == 'complete' && array_key_exists(0,$item['action']))
{
$dtr = getStringToDateTime($item['action'][0]['date'], 'Y-m-d');
if($dtr >= $current_date)
{
$search_data_by_date = $item;
break;
}
}
}
if(!empty($search_data_by_date)) {
$logData_subscription['action_by_subscription_start'] = "CLIENT_SUBSCRIPTION_START";
// user update
$user_input['last_payment_date'] = getCurrentDateTime();
$user_input['subscription_status'] = config('constant.SUBSCRIPTION_STATUS.SUBSCRIBED');
$user_input['status'] = config('constant.SUBSCRIPTION_STATUS.SUBSCRIBED');
$return_data = (new User())->userupdate($user_input, $recurring['user_id']);
// recurring update
$recurring_input['last_process_date'] = getCurrentDateTime();
$recurring->update($recurring_input);
// sales insert
$salesData['order_id'] = $search_data_by_date['order_id'];
$salesData['cc_number'] = $search_data_by_date['cc_number'];
$salesData['status'] = "1";
$salesData['auth_code'] = '';
$salesData['transaction_id'] = $search_data_by_date['transaction_id'];
$salesData['ip'] = getClientIpAddress();
$salesData['user_id'] = $recurring['user_id'];
$salesData['recurring_id'] = $recurring['id'];
(new Sale())->createSale($salesData);
$logData_subscription['action_by_subscription_end'] = "CLIENT_SUBSCRIPTION_END";
appLog($logData_subscription);
}
}
$logData['status_code'] = $response['status_code'];
$logData['message'] = $response['message'];
$logData['inputData'] = $recurring;
$logData['action_by_subscription_id_end'] = "CLIENT_SUBSCRIPTION_UPDATE_END";
appLog($logData);
}
}
}
private function prepareData($inputData): array
{
$user_info = $inputData['user'];
$amount=0;
$prepareData['user_id'] = $user_info->id;
$prepareData['password']=customDecrypt($user_info->password);
$prepareData['first_name'] = $user_info['first_name'];
$prepareData['last_name'] = $user_info['last_name'];
$prepareData['wave']=$user_info->wave;
$prepareData['last_payment_date']=$user_info->last_payment_date;
$prepareData['company'] = $user_info['company'] ?? config('app.name');
$prepareData['street_no'] = $user_info['street_no'];
$prepareData['street_name'] = $user_info['street_name'];
$prepareData['city'] = $user_info['city'];
$prepareData['state'] = $user_info['state'];
$prepareData['zip_code'] = $user_info['zip_code'];
$prepareData['country'] = $user_info['country'] ?? 'US';
$prepareData['phone'] = $user_info['phone'];
$prepareData['fax'] = $user_info['fax'] ?? "";
$prepareData['email'] = $user_info['email'];
$prepareData['website'] = $user_info['website'] ?? "";
$prepareData['tax'] = 1;
$prepareData['shipping'] = 1;
$prepareData['ponumber'] = "PO1234";
$prepareData['ip'] = $inputData['ip'];
$prepareData['amount'] = "24.97";
$prepareData['card_number'] = $inputData['card_number'];
$prepareData['expiry'] = $inputData['expiry'];
return $prepareData;
}
private function updateCookies($inputData)
{
$user_id = $inputData['user']->id;
if ($inputData['save_card'] == 1) {
setCache('card_' . $user_id, $inputData['card_number']);
setCache('expiration_' . $user_id, $inputData['expiry']);
setCache('cvv_' . $user_id, $inputData['cvv']);
}
if ($inputData['clear_card'] == 1) {
unsetCache('card_' . $user_id);
unsetCache('expiration_' . $user_id);
unsetCache('cvv_' . $user_id);
}
}
private function prepareLog($inputData)
{
$outputData['_token'] = $inputData['_token'];
$outputData['card_number'] = $inputData['card_number'];
$outputData['expiry'] = $inputData['expiry'];
$outputData['cvv'] = $inputData['cvv'];
$outputData['email'] = $inputData['user']['email'];
if (!empty($outputData['card_number'])) {
$outputData['card_number'] = creditCardNumberMasking($outputData['card_number']);
}
return $outputData;
}
private function updateUser($inputData)
{
$updateUserData['is_import'] = 1;
$updateUserData['subscription_status'] = 1;
$updateUserData['wave'] = 1;
$updateUserData['last_payment_date'] = getCurrentDateTime();
$updateUserData['user_access_end_date'] = getDateAfterSpicificDay(getCurrentDateTime(),config('constant.PAYMENT_INTERVAL_DAY'));
(new User())->userupdate($updateUserData,$inputData['user_id']);
}
}