Yii Framework Forum: Integração com PagSeguro - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Integração com PagSeguro Rate Topic: -----

#1 User is offline   Dyego Nery 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 104
  • Joined: 26-August 11

Posted 16 April 2012 - 09:40 AM

Olá pessoal, já vi alguns topicos relacionados ao pagseguro aqui, mas nenhum me atendeu.

Não to conseguindo integrar o pagSeguro ao Yii. Ja inclui a biblioteca do pagSeguro na pasta protected/vendors/
e registrei o autoloader do pagseguro, assim:

Yii::import('application.vendors.PagSeguroLibrary.PagSeguroLibrary');
            
            Yii::registerAutoloader(array('PagSeguroAutoLoader', 'addClass'), true);         
            
            
            
            
            $pagSeguroRequest = new PagSeguroPaymentRequest();


Porém, o Yii gera o erro:
Passed array does not specify an existing static method (class 'PagSeguroAutoLoader' not found) 



Tentei usar a classe PagSeguroLibrary no registerAutoloader também, mas também não dá certo.
Alguém pode me ajudar com isso?


abraço
http://www.emuitocarro.com.br - Classificado Online de Veículos


http://www.yiibrasil.com.br - Blog com dicas e tutoriais sobre o Yii Framework.
0

#2 User is offline   andredelorme 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 48
  • Joined: 30-April 09

Posted 16 April 2012 - 02:30 PM

A maneira que consegui usar a biblioteca do PagSeguro foi colocando, assim como você no diretório vendores.

E para usar o que fiz foi:

Yii::import('application.vendors.*');
require_once('PagSeguroLibrary/PagSeguroLibrary.php');
$paymentRequest = new PaymentRequest();


Veja se funciona para você.
0

#3 User is offline   Dyego Nery 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 104
  • Joined: 26-August 11

Posted 16 April 2012 - 06:15 PM

Não funcionou andredelorme. Vc nao mudou nada mais pra usar desse jeito ai?
http://www.emuitocarro.com.br - Classificado Online de Veículos


http://www.yiibrasil.com.br - Blog com dicas e tutoriais sobre o Yii Framework.
0

#4 User is offline   Clayton 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 33
  • Joined: 11-May 11

Posted 16 April 2012 - 07:42 PM

Veja o arquivo PagSeguroLibray.php

Troque isso:

require_once "loader".DIRECTORY_SEPARATOR."PagSeguroAutoLoader.class.php";


Por

 require_once "PagSeguroLibrary/loader/PagSeguroAutoLoader.class.php";


Pra mim isso funcionou

Abraço
0

#5 User is offline   Dyego Nery 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 104
  • Joined: 26-August 11

Posted 16 April 2012 - 08:15 PM

Opa Clayton, tranquilo?

Como vc fez o resto da integração, como chamou a biblioteca do pagseguro?

Faz alguma manipulação com o autoload?


Tentando fazer como em um tutorial que falam sobre a integração com outros frameworks, assim:

spl_autoload_unregister(array('YiiBase', 'autoload'));
            require_once(Yii::app()->basePath .'/vendors/PagSeguroLibrary/PagSeguroLibrary.php');
           spl_autoload_register(array('YiiBase', 'autoload'));



Porém, aí o seguinte erro começa a aparecer.

Fatal error: Class 'CExceptionEvent' not found in D:\3NW\Dev\Yii\yii-1.1.8.r3324\framework\base\CApplication.php on line 703

http://www.emuitocarro.com.br - Classificado Online de Veículos


http://www.yiibrasil.com.br - Blog com dicas e tutoriais sobre o Yii Framework.
0

#6 User is offline   andredelorme 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 48
  • Joined: 30-April 09

Posted 16 April 2012 - 08:31 PM

Dyego,

Qual versão da biblioteca você está usando?
A atual é 2.1.0, quando eu integrei estava na 2.0.0 algo deve ter mudado.
Terei que fazer novos testes para ver a melhor forma.

A documentação da biblioteca do PagSeguro não é muito boa. Não acho um changelog.


View PostDyego Nery, on 16 April 2012 - 06:15 PM, said:

Não funcionou andredelorme. Vc nao mudou nada mais pra usar desse jeito ai?

0

#7 User is offline   Dyego Nery 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 104
  • Joined: 26-August 11

Posted 16 April 2012 - 08:33 PM

To usando a 2.1.0 mesmo.

Tentei chamar ela sem mexer com os autoloads, mas ai ja vai pra um erro diferente.

require_once(Yii::app()->basePath .'/vendors/PagSeguroLibrary/PagSeguroLibrary.php');



PagSeguroLibrary: cURL library is required. 


Entao ativei o cUrl nas configurações do PHP.

Depois disso, o Yii passa a gerar outro erro, esse sim por causa do autoload.

Bom, no fim fiz assim:
spl_autoload_unregister(array('YiiBase', 'autoload'));
require_once(Yii::app()->basePath .'/vendors/PagSeguroLibrary/PagSeguroLibrary.php');
spl_autoload_register(array('YiiBase', 'autoload'));



E ativei o curl nas configurações do php.
Agora parece que deu certo.


Valeu ai pessoal, pela força.


abraço
http://www.emuitocarro.com.br - Classificado Online de Veículos


http://www.yiibrasil.com.br - Blog com dicas e tutoriais sobre o Yii Framework.
0

#8 User is offline   Edson Rodrigues 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 378
  • Joined: 10-August 10

Posted 22 April 2012 - 04:49 PM

Alguem poderia cria um tutorial mostrando como integrae e carregar a api v2 do pagseguro no yii. Pois este toppico esta muito confuso.

Obrigado
0

#9 User is offline   Gestat 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 12-January 12

Posted 25 April 2012 - 02:12 PM

Pessoal,

eu resolvi o problema de autoloader do Pagseguro alterando o método construtor da classe PagSeguroAutoloader.class.php

Meu construtor está da seguinte maneira:

private function __construct() {
    Yii::registerAutoloader(array($this, 'addClass'), true);
}


Para carregar simplesmente insira no inicio do arquivo da sua classe que deverá usar a biblioteca:

Yii::import('application.vendors.*');
require_once('PagSeguroLibrary/PagSeguroLibrary.php');

0

#10 User is offline   Adriano Mendes 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 26
  • Joined: 13-October 11
  • Location:Brazil

Posted 01 March 2014 - 04:16 PM

Depois de muitos 404, resolvi escrever esse tuts para ajudar o pessoal que usa o PagSeguro.

Achei essas respostas muito confusas mas me ajudou a entender o problema.

O Yii possui um autoload completo e ele impede que outro autoload funcione com ele, então devemos desligar o autoload nativo do Yii para que o autoload do PagSeguro possa funcionar.

acrecente essa linha
spl_autoload_unregister(array('YiiBase','autoload'));
para que o autoload do Yii desligue!

Agora vc vai utilizar 100% da API do PagSeguro

Depois que vc terminar de utilizar a API do Pag Seguro utilize essa linha para ligar novamente o autoload do Yii
spl_autoload_register(array('YiiBase', 'autoload'));


abaixo segue um exemplo completo!


Biblioteca PagSeguro em PHP
Versão: 2.2.1



<?php 
class CompraController extends Controller
{		
	public function actionIndex()
	{
		$itens = array(  
			'0' => array(  
				'id' => '0001',  
				'description' => 'Foto 20x30(012455.jpg)',   
				'quantity' => 4,   
				'amount' => number_format('4', 2, '.', ''), //ATENÇÃO A API DO PAGSEGURO NÃO ACEITA NUMERO INTEIROS PORTANDO RECOMENDO UTILIZAR  number_format('$STRING_PREÇO', 2, '.', '')
			),  
			'1' => array(  
				'id' => '0002',  
				'description' => 'Foto 10x15 (DSC_000154.jpg)',   
				'quantity' => 2,  
				'amount' =>number_format('1.85', 2, '.', ''),//ATENÇÃO A API 	" "  " "  " "
			),  
		);
		
		/** INICIO PROCESSO PAGSEGURO */
		//obter uma referência para o caminho das classes PagSeguroLibrary
		$PagSeguroPath = Yii::getPathOfAlias('ext.PagSeguroLibrary');
		// Desligue a biblioteca autoload nativa do Yii
		spl_autoload_unregister(array('YiiBase','autoload'));        
		// Quando desligamos a biblioteca autoload nativa do Yii passamos a usar o autoload do PagSeguroLibrary
		include($PagSeguroPath . DIRECTORY_SEPARATOR . 'PagSeguroLibrary.php');
		//Class PagSeguroPaymentRequest
		$paymentRequest = new PagSeguroPaymentRequest();  
		//Adiciona os itens
		$paymentRequest->setItems($itens);
		//Definindo moeda
		$paymentRequest->setCurrency('BRL');
		// 1- PAC(Encomenda Normal)
		// 2-SEDEX
		// 3-NOT_SPECIFIED(Não especificar tipo de frete)
		$paymentRequest->setShipping(3);
		//Url de redirecionamento
		$paymentRequest->setRedirectURL('URL_DE_RETORNO');
		//Obtendo credenciais do arquivo de configuração
		$credentials = PagSeguroConfig::getAccountCredentials();//credenciais do vendedor
		//$compra_id = App_Lib_Compras::insert($produto);
		$paymentRequest->setReference("00012");//Referencia;
		//Utilizando credenciais definidas no arquivo de configuração
		$url = $paymentRequest->register($credentials);
		//Aqui voltamos a ligar o autoload nativo do Yii
		spl_autoload_register(array('YiiBase', 'autoload'));
		//redireciona comprador para pagina do PagSeguro
		$this->redirect($url);
	}
}

1

#11 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 818
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 03 March 2014 - 07:22 PM

Paga complementar a ajuda do Adriano, vou colocar uma action do um controller, para que você possa resgatar o dados de um pedido, junto com dados do cliente e os itens dos pedidos, assim você consegue montar uma carrinho completo do pagseguro, com quase todos os dados.

E bom quem não tiver usando o composer, que comece a usar, com ele, as atualizações desses pacotes serão sempre atualizadas.

Para quem tiver usando o composer, é so acrescentar "pagseguro/php": "dev-master", no composer.json da sua aplicação, quem não tem o composer instalado pode baixar direto do repositório git do Pagseguro (https://github.com/pagseguro/php)

PagseguroController
public function init() {
        spl_autoload_unregister(array('YiiBase', 'autoload'));
        require_once(Yii::app()->basePath . '/vendors/pagseguro/PagSeguroLibrary.php');
        spl_autoload_register(array('YiiBase', 'autoload'));
    }

    public function actionIndex($id) {


        PagSeguroConfig::setApplicationCharset('UTF-8');

        $paymentRequest = new PagSeguroPaymentRequest();

        $mb_substr = (function_exists("mb_substr")) ? true : false;

        $model = Pedido::model()->findByPk($id);

        /*
         * Dados do cliente
         */

        // Ajuste no nome do comprador para o máximo de 50 caracteres exigido pela API
        $customer_name = trim($model->idCliente->nome);

        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));
        }

        $paymentRequest->setCurrency('BRL');
        $paymentRequest->setSenderName($customer_name);
        $paymentRequest->setSenderEmail(trim($model->idCliente->email)); // há limitação de 60 caracteres de acordo com a API

        $telefone = preg_replace("/[^0-9]/", '', $model->idCliente->telefone_fixo);

        if (strlen($telefone) == 10) {
            $paymentRequest->setSenderPhone(substr($telefone, 0, 2), substr($telefone, 2, strlen($telefone) - 1));
        }

        /*
         * Frete
         */
        $paymentRequest->setShippingType(3); // 3: Não especificado

        $paymentRequest->setShippingAddress(
                Array(
                    'postalCode' => $model->idCliente->cep,
                    'street' => $model->idCliente->endereco,
                    'number' => $model->idCliente->numero,
                    'complement' => $model->idCliente->complemento,
                    'district' => $model->idCliente->bairro,
                    'city' => $model->idCliente->cidade,
                    'state' => $model->idCliente->estado,
                    'country' => 'BR'
                )
        );

        /*
         * Produtos
         */

        foreach ($model->pedidoItems as $item) {
            // limite de 100 caracteres para a descriço do produto
            if ($mb_substr) {
                $description = mb_substr($item->idProduto->titulo, 0, 100, 'UTF-8');
            } else {
                $description = utf8_encode(substr(utf8_decode($item->idProduto->titulo), 0, 100));
            }

            $item = Array(
                'id' => $item->idProduto->primaryKey,
                'description' => $description,
                'quantity' => $item->quantidade,
                'amount' => $item->valor,
                'weight' => 2 * 1000,
				//'shippingCost' => ($model->envio / count($model->pedido_itens)), //Custo do envio, caso o calculo do correios seja feito pelo projeto
            );

            $paymentRequest->addItem($item);
        }

        // Referência do pedido no PagSeguro
        $paymentRequest->setReference($model->primaryKey . "_pedido");


        // url para redirecionar o comprador ao finalizar o pagamento
        $paymentRequest->setRedirectUrl(Yii::app()->createAbsoluteUrl('pagseguro/success'));

        // obtendo frete, descontos e taxas 
//        $total = number_format($model->envio, 2);
//
//        if ($total > 0) {
//            $item = Array(
//                'id' => 'extra_amount',
//                'description' => $model->descricao_envio,
//                '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.
         */
        try {
            $credentials = new PagSeguroAccountCredentials('EMAIL_DO_PAGSEGURO', 'TOKEN_DO_PAGSEGURO');
            $url = $paymentRequest->register($credentials);
            $this->redirect($url);
        } catch (PagSeguroServiceException $e) {
            Yii::log('PagSeguro: ' . $e->getMessage(), CLogger::LEVEL_INFO);
            throw new Exception($e->getMessage());
        }
    }

Newerton Vargas de Araújo
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users