Pages

Friday, July 1, 2011

Encoding Codificação Retorno PagSeguro

Muitos problemas com este tal de retorno de pagSeguro. Um 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, utilize o seguinte link para se cadastrar: https://pagseguro.uol.com.br/?ind=18984319

No comments:

Post a Comment