PagSeguro + Zend 1.11

Depois de muita peleja, consegui integrar o Zend com o PagSeguro.

Agradeço ao Silas por ter fornecido seu plugin que permite o carregamento da library do PagSeguro.

Primeiro você cria um Plugin para o Zend para o carregamento da classe do PagSeguro, pois a um problema no autoloader com o Zend e a API do PagSeguro.

library/Core/Plugins/PagSeguro.php

<?php

class Core_Plugins_PagSeguro extends Zend_Controller_Plugin_Abstract {

public function preDispatch(Zend_Controller_Request_Abstract $request) {
error_reporting(0);
require_once 'PagSeguroLibrary/PagSeguroLibrary.php';
return $request;
}

}

Sendo que você deve pôr o PagSeguroLibrary dentro da library do Zend.

Agora vamos inicializar o Plugin, onde você pode inicializá-lo no Bootstrap ou no application.ini. Vou apresentar as 2 formas:

Application.ini

resources.frontController.plugins = "Core_Plugins_PagSeguro"

Agora você coloca as função do PagSeguro na sua action ou onde você desejar:

$paymentRequest = new PagSeguroPaymentRequest();
$paymentRequest->setCurrency("BRL"); 
$paymentRequest->setSender( Array( 'name' => 'Fulano de Tal', 'email' => 'email@email.com', 'areaCode' => '86', 'number' => '99998765' ) ); 
$paymentRequest->addItem( Array( 'id' => '0001', 'description' => 'Produto X'', 'quantity' => 1, 'amount' => 10.00, 'weight' => 0, ) );
 /* Informando o código de referência no objeto PagSeguroPaymentRequest */
 $paymentRequest->setReference($idTransacao);
 /* Quando finalizar o pagamento ser redirecionado para uma página de sucesso */
 $paymentRequest->setRedirectURL("http://lojamodelo.com.br/conclusao.html");

$paymentRequest->setMaxAge(172800); //2 dias

/* Obtendo credenciais definidas no arquivo de configuração */ 

$credentials = PagSeguroConfig::getAccountCredentials(); 

try { 
/* Utilizando credenciais definidas no arquivo de configuração */ $url = $paymentRequest->register($credentials);
 } catch (PagSeguroServiceException $e) {
 echo $e->getHttpStatus();
 // imprime o código HTTP foreach 
($e->getErrors() as $key => $error) {

 echo $error->getCode(); // imprime o código do erro 
 echo $error->getMessage(); // imprime a mensagem do erro 
} 
}

Se o formato das informações do telefone do seu usuário/cliente for (XX) XXXX-XXXX, a função abaixo (Obrigado Silas) vai te ajudar a separar o DDD do número:

$ddd = substr($telefone, 1, 2);
$telefone = str_replace(array('-', ' '), null, substr($telefone, 4));

Agora, na documentação do PagSeguro afirma que o atributo “amount” do addItem só permite do tipo float, nisto você ficará tentando colocar na sua variável o tipo float para ficar com o formato estilo decimal(como ele pedi na documentação), Ex: 40.00, sendo que quando você coloca float com o valor 40.00, ele não se torna decimal, Ex: 40, e se você colocar não sendo decimal no “amount” dará um erro na sua aplicação. Sendo o erro, mais ou menos, assim:

Failed opening 'PagSeguroXmlParser.php' for inclusion

Assim te dou a dica, que não tem na documentação, o “amount” permite formato string, assim você consegue, fácil e rapidamente, pôr “40.00” e funciona!

Nisto, perdi algumas horas tentando tudo que era possível,e depois percebi que funcionava com string…#VeryFlawed!

É isto, espero ser útil. =]

Fonte: https://groups.google.com/forum/#!topic/zfbrasil/U0gW8wp7Z9I

7 Comments

  1. Não estou conseguindo utilizar com o seu tutorial pois esta dando erro Fatal error: Class ‘PagSeguroPaymentRequest’ not found in /home/u775879670/public_html/zf-tutorial/application/controllers/PagamentoController.php on line 16 tem como vc dar um help?

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s