wirecardBrasil / moip-sdk-php

Cliente em PHP para integração server-side com APIs Moip v2
MIT License
124 stars 90 forks source link

Erro ao capturar ValidationException quando o código de autorização está inválido #284

Closed wnqueiroz closed 4 months ago

wnqueiroz commented 6 years ago

Passos para reproduzir:

Execute o código em: https://github.com/moip/moip-sdk-php#gerando-access-token-oauth Dentro de um try-catch:

try {

    $redirect_uri = 'http://seusite.com.br/callback.php';
    $client_id = 'APP-18JTHC3LOMT9';
    $scope = true;
    $connect = new Connect($redirect_uri, $client_id, $scope, Connect::ENDPOINT_SANDBOX);
    $client_secret = '20f76456f6ec4874a1f38082d3139326';
    $connect->setClientSecret($client_secret);
    $code = 'f9053ca6e9853dd73f0bc4f332a5ce337b0bb0da'; // defina um código errado
    $connect->setCode($code);
    $auth = $connect->authorize();
    print_r($auth);

} catch (ValidationException $e) {
    echo $e->__toString();
}

Detalhes:

O erro acontece em: moip/moip-sdk-php/src/Exceptions/ValidationException.php na linha 68 A mensagem: "Invalid argument supplied for foreach()" OBS: depurei o $this->errors no foreach e está retornando em uma string: {"error":"invalid_client"}

eldes commented 4 years ago

Solução Possível

Sugiro mudar o lançamento da exceção no método authorize() da classe Connect (linha 254) de:

throw new ValidationException($http_response->status_code, $http_response->body);

para:

throw new ValidationException($http_response->status_code, [json_decode($http_response->body)->error]);

Porque o construtor da ValidationException espera um array como segundo argumento, mas o $http_response->body, que é passado, é uma string JSON.