pagseguro-sdk-php
pagseguro-sdk-php copied to clipboard
Charset não definido resulta no erro Unsupported Media Type
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
- Instale a lib com o composer
- Use variáveis de ambiente para setar as credenciais, mas não sete a variável PAGSEGURO_CHARSET
- Tente criar um novo pagamento com quaisquer dados
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 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.