aaferna / SAPIDK-MercadoPago-PHP

SDK Alternativo de Mercado Pago en PHP
Apache License 2.0
2 stars 0 forks source link

Send price to QR #1

Closed eroberto17 closed 5 years ago

eroberto17 commented 5 years ago

Hola Agustin, cómo estás? ante todo primero quiero darte las gracias por el aporte a la comunidad, y felicitarte por tu laburo. Esta muy bueno y muy claro, cosa que en la sección de developers de MP no lo está, vos pudiste sacarme de un montón de dudas que tenía al respecto.

Estuve probando bastante todas las funcionalidades, creo que logré entender a grandes rasgos como funciona. Pero lo que me está sucediendo con el QR es que no puedo lograr enviarle a la app del cliente el importe.

Tengo dos cuentas, ambas están registradas y homologadas para laburar en producción. De una de ellas generé un local (el $token es el de producción), le registré un par de QR y se los asocié al local de prueba que creé también. Hice de las dos maneras: con 'fixed_amount' => true y 'fixed_amount' => false

` [8] => Array ( [user_id] => 33403438 [name] => caja6 [fixed_amount] => 1 [store_id] => 30173012 [external_id] => caja5 [id] => 2965585 [qr] => Array ( [image] => https://www.mercadopago.com/instore/merchant/qr/2965585/4f8df91a398547a89480f0d21ad6cb558d37913eb94848dba0644c328e48b5d3.png [template_document] => https://www.mercadopago.com/instore/merchant/qr/2965585/template_4f8df91a398547a89480f0d21ad6cb558d37913eb94848dba0644c328e48b5d3.pdf [template_image] => https://www.mercadopago.com/instore/merchant/qr/2965585/template_4f8df91a398547a89480f0d21ad6cb558d37913eb94848dba0644c328e48b5d3.png )

                [date_created] => 2019-09-12T17:29:31.000-04:00
                [date_last_updated] => 2019-09-12T17:31:00.000-04:00
            )

        [9] => Array
            (
                [user_id] => 33403438
                [name] => 2965585
                [fixed_amount] => 
                [store_id] => 30173012
                [external_id] => 2965585
                [id] => 2965678
                [qr] => Array
                    (
                        [image] => https://www.mercadopago.com/instore/merchant/qr/2965678/866ab704e52042538cefdae735a0e3fd04a35aaca07a4d4084be51bbc0755baf.png
                        [template_document] => https://www.mercadopago.com/instore/merchant/qr/2965678/template_866ab704e52042538cefdae735a0e3fd04a35aaca07a4d4084be51bbc0755baf.pdf
                        [template_image] => https://www.mercadopago.com/instore/merchant/qr/2965678/template_866ab704e52042538cefdae735a0e3fd04a35aaca07a4d4084be51bbc0755baf.png
                    )

                [date_created] => 2019-09-12T17:36:36.000-04:00
                [date_last_updated] => 2019-09-12T17:39:03.000-04:00
            )`

Luego:

`<?php

include('./library/core.php');

$external_id = $_GET['external_id']; //caja5 y 2965585

$dataArray = array (
    // 'external_reference' => "REFERENCIA PARA IDENFICAR LA VENTA CUANDO IPN",
    // 'notification_url' => "URL A IPN",
    'items' =>
        array (
                0 =>
                array (
                    'title' => 'Pago Presencial',
                    'currency_id' => 'ARS',
                    'unit_price' => $_GET['unit_price'], // NO STRING Precio de la venta
                    'quantity' => 1,
                ),
        ),
);

$url = $qrPost.$user_id."/".$external_id; // Condicionado por user_id y external_id

$response = post($qrlist, $dataArray, $token);

?> `

Lo que sucede con fixed_amount' => true (para el external_id "caja5"), es que cuando escaneo el QR me dice que le avise al cajero que voy a pagar con QR, le pongo ya le avise, y ahi se me queda la app esperando que el cajero registre el cobro. Ejecuto el código de arriba y no pasa nada. Y para fixed_amount' => false (para el external_id "2965585"), directamente cuadno escaneo, la app me pide que ingrese el importe de la compra.

La verdad le di vueltas por todos lados y no encuentro dónde le estoy errando, claramente no estaría entendiendo como funciona esta parte creo 😂

Bueno, muchas gracias desde ya por el tiempo sobre todo.

aaferna commented 5 years ago

Hola @survirtual04, es un gusto saber que te gusto y fue de utilidad mi herramienta, más un placer estar hablando con vos hoy.

Antes que nada, me gustaría saber cuál fue tu inconveniente, descontento o confusión con mi material así lo puedo corregir en su defecto agregar más información, si entendamos que esto lo estoy armando de a poco ya que es muy extenso y por lógica quiero comprobar el correcto funcionamiento de todo esto.

Comencemos

fixed_amount está pensado para tener dos métodos de venta o de aplicación 100% distintos bajo mi criterio, si el valor queda en true logras que únicamente vos indiques que tiene que pagar el cliente en cualquier momento del escenario y me refiero a escenario ya que mercado pago te dice "Indícale al vendedor que ya escaneaste el QR" y si es false el cliente o vos podrán ingresar el valor de la venta, la diferencia es que si el cliente pone el precio no tendrás "external_reference" si lo mandas vos si, por lo que de esa forma tendrás el retorno y el estado del pago, sea antes o después de ese mensaje, el QR esperara que vos ingreses el pago por POST a la siguiente Función

<?php

include('./library/core.php');

// Valores que envio al ARRAY

    $referenciainterna = "";
    $titulodelaventa = "";
    $preciodelaventa = "";

// Valores que envio en URL

    $user_id = "";
    $referenciadelqr = ""; // external_id indicado cuando creaste el qr

// Array Data con la informacion requerida para la Venta

    $dataArray = array (
      // 'external_reference' => $referenciainterna,
      // 'notification_url' => "",
      'items' =>
        array (
            0 =>
            array (
              'title' => $titulodelaventa,
              'currency_id' => 'ARS',
              'unit_price' => $preciodelaventa, 
              'quantity' => 1,
            ),
        ),
    );

// Funcion al QR

    $response = post($qrPost.$user_id."/".$referenciadelqr, $dataArray, $token);

?>

Esta función te tendría que responder lo siguiente:

Array
(
    [id] => ...
    [items] => Array
        (
            [0] => Array
                (
                    [id] => 
                    [title] => Pago Presencial NVI: 
                    [quantity] => 1
                    [currency_id] => ARS
                    [unit_price] => 122
                    [description] => 
                    [picture_url] => https://mla-s2-p.mlstatic.com/...
                )

        )

    [collector_id] => ...
    [collector] => Array
        (
        )

    [total_amount] => 122
    [amount] => 122
    [external_reference] => 
    [operation_type] => regular_payment
    [payment_methods] => Array
        (
            [excluded_payment_methods] => Array
                (
                    [0] => Array
                        (
                            [id] => 
                        )

                )

            [excluded_payment_types] => Array
                (
                    [0] => Array
                        (
                            [id] => ticket
                        )

                    [1] => Array
                        (
                            [id] => atm
                        )

                )

        )

    [marketplace] => NONE
    [marketplace_fee] => 0
    [back_urls] => Array
        (
            [success] => 
            [pending] => 
            [failure] => 
        )

    [payer] => Array
        (
            [id] => 0
            [email] => 
            [identification] => Array
                (
                    [number] => 
                    [type] => 
                )

            [address] => Array
                (
                    [primary] => 
                    [zip] => 
                )

            [phone] => Array
                (
                    [area_code] => 
                    [number] => 
                )

            [internal_tags] => Array
                (
                )

        )

    [expires] => 
    [additional_info] => 
    [site_id] => MLA
    [client_id] => ...
    [processing_modes] => Array
        (
            [0] => aggregator
        )

    [internal_metadata] => Array
        (
        )

)

Sea de quien sea el QR, yo te recomiendo que lo testes con cuentas reales ya que con cuentas ficticias no obtienes los verdaderos resultados.

Por ejemplo, obviamente la cuenta con QR sea la comercial y una cuenta amiga con la que te hagas transacciones con 10$ para ver cuales respuestas obtienes. No hay mínimo en este aspecto y resultan ser escenarios mucho más realistas y con respuestas exactas.

Creo haber entendido tu problema, sea por si o por no, por favor coméntame tu devolución y cual fue tu resultado con esto.

Estaré atento a Git, Saludos!

aaferna commented 5 years ago

Voy a hacer un apéndice:

Volví a leer tu pregunta y haces alusión a un QR llamado caja5 y caja6 pero en los Array que vos me muestras, no aparece caja5 si no caja6 y 2965585

¿Estas enviándole la consulta al QR correcto?

De no ser así arriba Tenes la respuesta. De ser que si envías al QR correcto, necesitaría que pruebes con otra cuenta comercial.

eroberto17 commented 5 years ago

Agustin, decirte muchas gracias es poco. Sos un crack! ahora si, funciona perfecto! Creo que el problema estaba en el post, por algún motivo con ese ejemplo funciona de maravilla (por ahí deberías modificarlo del ejemplo que está en tu wiki, con ese mismo ejemplo), hasta logré terminar de entenderlo. Como te dije antes, este aporte es de gran, gran utilidad. Ojalá te lo reconozcan en la comunidad, porque seguramente haya mucha gente que quiera empezar a integrarlo, por lo menos con PHP!

Mil gracias enserio.

aaferna commented 5 years ago

@survirtual04, Excelente! me alegro que hallas podido resolver tu problema a través de este ejemplo. No quiero dejar de lado y vuelvo a agradecer tu reconocimiento por este proyecto. Tomo tu recomendación y ya mismo voy a revisar el ejemplo a ver qué sucede.

Adicionalmente y sin compromiso, quería saber si le podés dar a Star y Watch al proyecto ya que de esa forma recibirás notificaciones sobre cómo van las actualizaciones del mismo y por supuesto si podes recomendar este paquete.

Agrego, en las primeras líneas de tu mensaje indicabas ..."creo que logré entender a grandes rasgos como funciona."... quisiera saber si tuviste algún inconveniente para entenderme o si consideras que en algún momento es confusa la documentación. Dejo abierto el hilo para que me respondas con tiempo.

¡Gracias por comunicarte!

eroberto17 commented 5 years ago

Si, lo decía mas que nada por mis falencias como programador, pero le pongo garra ;) Considero que está todo muy claro. Como te comentaba en su momento, la documentación oficial de MP en la parte de desarrolladores no deja un ejemplo completo funcionando. En tu caso, además de explicar como funciona y darle una vuelta de rosca a la teoría, dejas un ejemplo concreto y claro, y sobre todo funcionando. Esa es la gran diferencia que todos buscan al momento de entender, un ejemplo.

Muchas gracias una vez mas!

aaferna commented 5 years ago

Gracias a vos nuevamente @survirtual04 cualquier cosa estoy disponible para tus dudas! Que tengas Buen Debug!