403Webshell
Server IP : 54.233.248.239  /  Your IP : 172.28.1.13
Web Server : Apache
System : Linux ip-172-28-29-189 6.5.0-1014-aws #14~22.04.1-Ubuntu SMP Thu Feb 15 15:27:06 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.2.34-43+ubuntu22.04.1+deb.sury.org+1
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/html/vinumday2_0/app/Services/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/vinumday2_0/app/Services/CheckoutService.php
<?php

namespace App\Services;

use App\Modules\CadastroCartao\Models\CadastroCartao;
use App\Modules\CadastroEndereco\Models\CadastroEndereco;
use App\Modules\Cidade\Models\Cidade;
use App\Modules\Estado\Models\Estado;
use App\Modules\Pais\Models\Pais;
use Carbon\Carbon;
use Log;

class CheckoutService
{
    public static function pagamento($cadastro, $user, $total, $post, $hash)
    {

        $ApiKeyPagarMe = GeralService::getApiKeyPagarMe($cadastro);
        if(substr($ApiKeyPagarMe, 0, 3) == 'sk_') {

            $currentDate = Carbon::now()->format('Y-m-d');

            $appEnv = env('APP_ENV');

            if ($appEnv === 'development') {
                $additionalEmails = [];
                // $additionalEmails = ['marcoskubas@gmail.com'];
            } else {
                $additionalEmails = [];
            }

            if (empty($cadastro->customer_id)) {
                $customer = PagarMeService::createCustomer($cadastro, $ApiKeyPagarMe);
                if (!isset($customer->id)) {
                    $dataEmail = $post;
                    $dataEmail['customer'] = json_encode($customer, JSON_PRETTY_PRINT);
                    \Mail::send('emails.error-checkout', $dataEmail, function ($m) use ($currentDate, $additionalEmails, $appEnv) {
                        $m->from(config('mail.from.address'), config('mail.from.name'));
                        $m->to(array_merge(['marcos.kubas@rua.com.br', 'jonathas.martins@rua.com.br'], $additionalEmails))->subject('[' . $appEnv . '/' . $currentDate . '] pagamento => Falha ao cadastrar usuário na PagarMe');
                    });

                    $json = ['status' => false, 'message' => 'Falha ao cadastrar cliente', 'error' => json_encode($customer)];
                    return $json;
                }
                $cadastro->customer_id = $customer->id;
                $cadastro->save();
            }

            try {
                $card = PagarMeService::createCustomerCard($cadastro, $post, $ApiKeyPagarMe);
            } catch (\Exception $exception) {
                $dataEmail = $post;
                $dataEmail['card'] = json_encode($exception->getMessage(), JSON_PRETTY_PRINT);
                \Mail::send('emails.error-checkout', $dataEmail, function ($m) use ($currentDate, $additionalEmails, $appEnv) {
                    $m->from(config('mail.from.address'), config('mail.from.name'));
                    $m->to(array_merge(['marcos.kubas@rua.com.br', 'jonathas.martins@rua.com.br'], $additionalEmails))->subject('[' . $appEnv . '/' . $currentDate . '] pagamento => Falha ao efetuar pagamento Cartão Crédito');
                });
                return ['status' => false, 'error' => $exception->getMessage()];
            }

            if (!isset($card->id) || $card->status == 'failed') {
                $dataEmail = $post;
                $dataEmail['card'] = json_encode($card, JSON_PRETTY_PRINT);
                \Mail::send('emails.error-checkout', $dataEmail, function ($m) use ($currentDate, $additionalEmails, $appEnv) {
                    $m->from(config('mail.from.address'), config('mail.from.name'));
                    $m->to(array_merge(['marcos.kubas@rua.com.br', 'jonathas.martins@rua.com.br'], $additionalEmails))->subject('[' . $appEnv . '/' . $currentDate . '] pagamento => Falha ao efetuar pagamento Cartão Crédito');
                });

                $json = ['status' => false, 'pagamento_status' => (isset($card->status) ? $card->status : 'error'), 'message' => 'Falha ao efetuar pagamento', 'error' => json_encode($card)];
                return $json;
            }
            $card_hash = $card->id;

            //Log Pedido Venda Transação
            $pedidoVendaTransacao = new \stdClass;
            $pedidoVendaTransacao->empresa_id = $cadastro->empresa_id;
            $pedidoVendaTransacao->cadastro_id = $cadastro->id;
            $pedidoVendaTransacao->customer_id = $cadastro->customer_id;
            $pedidoVendaTransacao->valor = $total;
            $pedidoVendaTransacao->observacao = json_encode([
                'parcelas' => $post['parcelas'],
                'total'    => $total,
                'card'     => $card_hash,
                'customer' => $cadastro->customer_id
            ]);

            try {
                $order = PagarMeService::createOrderCreditCard($cadastro, $total, $card_hash, $post['parcelas'], $ApiKeyPagarMe, $hash);
            } catch (\Exception $exception) {
                $dataEmail = $post;
                $dataEmail['logs'] = json_encode($exception->getMessage(), JSON_PRETTY_PRINT);
                \Mail::send('emails.error-checkout', $dataEmail, function ($m) use ($currentDate, $additionalEmails, $appEnv) {
                    $m->from(config('mail.from.address'), config('mail.from.name'));
                    $m->to(array_merge(['marcos.kubas@rua.com.br', 'jonathas.martins@rua.com.br'], $additionalEmails))->subject('[' . $appEnv . '/' . $currentDate . '] pagamento => Falha ao efetuar pagamento Cartão Crédito');
                });
            }

            if (!isset($order->id) || $order->status == 'failed') {
                $dataEmail = $post;
                $dataEmail['order'] = json_encode($order, JSON_PRETTY_PRINT);
                \Mail::send('emails.error-checkout', $dataEmail, function ($m) use ($currentDate, $additionalEmails, $appEnv) {
                    $m->from(config('mail.from.address'), config('mail.from.name'));
                    $m->to(array_merge(['marcos.kubas@rua.com.br', 'jonathas.martins@rua.com.br'], $additionalEmails))->subject('[' . $appEnv . '/' . $currentDate . '] pagamento => Falha ao efetuar pagamento Cartão Crédito');
                });

                $pedidoVendaTransacao->status = $order->status;
                $pedidoVendaTransacao->observacao = json_encode($order);
                $id_pedido_venda_transacao = GeralService::logPedidoVendaTransacao($pedidoVendaTransacao);

                $json = ['status' => false, 'pagamento_status' => (isset($order->status) ? $order->status : 'error'), 'message' => 'Falha ao efetuar pagamento', 'error' => json_encode($order)];
                return $json;
            }

            $pedidoVendaTransacao->status = $order->status;
            $pedidoVendaTransacao->observacao = json_encode($order);
            $pedidoVendaTransacao->transacao_id = $order->id;
            $id_pedido_venda_transacao = GeralService::logPedidoVendaTransacao($pedidoVendaTransacao);

            return [
                'status'                    => true,
                'transaction_id'            => $order->id,
                'id_pedido_venda_transacao' => $id_pedido_venda_transacao,
                'message'                   => 'Compra processada com sucesso.'
            ];

        }

        $pagarMe =  new \PagarMe\Sdk\PagarMe(GeralService::getApiKeyPagarMe($cadastro));

        $customer = null;

        if ($cadastro->customer_id) {
            $customer = GeralService::buscarCustomerPagarme($cadastro);
        }

        if (!$customer || count($cadastro->enderecos) == 0) {

            if (count($cadastro->enderecos) == 0) {
                $cadastroEndereco = new CadastroEndereco();
                $cadastroEndereco->fill($post);
                $cadastroEndereco->cadastro_id = $cadastro->id;
                $cadastroEndereco->principal = 1;
                //$cadastroEndereco->nome = 'Endereço de cadastro';
                $cadastroEndereco->save();
            } else {
                $cadastroEndereco = CadastroEndereco::where('cadastro_id', $cadastro->id)->where('principal', 1)->first();

                if (!$cadastroEndereco) {
                    return [
                        'status'  => false,
                        'message' => 'Você não possui um endereço principal definido. Defina um na página de seu perfil antes de finalizar a compra.'
                    ];
                }
            }


            $cidade = Cidade::find($cadastroEndereco->cidade_id);

            if (!$cidade) {
                return [
                    'status'  => false,
                    'message' => 'Cidade do seu endereço não é válida. Por favor, verifique se se endereço principal está cadastro corretamente.'
                ];
            }

            $estado = Estado::find($cadastroEndereco->estado_id);

            if (!$estado) {
                return [
                    'status'  => false,
                    'message' => 'Estado do seu endereço não é válido. Por favor, verifique se se endereço principal está cadastro corretamente.'
                ];
            }

            $pais = Pais::find($cadastroEndereco->pais_id);

            if (!$pais) {
                return [
                    'status'  => false,
                    'message' => 'País do seu endereço não é válido. Por favor, verifique se se endereço principal está cadastro corretamente.'
                ];
            }

            try {
                $address = new \PagarMe\Sdk\Customer\Address([
                    'street'        => $cadastroEndereco->logradouro,
                    'streetNumber'  => $cadastroEndereco->numero,
                    'neighborhood'  => $cadastroEndereco->bairro,
                    'zipcode'       => str_replace(['-', '.'], '', $cadastroEndereco->cep),
                    'complementary' => $cadastroEndereco->complemento,
                    'city'          => $cidade->nome,
                    'state'         => $estado->nome,
                    'country'       => $pais->nome,
                ]);
            } catch (\Exception $e) {
                return [
                    'status'  => false,
                    'message' => 'Não foi possível cadastrar seu endereço na plataforma de pagamento. Por favor, tente novamente mais tarde.'
                ];
            }


            try {

                $telefone = (int) $res = preg_replace("/[^0-9]/", "", $cadastro->telefone);

                $phone = new \PagarMe\Sdk\Customer\Phone(['ddd'    => substr($telefone, 0, 2),
                                                          'number' => substr($telefone, 2), 'ddi' => '55'
                ]);
            } catch (\Exception $e) {
                return [
                    'status'  => false,
                    'message' => 'Não foi possível cadastrar seu telefone na plataforma de pagamento. Por favor, verifique se seu perfil está preenchido devidamente.'
                ];
            }


            $errors = [
                'address[street_number]' => 'Número <strong>inválido</strong>.',
                'address[street]'        => 'Logradouro <strong>inválido</strong>.',
                'address[neighborhood]'  => 'Bairro <strong>inválido</strong>.',
                'address[zipcode]'       => 'CEP <strong>inválido</strong>.',
                'phone[number]'          => 'Telefone <strong>inválido</strong>. Por favor, ajuste seu cadastro ná pagina de seu perfil.',
                'phone[ddd]'             => 'O seu DDD é inválido. Por favor verifique se o seu <b>Telefone</b> está preenchido corretamente no seu perfil.',
            ];


            try {
                $customer = $pagarMe->customer()->create(
                    $cadastro->nome,
                    $user->email,
                    $cadastro->cpf,
                    $address,
                    $phone
                );

            } catch (\Exception $e) {
                $exceptionErrors = json_decode(json_decode($e->getMessage()));

                if ($exceptionErrors != null) {

                    $message = (isset($errors[$exceptionErrors->errors[0]->parameter_name])) ? $errors[$exceptionErrors->errors[0]->parameter_name] : $exceptionErrors->errors[0]->message;
                } else {
                    $message = $e->getMessage();
                }

                return [
                    'status'  => false,
                    'message' => $message
                ];
            }


            $cadastro->customer_id = $customer->getId();

            $cadastro->save();

        }

        if (isset($post['cartao_id']) && $post['cartao_id']) { // Se está usando um cartão já cadastrado

            $cartao = CadastroCartao::where('cadastro_id', $cadastro->id)->where('id', $post['cartao_id'])->where('ativo', 1)->first();

            if (!$cartao) {
                return [
                    'status'  => false,
                    'message' => 'Cartão selecionado é inválido.'
                ];
            }

            try {
                $card = $pagarMe->card()->get($cartao->cartao_id);
            } catch (\Exception $e) {
                return [
                    'status'  => false,
                    'message' => 'Não foi possível encontrar o seu cartão na plataforma de pagamento. Por favor, tente outro método de pagamento.'
                ];
            }

        } else {

            $tentativasCartao = CadastroCartao::where('cadastro_id', $cadastro->id)->where('empresa_id', $cadastro->empresa_id)->whereDate('data_cadastro', date('Y-m-d'))->where('ativo', 0)->count();
            $cartoesCliente = CadastroCartao::where('cadastro_id', $cadastro->id)->where('empresa_id', $cadastro->empresa_id)->where('ativo', 1)->count();

            if ($tentativasCartao >= 3) {
                return [
                    'status'  => false,
                    'message' => 'Tentativas Excedidas. Entre em contato com nossa equipe de suporte.'
                ];
            } elseif ($cartoesCliente >= 3) {
                return [
                    'status'  => false,
                    'message' => 'Por razões de segurança são permitidos apenas 3 (três) cartões cadastrados.'
                ];
            } elseif ($tentativasCartao >= 2 && (!isset($post['g-recaptcha-response']) || (isset($post['g-recaptcha-response']) && empty($post['g-recaptcha-response'])))) {
                return [
                    'status'  => false,
                    'message' => 'ReCaptcha inválido'
                ];
            }

            $cadastroCartao = new CadastroCartao();
            $cadastroCartao->cadastro_id = $cadastro->id;
            $cadastroCartao->empresa_id = $cadastro->empresa_id;
            $cadastroCartao->data_cadastro = date('Y-m-d H:i:s');
            $cadastroCartao->principal = 0;

            try {

                $card = $pagarMe->card()->create(
                    $post['number'],
                    $post['name'],
                    substr($post['expiry'], 0, 2).substr($post['expiry'], 5, 2)
                );

                if ($card->getValid()) {

                    $cadastroCartao->cartao_id = $card->getId();
                    if (isset($post['salvar_cartao']) && $post['salvar_cartao']) {
                        if (count($cadastro->cartoes) == 0) {
                            $cadastroCartao->principal = 1;
                        }
                        $cadastroCartao->save();
                    } else {
                        GeralService::checkoutTracking('usuario', [
                            'id_tipo'    => $cadastro->user_id, 'acao' => 'compra-cartao',
                            'observacao' => "Compra sem cartão salvo: ".$card->getId()
                        ]);
                    }

                } else {

                    if (!isset($post['salvar_cartao'])) {
                        GeralService::checkoutTracking('usuario', [
                            'id_tipo'    => $cadastro->user_id, 'acao' => 'compra-cartao', 'status' => 0,
                            'observacao' => 'Dados do cartão são inválidos'
                        ]);
                    }

                    $cadastroCartao->retorno = 'Cartão Inválido';
                    $cadastroCartao->ativo = 0;
                    $cadastroCartao->save();

                    return [
                        'status'           => false,
                        'tentativasCartao' => ($tentativasCartao + 1),
                        'message'          => 'Dados do cartão são <strong>inválidos</strong>. Tente novamente.'
                    ];

                }

            } catch (\Exception $e) {

                if (!isset($post['salvar_cartao'])) {
                    GeralService::checkoutTracking('usuario', [
                        'id_tipo'    => $cadastro->user_id, 'acao' => 'compra-cartao', 'status' => 0,
                        'observacao' => 'Dados do cartão são inválidos (Exception)'
                    ]);
                }

                $errors = json_decode(json_decode($e->getMessage()));

                $cadastroCartao->retorno = isset($errors->errors) ? json_encode($errors->errors[0]->message) : 'Erro cartão checkout';
                $cadastroCartao->ativo = 0;
                $cadastroCartao->save();

                return [
                    'status'           => false,
                    'tentativasCartao' => ($tentativasCartao + 1),
                    'message'          => 'Dados do cartão são <strong>inválidos</strong>. Tente novamente.',
                ];
            }

        }

        $totalTransaction = $total * 100;
        $totalTransaction = number_format($totalTransaction, 0, '', '');

        $creditCardTransaction = [
            'total'    => $totalTransaction,
            'card'     => $card->getId(),
            'customer' => $cadastro->customer_id,
            'parcelas' => $post['parcelas']
        ];

        //Log Pedido Venda Transação
        $pedidoVendaTransacao = new \stdClass;
        $pedidoVendaTransacao->empresa_id = $cadastro->empresa_id;
        $pedidoVendaTransacao->cadastro_id = $cadastro->id;
        $pedidoVendaTransacao->customer_id = $cadastro->customer_id;
        $pedidoVendaTransacao->valor = $total;
        $pedidoVendaTransacao->observacao = json_encode($creditCardTransaction);

        try {

            $transaction = $pagarMe->transaction()->creditCardTransaction(
                $totalTransaction,
                $card,
                $customer,
                $post['parcelas'], // parcelas
                true // captura
            //'http://requestb.in/pkt7pgpk', // postbackURL
            //['idProduto' => 13933139] //metadata
            );

            if ($transaction->getStatus() != 'paid') {

                if (!isset($post['salvar_cartao'])) {
                    GeralService::checkoutTracking('usuario', [
                        'id_tipo'    => $cadastro->user_id, 'acao' => 'compra-cartao', 'status' => 0,
                        'observacao' => 'Pagamento Recusado para '.$card->getId().' : '.$transaction->getStatus()
                    ]);
                }

                Log::info('confirmarCompra Pedido Status : transacao_id => '.$transaction->getId().' '.$transaction->getStatus().'('.json_encode($creditCardTransaction).')');

                $pedidoVendaTransacao->status = $transaction->getStatus();
                $pedidoVendaTransacao->transacao_id = $transaction->getId();
                $id_pedido_venda_transacao = GeralService::logPedidoVendaTransacao($pedidoVendaTransacao);

                return [
                    'status'  => false,
                    'message' => 'Não foi possível realizar a transação na plataforma de pagamento. Por favor, tente novamente mais tarde.'
                ];

            } else {
                if (!isset($post['salvar_cartao'])) {
                    GeralService::checkoutTracking('usuario', [
                        'id_tipo'    => $cadastro->user_id, 'acao' => 'compra-cartao',
                        'observacao' => "Pagamento Aprovado sem cartão salvo: ".$card->getId()
                    ]);
                }
                $pedidoVendaTransacao->status = $transaction->getStatus();
                $pedidoVendaTransacao->transacao_id = $transaction->getId();
                $id_pedido_venda_transacao = GeralService::logPedidoVendaTransacao($pedidoVendaTransacao);
                Log::info('confirmarCompra OK : transacao_id => '.$transaction->getId().' - '.json_encode($creditCardTransaction));
            }

        } catch (\Exception $e) {

            if (!isset($post['salvar_cartao'])) {
                GeralService::checkoutTracking('usuario', [
                    'id_tipo'    => $cadastro->user_id, 'acao' => 'compra-cartao', 'status' => 0,
                    'observacao' => 'Pagamento Recusado para '.$card->getId().' : Exception'
                ]);
            }

            Log::info('confirmarCompra Exception : '.json_encode($creditCardTransaction));
            Log::info('confirmarCompra Exception Customer : '.json_encode($customer));
            Log::info('confirmarCompra Exception : '.json_encode($e->getMessage()));

            $pedidoVendaTransacao->status = 'exception';
            $pedidoVendaTransacao->observacao = $pedidoVendaTransacao->observacao." - ".json_encode($e->getMessage());
            $id_pedido_venda_transacao = GeralService::logPedidoVendaTransacao($pedidoVendaTransacao);

            return [
                'status'  => false,
                'message' => 'Erro ao realizar a transação na plataforma de pagamento. Por favor, tente novamente mais tarde.'
            ];
        }

        $transaction_id = false;
        if($transaction) {
            $transaction_id = $transaction->getId();
        }

        return [
            'status'                    => true,
            'transaction_id'            => $transaction_id,
            'id_pedido_venda_transacao' => $id_pedido_venda_transacao,
            'message'                   => 'Compra processada com sucesso.'
        ];
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit