コード例 #1
0
 public function requestPayment($items, $client, $reference = null, $shipping = null, $redirect = '/', $currency = 'BRL')
 {
     $requestPayment = new PagSeguroPaymentRequest();
     $requestPayment->setCurrency($currency);
     $itemId = 1;
     foreach ($items as $item) {
         $item['id'] = $this->formatNumber($itemId++);
         $requestPayment->addItem($item);
     }
     $requestPayment->setReference($reference);
     $requestPayment->setSenderName($client['client_name']);
     $requestPayment->setSenderEmail($client['client_email']);
     $requestPayment->setSenderPhone($client['client_ddd'], $client['client_phone']);
     $requestPayment->setShippingType($shipping['frete']);
     $requestPayment->setShippingCost(0);
     $requestPayment->setShippingAddress($shipping['cep'], $shipping['rua'], $shipping['numero'], $shipping['complemento'], $shipping['bairro'], $shipping['cidade'], $shipping['estado'], $shipping['pais']);
     $requestPayment->setRedirectURL($redirect);
     $requestPayment->setMaxAge(86400 * 3);
     try {
         return $requestPayment->register($this->getCredentials());
     } catch (PagSeguroServiceException $e) {
         foreach ($e->getErrors() as $key => $error) {
             echo $error->getCode();
             echo $error->getMessage();
         }
     }
 }
コード例 #2
0
 /**
  * Pagseguro
  *
  * @access public
  * @param int(11) idVenda
  */
 public function pagseguro($idVenda)
 {
     if ($this->session->userdata('logged_in') == true && $this->session->userdata('userData')->idTipoUsuario == 4) {
         $this->data['hasError'] = false;
         $this->data['errorList'] = array();
         $venda = array_shift($this->Vendas_model->getVenda(array('idVenda' => $idVenda)));
         // validações
         if (!is_object($venda)) {
             $this->data['hasError'] = true;
             $this->data['errorList'][] = array('message' => 'Não foi possível localizar sua compra.');
         }
         if (!$this->data['hasError']) {
             $userObj = $this->session->userdata('userData');
             $promocao = $this->Promocoes_model->getPromocaoById($venda->idPromocao);
             // Pega o estado do usuário
             $estadoObj = null;
             if ($userObj->idEstado) {
                 $filter = array('idEstado' => $userObj->idEstado);
                 $estadoObj = array_shift($this->Estados_model->getEstado($filter));
             }
             // Instantiate a new payment request
             $paymentRequest = new PagSeguroPaymentRequest();
             // Sets the currency
             $paymentRequest->setCurrency("BRL");
             // Sets a reference code for this payment request, it is useful to
             // identify this payment in future notifications.
             $paymentRequest->setReference($venda->idVenda);
             // Add an item for this payment request
             $paymentRequest->addItem('0001', substr($promocao->nome, 0, 80), 1, number_format($venda->valorDevido, 2, '.', ''));
             $paymentRequest->setShippingType(3);
             $paymentRequest->setShippingAddress(str_replace('-', '', str_replace('.', '', $userObj->CEP)), $userObj->endereco, $userObj->numero, $userObj->complemento, $userObj->bairro, $userObj->cidade, $estadoObj->sigla ? $estadoObj->sigla : '', 'BRA');
             // Sets your customer information.
             $paymentRequest->setSenderName(substr($userObj->nome, 0, 40));
             $paymentRequest->setSenderEmail($userObj->email);
             $paymentRequest->setSenderPhone($userObj->telefone1);
             $paymentRequest->setRedirectUrl(base_url('ofertas/retornoPagamento'));
             $paymentRequest->setMaxAge(86400 * 3);
             try {
                 $credentials = new PagSeguroAccountCredentials($this->config->item('pagseguroAccount'), $this->config->item('pagseguroToken'));
                 $url = $paymentRequest->register($credentials);
                 $dados = array('meioPagamento' => 2, 'statusPagamento' => 1, 'dataAtualizacao' => date('Y-m-d H:i:s'));
                 $this->Vendas_model->update($dados, $venda->idVenda);
                 redirect($url);
             } catch (PagSeguroServiceException $e) {
                 $this->data['hasError'] = true;
                 $this->data['errorList'][] = array('message' => 'Ocorreu um erro ao comunicar com o Pagseguro.' . $e->getCode() . ' - ' . $e->getMessage());
             }
             var_dump($this->data['errorList']);
         }
     } else {
         redirect(base_url('login'));
     }
 }
コード例 #3
0
 /**
  * Pagseguro
  *
  * @access public
  * @param int(11) idVenda
  */
 public function pagseguro($idVenda)
 {
     if ($idVenda) {
         $hasError = false;
         $errorList = array();
         // procura sua transação no banco de dados
         $venda = $this->db->get_where('tabela_vendas', array('idVenda' => $idVenda))->row();
         // validações
         if (!is_object($venda)) {
             $hasError = true;
             $errorList[] = array('message' => 'Não foi possível localizar sua compra.');
         }
         if (!$hasError) {
             // Instantiate a new payment request
             $paymentRequest = new PagSeguroPaymentRequest();
             // Sets the currency
             $paymentRequest->setCurrency("BRL");
             // Sets a reference code for this payment request, it is useful to
             // identify this payment in future notifications.
             $paymentRequest->setReference($venda->idVenda);
             // Add an item for this payment request
             $paymentRequest->addItem('0001', 'nome do item', 1, number_format($venda->valorDevido, 2, '.', ''));
             $paymentRequest->setShippingType(3);
             $paymentRequest->setShippingAddress(str_replace('-', '', str_replace('.', '', $venda->CEP)), utf8_decode($venda->endereco), $venda->numero, utf8_decode($venda->complemento), utf8_decode($venda->bairro), utf8_decode($venda->cidade), $venda->sigla ? $venda->sigla : '', 'BRA');
             // Sets your customer information.
             $telefone = $venda->telefone1;
             // 				$paymentRequest->setSenderName(truncate($userObj->nome, 40));
             $paymentRequest->setSenderEmail($venda->email);
             $paymentRequest->setSenderPhone(substr($telefone, 0, 2), substr($telefone, 2, 8));
             // TODO Alterar a URL de RETORNO DE PAGAMENTO SUA URL
             $paymentRequest->setRedirectUrl($this->urlRetornoPagamento);
             $paymentRequest->setMaxAge(86400 * 3);
             try {
                 $credentials = new PagSeguroAccountCredentials($this->config->item('pagseguroAccount'), $this->config->item('pagseguroToken'));
                 $url = $paymentRequest->register($credentials);
                 $parts = parse_url($url);
                 parse_str($parts['query'], $query);
                 if ($this->input->is_ajax_request()) {
                     $data = array('hasError' => FALSE, 'checkoutCode' => $query['code']);
                     $this->output->set_content_type('application/json')->set_output(json_encode($data));
                 } else {
                     redirect($url);
                 }
             } catch (PagSeguroServiceException $e) {
                 $hasError = true;
                 $errorList[] = array('message' => 'Ocorreu um erro ao comunicar com o Pagseguro.' . $e->getCode() . ' - ' . $e->getMessage());
             }
         }
     } else {
         redirect(base_url());
     }
 }
コード例 #4
0
ファイル: pagseguro.php プロジェクト: huluwa/mariazul
 protected function index()
 {
     $this->language->load('payment/pagseguro');
     $this->data['button_confirm'] = $this->language->get('button_confirm_pagseguro');
     $this->data['text_information'] = $this->language->get('text_information');
     $this->data['text_wait'] = $this->language->get('text_wait');
     require_once DIR_SYSTEM . 'library/PagSeguroLibrary/PagSeguroLibrary.php';
     // Altera a codificação padrão da API do PagSeguro (ISO-8859-1)
     PagSeguroConfig::setApplicationCharset('UTF-8');
     $mb_substr = function_exists("mb_substr") ? true : false;
     $this->load->model('checkout/order');
     $order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);
     $paymentRequest = new PagSeguroPaymentRequest();
     /* 
      * Dados do cliente
      */
     // Ajuste no nome do comprador para o máximo de 50 caracteres exigido pela API
     $customer_name = trim($order_info['payment_firstname']) . ' ' . trim($order_info['payment_lastname']);
     if ($mb_substr) {
         $customer_name = mb_substr($customer_name, 0, 50, 'UTF-8');
     } else {
         $customer_name = utf8_encode(substr(utf8_decode($customer_name), 0, 50));
     }
     if ($order_info['currency_code'] != "BRL") {
         $this->log->write("PagSeguro :: Pedido " . $this->session->data['order_id'] . ". O PagSeguro só aceita moeda BRL (Real) e a loja está configurada para a moeda " . $order_info['currency_code']);
     }
     $paymentRequest->setCurrency($order_info['currency_code']);
     $paymentRequest->setSenderName(trim($customer_name));
     $paymentRequest->setSenderEmail(trim($order_info['email']));
     // há limitação de 60 caracteres de acordo com a API
     // OpenCart não separa o DDD do número do telefone. Assim, tentamos separá-los.
     $telefone = preg_replace("/[^0-9]/", '', $order_info['telephone']);
     $telefone = ltrim($telefone, '0');
     if (strlen($telefone) >= 9) {
         $paymentRequest->setSenderPhone(substr($telefone, 0, 2), substr($telefone, 2, strlen($telefone) - 1));
     }
     /* 
      * Frete
      */
     $tipo_frete = $this->config->get('pagseguro_tipo_frete');
     if ($tipo_frete) {
         $paymentRequest->setShippingType($tipo_frete);
     } else {
         $paymentRequest->setShippingType(3);
         // 3: Não especificado
     }
     $this->load->model('localisation/zone');
     if ($this->cart->hasShipping()) {
         $zone = $this->model_localisation_zone->getZone($order_info['shipping_zone_id']);
         // Endereço para entrega
         $paymentRequest->setShippingAddress(array('postalCode' => preg_replace("/[^0-9]/", '', $order_info['shipping_postcode']), 'street' => $order_info['shipping_address_1'], 'number' => '', 'complement' => '', 'district' => $order_info['shipping_address_2'], 'city' => $order_info['shipping_city'], 'state' => isset($zone['code']) ? $zone['code'] : '', 'country' => $order_info['shipping_iso_code_3']));
     } else {
         $zone = $this->model_localisation_zone->getZone($order_info['payment_zone_id']);
         // Endereço para entrega
         $paymentRequest->setShippingAddress(array('postalCode' => preg_replace("/[^0-9]/", '', $order_info['payment_postcode']), 'street' => $order_info['payment_address_1'], 'number' => '', 'complement' => '', 'district' => $order_info['payment_address_2'], 'city' => $order_info['payment_city'], 'state' => isset($zone['code']) ? $zone['code'] : '', 'country' => $order_info['payment_iso_code_3']));
     }
     /*
      * Produtos
      */
     foreach ($this->cart->getProducts() as $product) {
         $options_names = '';
         foreach ($product['option'] as $option) {
             $options_names .= '/' . $option['name'];
         }
         // limite de 100 caracteres para a descrição do produto
         if ($mb_substr) {
             $description = mb_substr($product['model'] . '-' . $product['name'] . $options_names, 0, 100, 'UTF-8');
         } else {
             $description = utf8_encode(substr(utf8_decode($product['model'] . '-' . $product['name'] . $options_names), 0, 100));
         }
         $item = array('id' => $product['product_id'], 'description' => trim($description), 'quantity' => $product['quantity'], 'amount' => $this->currency->format($product['price'], $order_info['currency_code'], false, false));
         // O frete será calculado pelo PagSeguro.
         if ($tipo_frete) {
             $peso = $this->getPesoEmGramas($product['weight_class_id'], $product['weight']) / $product['quantity'];
             $item['weight'] = round($peso);
         }
         $paymentRequest->addItem($item);
     }
     // Referência do pedido no PagSeguro
     if ($this->config->get('pagseguro_posfixo') != "") {
         $paymentRequest->setReference($this->session->data['order_id'] . "_" . $this->config->get('pagseguro_posfixo'));
     } else {
         $paymentRequest->setReference($this->session->data['order_id']);
     }
     // url para redirecionar o comprador ao finalizar o pagamento
     $paymentRequest->setRedirectUrl($this->url->link('checkout/success'));
     // url para receber notificações sobre o status das transações
     $paymentRequest->setNotificationURL($this->url->link('payment/pagseguro/callback'));
     // obtendo frete, descontos e taxas
     $total = $this->currency->format($order_info['total'] - $this->cart->getSubTotal(), $order_info['currency_code'], false, false);
     if ($total > 0) {
         $item = array('id' => '-', 'description' => $this->language->get('text_extra_amount'), 'quantity' => 1, 'amount' => $total);
         $paymentRequest->addItem($item);
     } else {
         if ($total < 0) {
             $paymentRequest->setExtraAmount($total);
         }
     }
     /* 
      * Fazendo a chamada para a API de Pagamentos do PagSeguro. 
      * Se tiver sucesso, retorna o código (url) de requisição para este pagamento.
      */
     $this->data['url'] = '';
     try {
         $credentials = new PagSeguroAccountCredentials($this->config->get('pagseguro_email'), $this->config->get('pagseguro_token'));
         $url = $paymentRequest->register($credentials);
         $this->data['url'] = $url;
     } catch (PagSeguroServiceException $e) {
         $this->log->write('PagSeguro: ' . $e->getOneLineMessage());
     }
     if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/payment/pagseguro.tpl')) {
         $this->template = $this->config->get('config_template') . '/template/payment/pagseguro.tpl';
     } else {
         $this->template = 'default/template/payment/pagseguro.tpl';
     }
     $this->render();
 }