Encoding Codificação Retorno PagSeguro

O pagSeguro é um dos sistemas de pagamentos mais conhecidos e utilizados em e-commerces, mas sua documentação deixa a desejar um pouco, ainda assim, existem muitas boas pessoas na Web com diversos tutoriais, espero poder contribuir um pouco também. Este post já havia sido publicado no phpoo.com.br, mas estou desativando aquele e salvando aqui.

Um problema bem comum (eu imagino) é problema com codificação, que precisa ser ISO-8859-1.

Até no exemplo de página de retorno a primeira coisa que é feita no PHP é:

header('Content-Type: text/html; charset=ISO-8859-1');

Mas se você estiver com seu banco de dados em UTF-8, por exemplo, e suas páginas todas são UTF-8, primeiro você vai ter que dizer ao pagSeguro isso, o que pode ser feito adicionando essa informação na função de inicialização do pagSeguro em PHP que está disponível nos exemplos do site mesmo, a função ficá assim:

function pgs($args = array()) 
{
if ('array'!=gettype($args)) $args=array();
$default = array(
'email_cobranca' => 'seuemail@pagseguro.com.br',
'tipo' => 'CP',
'moeda' => 'BRL',
'encoding' => 'UTF-8',
);
$this->_config = $args+$default;
}


Com isso o pagSeguro sabe que você está enviando as informações no carrinho, dados do cliente e do produto em formato UTF-8, mas, quando ele te responder na página de retorno as informações virão em ISO-8859-1 igual... como resolver, depois de muita pesquisa, uma solução simples encontrei, basta fazer o seguinte:

mb_convert_encoding($_POST['CliNome'], 'UTF-8', 'ISO-8859-1,ASCII,UTF-8');

Faça isso para todos os campos String que vierem no post do pagSeguro e pronto. Campos com acentos e outros tantos serão salvos no banco de dados corretamente, sem isso, quando vinha uma cidade com nome 'Três de Maio', por exemplo, na minha base dedados MySQL estava salvando apenas 'Tr', os dados depois de qualquer acento eram perdidos.

Tem mais algumas informações úteis sobre este retorno que são abordadas pelo Dourado no site dele: http://dourado.net/2011/06/09/retorno-automatico-de-dados-do-pagseguro-em-phpmysql-com-produtos-versao-2-0/

Boa sorte pra quem for implementar!  Aproveitando o post, se você ainda não é cadastrado no PagSeguro, clique aqui ou na imagem abaixo para se cadastrar.

Comentários

Postagens mais visitadas deste blog

Solução para problemas com impressora de cheque Bematech DP-20

Como bloquear Facebook Youtube no Mikrotik

Iniciar sessão automaticamente no Xubuntu 13.04