Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
214 views7 pages

Trait Pixup

The document defines a PHP trait, SuitpayTrait, which provides methods for handling payments through the Suitpay gateway. It includes functionalities for generating credentials, requesting QR codes for payments, consulting transaction statuses, finalizing payments, and managing deposits and transactions. Additionally, it handles cash-out operations and integrates with user and wallet models to manage financial transactions effectively.

Uploaded by

marcos danylo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
214 views7 pages

Trait Pixup

The document defines a PHP trait, SuitpayTrait, which provides methods for handling payments through the Suitpay gateway. It includes functionalities for generating credentials, requesting QR codes for payments, consulting transaction statuses, finalizing payments, and managing deposits and transactions. Additionally, it handles cash-out operations and integrates with user and wallet models to manage financial transactions effectively.

Uploaded by

marcos danylo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 7

<?

php

namespace App\Traits\Gateways;

use App\Models\AffiliateHistory;
use App\Models\Deposit;
use App\Models\GamesKey;
use App\Models\Gateway;
use App\Models\Setting;
use App\Models\SuitPayPayment;
use App\Models\Transaction;
use App\Models\User;
use App\Models\Wallet;
use App\Notifications\NewDepositNotification;
use Carbon\Carbon;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Validator;
use App\Helpers\Core as Helper;

trait SuitpayTrait
{
/**
* @var $uri
* @var $clienteId
* @var $clienteSecret
*/
protected static string $uri;
protected static string $clienteId;
protected static string $clienteSecret;

/**
* Generate Credentials
* Metodo para gerar credenciais
* @dev victormsalatiel - Corra de golpista, me chame no instagram
* @return void
*/
private static function generateCredentials()
{
$setting = Gateway::first();
if(!empty($setting)) {
self::$clienteId = $setting->suitpay_cliente_id;
self::$clienteSecret = $setting->suitpay_cliente_secret;

return self::authentication();
}

return false;
}

/**
* Authentication
*
* @return false
*/
private static function authentication()
{
$client_id = self::$clienteId;
$client_secret = self::$clienteSecret;
$credentials = base64_encode($client_id . ":" . $client_secret);
$response = Http::withHeaders([
'Authorization' => 'Basic ' . $credentials
])->asForm()->post('https://api.pixupbr.com/v2/oauth/token', [
'grant_type' => 'client_credentials',
]);

if ($response->successful()) {
$data = $response->json();
return $data['access_token'];
} else {
self::$statusCode = $response->status();
self::$errorBody = $response->body();
return false;
}
}

/**
* Request QRCODE
* Metodo para solicitar uma QRCODE PIX
* @dev victormsalatiel - Corra de golpista, me chame no instagram
* @return array
*/
public static function requestQrcode($request)
{
if($access_token = self::generateCredentials()) {
$setting = \Helper::getSetting();
$rules = [
'amount' => ['required', 'max:'.$setting->min_deposit, 'max:'.
$setting->max_deposit],
'cpf' => ['required', 'max:255'],
];

$validator = Validator::make($request->all(), $rules);


if ($validator->fails()) {
return response()->json($validator->errors(), 400);
}

$postback = env('APP_URL') . "/suitpay/callback";


$code = "OCPG";
$email = auth('api')->user()->email ?? auth('api')->user()->name .
$code . "@gmail.com";

$parameters = [
'amount' => \Helper::amountPrepare($request->amount),
"external_id" => auth('api')->user()->id,
"payerQuestion" => "Pagamento referente ao serviço/produto X",
"payer" => [
"name" => auth('api')->user()->name,
"document" => \Helper::soNumero($request->cpf),
"email" => $email
],
"postbackUrl" => $postback
];

$response = Http::withHeaders([
'Authorization' => 'Bearer ' . $access_token,
'Content-Type' => 'application/json',
])->post('https://api.pixupbr.com/v2/pix/qrcode', $parameters);
$idUnico = uniqid();

if ($response->successful()) {
$responseData = $response->json();

self::generateTransaction($responseData['transactionId'], \
Helper::amountPrepare($request->amount), $idUnico); /// gerando historico
self::generateDeposit($responseData['transactionId'], \
Helper::amountPrepare($request->amount)); /// gerando deposito

return [
'status' => true,
'qrcode' => $responseData['qrcode']
];
} else {
self::$statusCode = $response->status();
self::$errorBody = $response->body();
return false;
}
}
}

/**
* Consult Status Transaction
* Consultar o status da transação
* @dev victormsalatiel - Corra de golpista, me chame no instagram
*
* @param $request
* @return \Illuminate\Http\JsonResponse
*/
public static function consultStatusTransaction($request)
{

$transaction = Transaction::where('id', $request->idTransaction)->first();

if(!$transaction){
return response()->json([
'success' => false,
'message' => 'Transaction not found'
], 400);
}

if($transaction->status == 1){
return response()->json(['status' => 'PAID']);
}else{
return response()->json(['status' => 'NO_PAID'], 400);
}
}

/**
* @param $idTransaction
* @dev victormsalatiel - Corra de golpista, me chame no instagram
* @return bool
*/
public static function finalizePayment($idTransaction) : bool
{
$transaction = Transaction::where('payment_id', $idTransaction)-
>where('status', 0)->first();
$setting = \Helper::getSetting();

if(!empty($transaction)) {
$user = User::find($transaction->user_id);

$wallet = Wallet::where('user_id', $transaction->user_id)->first();


if(!empty($wallet)) {

/// verifica se é o primeiro deposito, verifica as transações,


somente se for transações concluidas
$checkTransactions = Transaction::where('user_id', $transaction-
>user_id)
->where('status', 1)
->count();

if($checkTransactions == 0 || empty($checkTransactions)) {
if($transaction->accept_bonus) {
/// pagar o bonus
$bonus = Helper::porcentagem_xn($setting->initial_bonus,
$transaction->price);
$wallet->increment('balance_bonus', $bonus);

if(!$setting->disable_rollover) {
$wallet->update(['balance_bonus_rollover' => $bonus *
$setting->rollover]);
}
}
}

/// rollover deposito


if($setting->disable_rollover == false) {
$wallet->increment('balance_deposit_rollover', ($transaction-
>price * intval($setting->rollover_deposit)));
}

/// acumular bonus


Helper::payBonusVip($wallet, $transaction->price);

/// quando tiver desativado o rollover, ele manda o dinheiro


depositado direto pra carteira de saque
if($setting->disable_rollover) {
$wallet->increment('balance_withdrawal', $transaction-
>price); /// carteira de saque
}else{
$wallet->increment('balance', $transaction->price); ///
carteira de jogos, não permite sacar
}

if($transaction->update(['status' => 1])) {


$deposit = Deposit::where('payment_id', $idTransaction)-
>where('status', 0)->first();
if(!empty($deposit)) {

/// fazer o deposito em cpa


$affHistoryCPA = AffiliateHistory::where('user_id', $user-
>id)
->where('commission_type', 'cpa')
->first();
\Log::info(json_encode($affHistoryCPA));
if(!empty($affHistoryCPA)) {
/// faz uma soma de depositos feitos pelo indicado
$affHistoryCPA->increment('deposited_amount',
$transaction->price);

/// verifcia se já pode receber o cpa


$sponsorCpa = User::find($user->inviter);

\Log::info(json_encode($sponsorCpa));
/// verifica se foi pago ou não
if(!empty($sponsorCpa) && $affHistoryCPA->status ==
'pendente') {
\Log::info('Deposited Amount: '.$affHistoryCPA-
>deposited_amount);
\Log::info('Affiliate Baseline: '.$sponsorCpa-
>affiliate_baseline);
\Log::info('Amount: '.$deposit->amount);

if($affHistoryCPA->deposited_amount >= $sponsorCpa-


>affiliate_percentage_baseline || $deposit->amount >= $sponsorCpa-
>affiliate_percentage_baseline) {
/// paga a % do valor depositado
$commissionPercentage = ($transaction->price *
$sponsorCpa->affiliate_percentage_cpa) / 100;
$walletCpa = Wallet::where('user_id',
$affHistoryCPA->inviter)->first();
if(!empty($walletCpa)) {
$walletCpa->increment('refer_rewards',
$commissionPercentage); /// coloca a comissão
$affHistoryCPA->update(['status' => 1,
'commission_paid' => $commissionPercentage]); /// desativa cpa
}
} else if($affHistoryCPA->deposited_amount >=
$sponsorCpa->affiliate_baseline || $deposit->amount >= $sponsorCpa-
>affiliate_baseline) {
/// paga o valor de CPA
$walletCpa = Wallet::where('user_id',
$affHistoryCPA->inviter)->first();
if(!empty($walletCpa)) {
$walletCpa->increment('refer_rewards',
$sponsorCpa->affiliate_cpa); /// coloca a comissão
$affHistoryCPA->update(['status' => 1,
'commission_paid' => $sponsorCpa->affiliate_cpa]); /// desativa cpa
}
}
}
}

if($deposit->update(['status' => 1])) {


$admins = User::where('role_id', 0)->get();
foreach ($admins as $admin) {
$admin->notify(new NewDepositNotification($user-
>name, $transaction->price));
}

return true;
}
return false;
}
return false;
}

return false;
}
return false;
}
return false;
}

/**
* @param $idTransaction
* @param $amount
* @dev victormsalatiel - Corra de golpista, me chame no instagram
* @return void
*/
private static function generateDeposit($idTransaction, $amount)
{
$userId = auth('api')->user()->id;
$wallet = Wallet::where('user_id', $userId)->first();

Deposit::create([
'payment_id'=> $idTransaction,
'user_id' => $userId,
'amount' => $amount,
'type' => 'pix',
'currency' => $wallet->currency,
'symbol' => $wallet->symbol,
'status' => 0
]);
}

/**
* @param $idTransaction
* @param $amount
* @dev victormsalatiel - Corra de golpista, me chame no instagram
* @return void
*/
private static function generateTransaction($idTransaction, $amount,
$accept_bonus)
{
$setting = \Helper::getSetting();

return Transaction::create([
'payment_id' => $idTransaction,
'user_id' => auth('api')->user()->id,
'payment_method' => 'pix',
'price' => $amount,
'currency' => $setting->currency_code,
'accept_bonus' => $accept_bonus,
'status' => 0
]);
}

/**
* @param $request
* @dev victormsalatiel - Corra de golpista, me chame no instagram
* @return \Illuminate\Http\JsonResponse|void
*/
public static function pixCashOut(array $array): bool
{
$access_token = self::generateCredentials();
$transactionId = uniqid();

$response = Http::withHeaders([
'Authorization' => 'Bearer ' . $access_token,
'Content-Type' => 'application/json',
])->post('https://api.pixupbr.com/v2/pix/payment', [
"amount" => $array['amount'],
"description" => "Saque realizado",
"external_id" => (string) $transactionId,
"creditParty" => [
"name" => "",
"key" => $array['pix_key'],
"keyType" => $array['pix_type'],
'taxId' => ""
],
]);

if($response->successful()) {
$responseData = $response->json();

$suitPayPayment = SuitPayPayment::lockForUpdate()-
>find($array['suitpayment_id']);
if(!empty($suitPayPayment)) {
if($suitPayPayment->update(['status' => 1])) {
return true;
}
return false;
}
return false;
}
return false;
}
}

You might also like