} else { $ct = 0; foreach ($dadosEst as $estadoAt) { $est = estado::find_by_id($estadoAt->estados_id); $dv = $ct++ > 0 ? ' / ' : ''; $estados_atendidos .= $dv . $est->estado; } } $PAGINA['atuacao'] = $estados_atendidos; if ($dadosPg->mapa == 1) { $mapa['endereco'] = $dadosParc->logradouro . ',' . $cidade->cidade . '-' . $estado->uf; } } // ************************************************************************** // ******** DADOS PACOTES *************************************************** $pacotes = creditos_pacote::find('all', array('conditions' => array('flag_ativo = ?', 1), 'order' => 'ordem asc')); $PACOTES = array(); $hoje = new ActiveRecord\DateTime(date('Y-m-d')); foreach ($pacotes as $pacote) { $dadosPacote = array(); $preco = number_format($pacote->desconto_pacote_reais, 3, ',', '.'); $precof = explode(',', $preco); $preco = $precof[0] . ',' . substr($precof[1], 0, 2); $unitario = number_format($pacote->desconto_pacote_reais / $pacote->quant_creditos, 3, ',', '.'); $unitariof = explode(',', $unitario); $unitario = $unitariof[0] . ',' . substr($unitariof[1], 0, 2); $dadosPacote['id'] = $pacote->id; $dadosPacote['titulo'] = $pacote->titulo; $dadosPacote['descricao'] = $pacote->descricao; $dadosPacote['creditos'] = $pacote->quant_creditos; $dadosPacote['preco'] = $preco;
public static function compraCreditos($idp, $idpct) { /** * Executa uma operação de compra de créditos * * @param int $idp ID do parceiro * @param int $idpct ID do pacote comprado * @param int $tipo transação : 2 = cartão (default) | 3 = boleto | 4 = depósito * @param string $obj objeto da operação */ // As ações de compra e bônus possuem status = 0 (espera) e não atualiza o saldo de créditos // até que a operação de checkout retorne o valor como pago. $hoje = new ActiveRecord\DateTime(date('Y-m-d H:i:s')); $saldo = creditos_saldo_parceiro::find_by_parceiro_id('first', $idp); $parceiro = parceiro::find_by_id($idp); if (!$parceiro) { return self::ERRO_USUARIO_INVALIDO; } $ddd = (int) substr($parceiro->fone, 1, 2); $fone = (int) str_replace('-', '', substr($parceiro->fone, 4, 10)); $options['conditions'] = array('parceiro_id = ? AND vencimento >= ? AND flag_ativo = ?', $idp, $hoje, 1); $bonusUnico = creditos_bonus_unico::first($options); // Pega os dados de créditos, custo e bonus do pacote $pacote = creditos_pacote::find_by_id($idpct); if (!$pacote || $pacote->flag_ativo == 0) { return self::ERRO_PACOTE_INVALIDO; } $titulo = $pacote->titulo; $creditos = $pacote->quant_creditos; $custo = $pacote->custo_pacote_reais; $referencia = $idp . '-SC-' . self::contaEventos($idp, self::SC, 1); // utilizado para rastrear todos as fases da operação $bonus_geral = 0; $bonus_unico = 0; // avalia bonus geral e único if ($pacote->creditos_bonus > 0 && strtotime($pacote->data_limite_bonus) >= strtotime($hoje)) { $bonus_geral = $pacote->creditos_bonus; } $buOptions['conditions'] = array('parceiro_id = ? AND vencimento >= ? AND flag_ativo = ?', $idp, $hoje, 1); $bu = creditos_bonus_unico::first($buOptions); if ($bu) { $bonus_unico = $bu->bonus; } // inicializa classe do pagseguro, inserindo dados de usuário $paymentRequest = new PagSeguroPaymentRequest(); $paymentRequest->addItem($idpct, $titulo, 1, $custo); $paymentRequest->setSender($parceiro->responsavel . ' - ' . $parceiro->nome, $parceiro->email, $ddd, $fone); $paymentRequest->setCurrency('BRL'); $paymentRequest->setReference($referencia); //$paymentRequest->addParameter('notificationURL', self::NOTIFICATION_URL); $sedexCode = PagSeguroShippingType::getCodeByType('NOT_SPECIFIED'); $paymentRequest->setShippingType($sedexCode); $cidade = cidade::find_by_id($parceiro->cidade_id); $estado = estado::find_by_id($parceiro->estado_id); $postalCode = str_replace('-', '', $parceiro->cep); $postalCode = str_replace('.', '', $postalCode); $logradouro = explode(', ', $parceiro->logradouro); $paymentRequest->setShippingAddress($postalCode, $logradouro[0], $logradouro[1], $parceiro->complemento, $parceiro->bairro, $cidade->cidade, $estado->uf, 'BRA'); // inicia o processo de transação enviando as credenciais e // solicitando o código da operação try { $credentials = PagSeguroConfig::getAccountCredentials(); // getApplicationCredentials() $checkoutUrl = $paymentRequest->register($credentials); // FORMATO: https://pagseguro.uol.com.br/v2/checkout/payment.html?code=1C9B0FD3AEAE0FF004A39F98B751B1E5 $codigo = explode('=', $checkoutUrl); // grava os dados da operação antes inicar $dadosPagSeguro = array(); $dadosPagSeguro['parceiro_id'] = $idp; $dadosPagSeguro['parceiro_nome'] = $parceiro->responsavel . ' - ' . $parceiro->nome; $dadosPagSeguro['parceiro_email'] = $parceiro->email; $dadosPagSeguro['parceiro_fone'] = $parceiro->fone; $dadosPagSeguro['bonus_geral'] = $bonus_geral; $dadosPagSeguro['bonus_unico'] = $bonus_unico; $dadosPagSeguro['pacote_id'] = $idpct; $dadosPagSeguro['pacote_titulo'] = $titulo; $dadosPagSeguro['pacote_creditos'] = $creditos; $dadosPagSeguro['flag_pacote_creditado'] = 0; $dadosPagSeguro['data_cadastro'] = $hoje; $dadosPagSeguro['data_atualizacao'] = $hoje; $dadosPagSeguro['codigo_link'] = $codigo[1]; $dadosPagSeguro['referencia'] = $referencia; $dadosPagSeguro['tipo_transacao'] = 1; // 1 == compra | 11 == assinatura $dadosPagSeguro['status_transacao'] = 0; // inicia como 0 $dadosPagSeguro['fases'] = 0; // registra todos os status retornados pelo pagseguro. Inicia como 0 $dadosPagSeguro['valor_reais'] = $custo; $pagseguro = operacoes_pagseguro::create($dadosPagSeguro); $pagseguro->save(); $observação = 'Solicitação de compra PagSeguro ' . $referencia . '(R$' . number_format($custo, 2, ',', '.') . ')'; // registra o crédito adquirido como status EM ESPERA self::registraEvento($idp, self::SC, $saldo->saldo, $referencia, $crdt, $custo, 1, $observação); // descomentar esta linha na versão final // return $codigo[1]; return self::ERRO_OPERACAO_TESTE_CANCELADA; } catch (PagSeguroServiceException $e) { // implementar retorno de erro personalizado die($e->getMessage()); } }
function retornaCreditosTeste($idp, $idpacote) { $crdt = creditos_pacote::find_by_id($idpacote); return operacoes_de_credito::insereCreditos($idp, $crdt->quant_creditos, 'Teste de Insersão/compra de créditos'); }