mercadopago / DEPRECATED-sdk-php

DEPRECATED - MercadoPago PHP SDK
MIT License
1 stars 10 forks source link

Exception handling response "Payment not found" #147

Closed franco-testagrossa closed 5 years ago

franco-testagrossa commented 5 years ago

Estoy teniendo un error al momento en que la SDK (version = “0.5.3”) llama al endpoint: GET /v1/payments/$payment_id?access_token=$access_token

Linea donde salta la excepción: https://github.com/mercadopago/sdk-php/blob/master/lib/mercadopago.php#L526

ErrorException: Uncaught exception ‘ErrorException’ with message ’Illegal string offset ‘code’'

Haciendo la llamada que realizaba la SDK manualmente, la respuesta que recibí fue:

{
    "message": "Payment not found",
    "error": "not_found",
    "status": 404,
    "cause": [
        {
            "code": 2000,
            "description": "Payment not found",
            "data": null
        }
    ]
}

Por lo que entiendo: Internamente falla al momento de procesar un $response[‘status’] >= 400 cuando el $response.cause es un array e intenta recuperar el atributo code del response. (puede q esto requira validaciones de isset para ver si existe el campo en el array)

joelibaceta commented 5 years ago

@franco-testagrossa gracias por el reporte, lo reviso.

joelibaceta commented 5 years ago

@franco-testagrossa según pudimos revisar, desde la version 7.1 de PHP se cambia el comportamiento cuando se realiza una asignación mediante un indice a una variable que es inicialmente un String ( Esperando la inferencia de tipos ) lo cual genera una inconsistencia en la evaluación del método is_array y es tratado como un String generando el error Illegal string offset ‘code’ al tratar como un String a un Array.

$a = '';
$a[10] = 'foo';
is_array($a) // false

Vamos a evaluar alternativas para controlar este escenario

http://php.net/manual/en/migration71.incompatible.php#120845

joelibaceta commented 5 years ago

Fixed in https://github.com/mercadopago/sdk-php/commit/cdc0680cb4702f86b6df60fa58186e16d4a32147