public static function notification($info) { $historico_pagamento = HistoricoPagamento::where('transaction_id', '=', $info->getCode())->where('id_pagamento', '=', $info->getReference())->first(); if ($historico_pagamento instanceof HistoricoPagamento) { if ($historico_pagamento->status != 'Aprovado' && $info->getStatus()->getName() != 'Concluído') { $historico_pagamento->status = $info->getStatus()->getName(); $historico_pagamento->save(); } } else { $historico_pagamento = new HistoricoPagamento(); $historico_pagamento->id_pagamento = $info->getReference(); $historico_pagamento->transaction_id = $info->getCode(); $historico_pagamento->status = $info->getStatus()->getName(); $historico_pagamento->save(); } $pagamento = Pagamento::find($info->getReference()); $pagamento->status = $info->getStatus()->getName(); $pagamento->save(); }
public function store(Request $request) { //Pagamento/Efetivar $inputArray = $request->all(); $checkboxes = Session::get('checkbox'); if (!$checkboxes) { return Redirect::to('Pagamento\\Calcular')->withErrors(['Nenhuma assinatura foi selecionada']); } $valorRealGet = 0.0; $idUsuario = Auth::id(); $asCom = DB::table('assinaturas')->join('assinaturasFiliais', 'assinaturasFiliais.idAssinatura', '=', 'assinaturas.id')->join('filiais', 'assinaturasFiliais.idFilial', '=', 'filiais.id')->join('empresas', 'empresas.id', '=', 'filiais.idEmpresa')->join('planos', 'assinaturas.idPlano', '=', 'planos.id')->join('comerciantes', 'assinaturas.idComerciante', '=', 'comerciantes.id')->select('planos.valor', 'assinaturas.id as idAssinatura', 'empresas.nomeFantasia', 'comerciantes.idUsuario as idUsuario', 'empresas.id as idEmpresa')->whereIn('assinaturas.id', array_values($checkboxes))->get(); foreach ($asCom as $single) { $valorRealGet = $valorRealGet + $single->valor; } $valorRealGet = Transacao::getValorCentavos($valorRealGet); $inputArray['valorReal'] = $valorRealGet; $mensagensErro = array('min' => 'Valor a ser pago invalido.', 'numeric' => 'Valor a ser pago invalido.', 'valor_pagamento_positivo_minimo_valido' => 'Valor a ser pago não pode ser inferior a 1'); Validator::extend('valor_pagamento_positivo_minimo_valido', function ($attribute, $value, $parameters) { if (str_contains($value, 'R$ ')) { $floated = floatval(str_replace(',', '.', ltrim($value, "R\$ "))); if ($floated < 1) { return false; } else { return true; } } else { return false; } }); $validator = Validator::make($inputArray, ['valorPagamento' => 'required|min:1|valor_pagamento_positivo_minimo_valido', 'payment' => 'required', 'valorReal' => 'required|min:1'], $mensagensErro); if ($validator->fails()) { return Redirect::to('Pagamento/Calcular')->withErrors($validator); } Pagarme::setApiKey("ak_test_1jVGAUzxWNanzfTiW6yGX0cbA8Ywq7"); $idEmpresa = $asCom[0]->idEmpresa; $transacao = null; $transacao = Transacao::create(['idUsuario' => $idUsuario, 'idTipoTransacao' => Transacao::getTipoTransacao($inputArray['payment']), 'idEstadoTransacao' => '1', 'valorBruto' => $valorRealGet, 'cardHash' => Transacao::getSkipCardHash($inputArray), 'dataInicio' => date('y-m-d'), 'dataResposta' => date('y-m-d')]); HistoricoMudancaEstado::registrarHistoricoTransacao($transacao->id, EstadoTransacao::Criado); $dataValidade = new DateTime(date('y-m-d')); // $dataValidade = $dataValidade->add(DateInterval::createFromDateString('1 month')); //WRONG $assinaturasCliente = array_values($checkboxes); $assinaturasConfereData = null; foreach ($assinaturasCliente as $single) { $candidato = DB::table('pagamentos')->where('idAssinatura', $single)->orderBy('validade', 'asc')->first(); if ($candidato) { //existe pagamento if ($candidato->isPaid == 1) { //foi pago?, entao pegar a data de vencimento e add1mes $dataAntiga = new DateTime($candidato->validade); $dataValidade = new DateTime(date('y-m-d')); $checkDate = $dataValidade->diff($dataAntiga); $dataValidade = $dataValidade->add(DateInterval::createFromDateString('1 month')); if (!$checkDate->invert) { $dataValidade->setDate($dataValidade->format('y'), $dataValidade->format('m'), $dataAntiga->format('d')); //set o mesmo dia do vencimento } else { } $assinaturasConfereData[$single] = $dataValidade; } } else { //nunca existiu pagamento, criar o primeiro vencimento $dataValidade = new DateTime(date('y-m-d')); $assinaturasConfereData[$single] = $dataValidade->add(DateInterval::createFromDateString('1 month')); } } switch ($transacao->idTipoTransacao) { //TODO: fazer a pagina mostrando pagamento efetuado etc default: case 1: //pagamentocartaosimples $transactionPagarMe = new PagarMe_Transaction(array('amount' => $transacao->valorBruto, 'card_hash' => $transacao->cardHash)); $transactionPagarMe->charge(); if ($transactionPagarMe->status == 'paid') { foreach ($asCom as $single) { $pagamento = Pagamento::create(['isPaid' => 1, 'idUsuario' => $idUsuario, 'valor' => Transacao::converteCentavos($single->valor), 'dataPagamento' => date('y-m-d'), 'dataBaixa' => date('y-m-d'), 'idAssinatura' => $single->idAssinatura, 'idTransacao' => $transacao->id, 'validade' => $assinaturasConfereData[$single->idAssinatura]]); } $transacao->idEstadoTransacao = EstadoTransacao::Pago; $transacao->save(); HistoricoMudancaEstado::registrarHistoricoTransacao($transacao->id, EstadoTransacao::Pago); return "thank you " . $transactionPagarMe->status; } else { HistoricoMudancaEstado::registrarHistoricoTransacao($transacao->id, EstadoTransacao::Recusado); $transacao->idEstadoTransacao = EstadoTransacao::Recusado; $transacao->save(); return "sorry " . $transactionPagarMe->status; } //TODO: fazer pagina informando o resultado do pagamento //TODO: fazer pagina informando o resultado do pagamento case 2: ///assinatura $transactionPagarMe = new PagarMe_Transaction(array('amount' => $transacao->valorBruto, 'card_hash' => $transacao->cardHash)); $transactionPagarMe->charge(); $card = new PagarMe_Card(array('card_hash' => $transacao->cardHash)); $card->create(); $card_id = $card->id; //$transacao->save(); //TODO: criar CRONJOB para recobrar if ($transactionPagarMe->status == 'paid') { foreach ($asCom as $single) { $pagamento = Pagamento::create(['isPaid' => 1, 'idUsuario' => $idUsuario, 'valor' => Transacao::converteCentavos($single->valor), 'dataPagamento' => date('y-m-d'), 'dataBaixa' => date('y-m-d'), 'idAssinatura' => $single->idAssinatura, 'idTransacao' => $transacao->id, 'validade' => $assinaturasConfereData[$single->idAssinatura]]); } $transacao->idEstadoTransacao = EstadoTransacao::Pago; $transacao->cardHashMensal = $card_id; $transacao->save(); HistoricoMudancaEstado::registrarHistoricoTransacao($transacao->id, EstadoTransacao::Pago); return "thank you " . $transactionPagarMe->status; } else { HistoricoMudancaEstado::registrarHistoricoTransacao($transacao->id, EstadoTransacao::Recusado); return "sorry " . $transactionPagarMe->status; } //return $status = $transactionPagarMe->status . ' ' . $card_id; //return $status = $transactionPagarMe->status . ' ' . $card_id; case 3: //boleto $transaction = new PagarMe_Transaction(array('amount' => $transacao->valorBruto, 'payment_method' => "boleto")); foreach ($asCom as $single) { $pagamento = Pagamento::create(['isPaid' => 0, 'idUsuario' => $idUsuario, 'valor' => Transacao::converteCentavos($single->valor), 'dataPagamento' => date('y-m-d'), 'dataBaixa' => date('y-m-d'), 'idAssinatura' => $single->idAssinatura, 'idTransacao' => $transacao->id, 'validade' => $assinaturasConfereData[$single->idAssinatura]]); } $transaction->charge(); $boleto_url = $transaction->boleto_url; // URL do boleto bancário $boleto_barcode = $transaction->boleto_barcode; // código de barras do boleto bancário $transacao->idEstadoTransacao = EstadoTransacao::PagamentoPendente; $transacao->numeroBoleto = $boleto_barcode; $transacao->save(); HistoricoMudancaEstado::registrarHistoricoTransacao($transacao->id, EstadoTransacao::PagamentoPendente); //TODO: provavelmente gerar a pagina do boleto? no ambiente de teste só aparece return $boleto_barcode . ' ' . $boleto_url; } }
public function detalhesPagamentoClonado(Pagamento $p, $data, $hora, $cod_barras) { $qry_cod_barras = $p->where("pag_cod_barras", "like", "%" . $cod_barras . "%")->get(); $qry_data_hora = $p->where(function ($query) use($data, $hora) { $query->where("pag_hora", "=", "%" . $hora . "%")->where("pag_data", "=", "%" . $data . "%"); })->get(); $testa_cod_barras = count($qry_cod_barras); $testa_data_hora = count($qry_data_hora); if ($testa_data_hora > 0) { return $qry_data_hora; } else { if ($testa_cod_barras) { return $qry_cod_barras; } } //dd($v); }