PHP - Obtener datos de array json

   
Vista:

Obtener datos de array json

Publicado por Diego (20 intervenciones) el 17/05/2015 01:40:20
Buenas tardes. tengo el siguiente problema. Tengo que capturar unos datos que me postea un servidor de una conocida empresa de venta de productos y cobros por la web. Para esto tuve que hacer una url por la cual me llegan las notificaciones de las operaciones, yo las debo capturar y en base a eso genero algunas operaciones sobre una base de datos y envio de correos. Con este codigo recibo las notificaciones: (lo que esta asi XXXXX son datos de conexion y datos personales)

1
2
3
4
5
6
7
8
9
10
<?php
$topic = $_GET['topic'];              //dato que me llegan via url sobre la operacion
$id = $_GET['id'];                        //dato que me llegan via url sobre la operacion
require_once ('lib/XXXXX.php');   //accedo a la libreria necesaria para conectarme
$mp = new MP("XXXXXXX", "XXXXXXXXXX");       //datos de conexion
$mp->sandbox_mode(TRUE);                                   //estoy en modo prueba
$at = $mp->get_access_token();                               //token de acceso
$payment_info = $mp->get_payment_info($_GET["id"]);        //guardo toda la info en esta variable
print_r ($payment_info);                                                               //esto lo puse para ver por pantalla que estoy recibiendo
?>

Lo que veo es esto:


Array ( [status] => 200 [response] => Array ( [collection] => Array ( [sandbox] => 1 [id] => 1431708678 [site_id] => MLA [date_created] => 2015-05-15T12:51:17.544-04:00 [date_approved] => 2015-05-15T12:51:17.545-04:00 [money_release_date] => 2015-05-15T12:51:17.545-04:00 [last_modified] => 2015-05-15T12:51:17.545-04:00 [payer] => Array ( [id] => 164201714 [first_name] => Juan Carlos [last_name] => Gutierrez [phone] => Array ( [area_code] => [number] => 4811234162 [extension] => ) [identification] => Array ( [type] => [number] => ) [email] => juancarlos@gmail.com [nickname] => GUJU3127877 ) [order_id] => 14 [external_reference] => 14 [reason] => PRODUCTO DE PRUEBA [transaction_amount] => 100 [currency_id] => ARS [net_received_amount] => 100 [total_paid_amount] => 100 [shipping_cost] => 0 [status] => approved [status_detail] => accredited [installments] => 3 [payment_type] => credit_card [marketplace] => NONE [operation_type] => regular_payment [payment_method_id] => visa [marketplace_fee] => 0 [collector] => Array ( [id] => 169233675 [first_name] => XXXXXXXX [last_name] => XXXXXXXXXXXXXXXXX [phone] => Array ( [area_code] => [number] => XXXXXXXXXX [extension] => ) [email] => XXXXXXXXXXXXXXXXXXXXXX [nickname] => XXXXXXXXXX ) ) ) )

Yo no estoy familiarizado con esto y soy simplemente un aficionado....por lo que estuve viendo esto es un JSON que en realidad se vería así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Status code: 200 OK
{
    collection: {
        id: 52675155,
        site_id: "Identificador de país",
        operation_type: "regular_payment",
        order_id: "4442154",
        external_reference: "150671633",
        status: "approved",
        status_detail: "accredited",
        payment_type: "ticket",
        date_created: "2011-09-02T04:00:000Z",
        last_modified: "2011-09-12T02:52:530Z",
        date_approved: "2011-09-02T02:49:530Z",
        money_release_date: "2011-09-09T02:49:530Z",
        currency_id: "Tipo de moneda",
        transaction_amount: 50.5,
        shipping_cost: 0,
        finance_charge: null,
        total_paid_amount: 50.5,
        net_received_amount: 0,
        reason: "Título de lo que estás pagando",
        payer: {
            id: 36073078,
            first_name: "payer-name",
            last_name: "payer-surname",
            email: "payer@email.com",
            nickname: "payer-xxxxxx-nickname"
            phone: {
                area_code: "011",
                number: "3486 5039",
                extension: null
            }
        },
        collector: {
            id: 68961616,
            first_name: "collector-name",
            last_name: "collector-surname",
            email: "collector@email.com",
            nickname: "collector-xxxxxxxxxx-nickname"
            phone: {
                area_code: "211",
                number: "3486 5039",
                extension: null
            }
        }
    }
}

Por lo que estuve viendo en el sitio de esta empresa habría que usar esto, acceder a su API y pedir la info:

curl -X GET \
-H 'accept: application/json' \
'https://api.XXXXXXXXX.com/collections/notifications/identificador-de-la-operación?access_token=tu_access_token'

Pero la verdad que no se como se usa, ni siquiera se si esta sentencia es de php.

Alguien con experiencia que me oriente ???
Es lo único que me falta para terminar el sitio.
Muchas gracias !!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Obtener datos de array json

Publicado por xve (5522 intervenciones) el 17/05/2015 09:25:34
Hola Diego, lo que te develve es un array de valores...

Por ejemplo, si quieres saber el estado, puedes obtener el valor de aquí:
1
$payment_info["response"]["status"]

Espero que esto aclare tu duda... coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Obtener datos de array json

Publicado por Diego (20 intervenciones) el 17/05/2015 15:01:40
Hola xve, gracias por tu respuesta. Probé como me indicas pero no me funciona. Yo lo que necesito es guardar en una variable por ejemplo el valor de:

collection -> payer -> email

cuyo valor en este ejemplo es: "payer@email.com"

supongamos que la la variable es $var

como saco de $payment_info el dato collection -> payer -> email y lo guardo en $var

probé:

$var = $payment_info->collection->payer->email;

y

$var = $payment_info["collection"]["payer"]["email"];

ninguna me muestra nada, la variable $var queda vacia.
Ya no se como hacer, seguramente es un error muy sencillo, pero al ser muy novato se me complica.
Alguna otra sugerencia?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas

Obtener datos de array json

Publicado por Vainas (254 intervenciones) el 17/05/2015 19:24:03
Buenas:

Haciendo un poco de magia negra he visto que estas intentando interactuar con la api de mercadopago... aqui tienes la documentacion: https://developers.mercadopago.com/documentation/instant-payment-notifications#!/get-payments

Explico un poco lo que dice:

Se supone que mercadopago te va a enviar a http://www.yoursite.com/notifications?topic=payment&id=operation-ID que se ha realizado un pago con los parametros topic e id por GET como bien estas haciendo arriba. ellos solo necesitan que le respondas con una pagina en blanco (o que tenga al menos el status http en el valor 200 o 201) sino te van a estar reenviando todo el rato que se ha realizado el pago.

Digamos que quieres aprovechar la llamada para pedir mas info y guardarla, que es lo que estas haciendo. Ya que estas usando una libreria no es necesario que uses cURL (esto es un comando en linux para hacer peticiones http, tambien es una libreria en php y otros lenguajes para hacer una llamada http y recibir datos: json, html, xml....).

Segun lo que nos comentas $payment_info = $mp->get_payment_info($_GET["id"]); lo que hace es traer ese json pero convertido en un dato php en este caso en un array (como decia xve).

El problema es que no se ve claramente que son arrays dentro de arrays. La libreria los anida asi:

1
$payment_info["response"]["collection"]["status"]

Puedes usar var_dump($payment_info) metido dentro de etiquetas <pre> asi quizas veas mas claro lo que hay dentro de la variable. Algo asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Array ( [status] => 200
	[response] => Array (
	[collection] => Array (
			[sandbox] => 1
			[id] => 1431708678
			[payer] => Array (
				[id] => 164201714
				[first_name] => Juan Carlos
				[last_name] => Gutierrez
				[phone] => Array (
					[area_code] =>
					[number] => 4811234162
					[extension] =>
					)
			[status] => approved


Espero que sirva. (que mal explicada esta la api, normal que cueste).

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Obtener datos de array json

Publicado por Diego (20 intervenciones) el 17/05/2015 21:45:11
EXCELENTE VAINAS !!!!! No sabés cuánto me ayudaste...ya pude obtener los datos que me interesaban. Había estado muy cerca pero no me había dado cuenta...yo había puesto así:

$var = $payment_info["collection"]["payer"]["email"];

me faltaba [response]

Solucionado el tema te quiero agradecer profundamente por tu tiempo y ganas de ayudar.

Saludos !
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar