pagseguro-sdk-php icon indicating copy to clipboard operation
pagseguro-sdk-php copied to clipboard

Charset não definido resulta no erro Unsupported Media Type

Open enricodias opened this issue 4 years ago • 2 comments

Comportamento esperado

O charset padrão ISO-8859-1 deveria ser usado, definido no método post da classe PagSeguro\Resources\Http

Comportamento atual

Sem um charset definido, o request envia o charset vazio e resulta no erro Unsupported Media Type

{"timestamp":"2020-09-05T17:30:30.446+0000","status":415,"error":"Unsupported Media Type","message":"Invalid mime type \"application/x-www-form-urlencoded; charset=\": 'value' must not be empty","path":"/v2/checkout"}

Ambiente (produção, sandbox)

Sandbox

Passos para reproduzir o bug

  1. Instale a lib com o composer
  2. Use variáveis de ambiente para setar as credenciais, mas não sete a variável PAGSEGURO_CHARSET
  3. Tente criar um novo pagamento com quaisquer dados

enricodias avatar Sep 05 '20 17:09 enricodias

Acho que este comportamento está correto pois o parametro CHARSET é obrigado. Basta você definir uma varíavel de ambiente PAGSEGURO_CHARSET: 'UTF-8' ou adicionar o parametro no arquivo de configuração.

micaelomota avatar Oct 10 '20 17:10 micaelomota

@micaelomota pode ser obrigatório pela api, mas o cliente php nesse repositório deveria usar o padrão definido na classe PagSeguro\Resources\Http:

public function post($url, $data = null, $timeout = 20, $charset = 'ISO-8859-1')

O que acontece que é esse método é chamado com uma variável vazia no último parâmetro se o charset não tiver sido definido, ignorando o valor padrão definido no próprio método.

Como o charset vazio está resultando em um mime type quebrado, um envio de um post assim nem deveria ser permitido pela classe. A verificação desse tipo de problema é algo simples de implementar nos testes unitários, mas os testes unitários aqui só verificam a existência de atributos nas classes.

enricodias avatar Oct 10 '20 18:10 enricodias