Foros del Web » Programando para Internet » PHP »

PayPal no retorna algunas variables $_POST

Estas en el tema de PayPal no retorna algunas variables $_POST en el foro de PHP en Foros del Web. Hola amigos. Un formulario que permite inscribir y pagar por medio de PayPal. Despúes del pago, PayPal retorna a la URL de retorno (input de ...
  #1 (permalink)  
Antiguo 19/10/2017, 15:42
Avatar de ghidalgoram  
Fecha de Ingreso: marzo-2008
Ubicación: Costa Rica
Mensajes: 446
Antigüedad: 16 años, 1 mes
Puntos: 7
Pregunta PayPal no retorna algunas variables $_POST

Hola amigos.

Un formulario que permite inscribir y pagar por medio de PayPal. Despúes del pago, PayPal retorna a la URL de retorno (input de PayPal return) que yo le indico.
Todo funcionaba muy bien. El día de ayer empezó a fallar.

He estado examinando el código y ver que me devuelve PayPal por medio de la siguiente función.

Código PHP:
      foreach($post as $key => $value){
          
$message.= $key " - " $value "<br />";
      } 
Yo le envio a PayPal variables de tipo como:

Cita:
'on1' => 'Nombre',
'os1' => 'María',
'on2' => 'Apellido1',
'os2' => 'Hidalgo',
y otras más

Todos esos datos LLEGAN a PayPal. El problema es que PayPal ya no me las retorna por $_POST


En la variable "cm" si me la está retornando.
Pero las variables de tipo on1, on2,... esas no.Otro problema que descubrí hoy es que tampoco me está retornando la variable $_POST['payer_status'].

En resumen, esto es lo que estoy enviando a PayPal:

cmd => _xclick
business => [email protected]
lc => es_MX
item_name => Bla bla.
item_number => Paquete 1
amount => 170.00
currency_code => USD
no_shipping => 1
rm => 2
return => http://tema.pruebas.ejemplo.com?q=pa...=order_confirm
cancel_return => http://tema.pruebas.ejemplo.com?q=paypal_exito
bn => PP-BuyNowBF:btn_paynowCC_LG.gif:NonHosted
on1 => Nombre
os1 => María
on2 => Apellido1
os2 => Hidalgo

y otros más...

[custom] => {"iu":0,"tpo":"3"}



Y me retorna:
tx XXXXXX
st Completed
amt 170.00
cc USD
item_name Inscripción blabla
item_number Paquete+1
cm {"iu":0,"tpo":"3"}


NOta adicionales:

Estoy trabajando en un Sandbox.

Agradezco su ayuda si alguien tiene idea que puede ser.
Gracias.
__________________
Loading...
  #2 (permalink)  
Antiguo 19/10/2017, 20:42
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: PayPal no retorna algunas variables $_POST

Hermano eso cambio en paypal, revisa la documentación, ellos en su express checkaout ahora no es necesario salir del sitio web para el pago, ya que el mismo abre como un modal para todo el tramite y retorna un json con la data necesaria para las validaciones.

https://developer.paypal.com/docs/in...egration-jsv4/

Cita:
- When a buyer clicks the PayPal button, your app sets up the payment option and begins the checkout in a lightbox or mobile browser.
- The buyer logs in to PayPal. Your app can optionally show payment details on a confirmation page.
- The buyer reviews and authorizes the payment.
- Your app returns control to the parent window or mobile app to finalize the payment.
Ya eso me paso y tuve que hacer los cambios necesarios, es bastante más practico que lo anterior de tener que salir de tu sitio y esperar las variable sde retorno
__________________
[email protected]
HITCEL
  #3 (permalink)  
Antiguo 26/10/2017, 17:41
Avatar de ghidalgoram  
Fecha de Ingreso: marzo-2008
Ubicación: Costa Rica
Mensajes: 446
Antigüedad: 16 años, 1 mes
Puntos: 7
Respuesta: PayPal no retorna algunas variables $_POST

Hola hermano.
Estoy muy agradecido con tu ayuda. Me ha sido muy útil. Actualmente estoy trabajando en el cambio en los ajustes.

Te agradezco nuevamente si por favor me puedes orientar un poco. He leído la documentación de PayPal pero necesito una guía. Esto es lo que tengo hasta el momento:

Código:
<!DOCTYPE html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://www.paypalobjects.com/api/checkout.js"></script>
</head>
<body>
    <div id="paypal-button-container"></div>

    <script>
    var CREATE_PAYMENT_URL  = '/pp/create-payment/';
    var EXECUTE_PAYMENT_URL = '/pp/execute-payment/';
        paypal.Button.render({

            env: 'sandbox', // sandbox | production

            // Show the buyer a 'Pay Now' button in the checkout flow
            commit: true,

            // payment() is called when the button is clicked
            payment: function() {
                return paypal.request.post(CREATE_PAYMENT_URL).then(function(data) {
                    console.log(" ID del pago retornado: " + data);
                    return data.id;
                });
            },

            // onAuthorize() is called when the buyer approves the payment
            onAuthorize: function(data) {
                return paypal.request.post(EXECUTE_PAYMENT_URL, {
                    paymentID: data.paymentID,
                    payerID:   data.payerID
                }).then(function() {

                    // The payment is complete!
                    // You can now show a confirmation message to the customer
                    alert("Felicidades! El pago fue realizado.");
                }).catch(function(err) {
                    console.log(err);
                });

                console.log(" Data " + data);
            },

            onCancel: function(data, actions) {
                return actions.redirect();
            }            

        }, '#paypal-button-container');
    </script>
</body>

El método de integración que escogí es "Server-side REST".
Estoy en "Creación del Pago".El archivo está en la ruta '/pp/create-payment/index.php'

Por medio del método "payment" llamamos al archivo '/pp/create-payment/index.php' y lo configuramos.


Dentro de este archivo index.php estoy incluyendo este código que encontré en PayPal como referencia:


Código:
curl -v https://api.sandbox.paypal.com/v1/payments/payment \\
  -H 'Content-Type: application/json' \\
  -H 'Authorization: Bearer Access-Token' \\
  -d '{
  "intent": "sale",
  "experience_profile_id":"experience_profile_id",
  "redirect_urls":
  {
    "return_url": "https://example.com",
    "cancel_url": "https://example.com"
  },
  "payer":
  {
    "payment_method": "paypal"
  },
  "transactions": [
  {
    "amount":
    {
      "total": "4.00",
      "currency": "USD",
      "details":
      {
        "subtotal": "2.00",
        "shipping": "1.00",
        "tax": "2.00",
        "shipping_discount": "-1.00"
      }
    },
    "item_list":
    {
      "items": [
      {
        "quantity": "1",
        "name": "item 1",
        "price": "1",
        "currency": "USD",
        "description": "item 1 description",
        "tax": "1"
      },
      {
        "quantity": "1",
        "name": "item 2",
        "price": "1",
        "currency": "USD",
        "description": "item 2 description",
        "tax": "1"
      }]
    },
    "description": "The payment transaction description.",
    "invoice_number": "merchant invoice",
    "custom": "merchant custom data"
  }]
}'

¿Cómo obtener el Access-Token ? Cualquier corrección se lo agradezco.

Gracias.
__________________
Loading...
  #4 (permalink)  
Antiguo 26/10/2017, 20:12
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: PayPal no retorna algunas variables $_POST

En este momento no recuerdo que opcion tome yo, pero te muestro el siguiente codigo:

primeramente cargo la libreria de payPal:
Código HTML:
Ver original
  1. <script src="https://www.paypalobjects.com/api/checkout.js"></script>

Luego indico el DIV donde se va a imprimir el boton de pago:

Código HTML:
Ver original
  1. <div id="paypal-buttonA"></div>

posterior mente preparo el siguiente código:

Código Javascript:
Ver original
  1. paypal.Button.render({
  2.         //env: 'production', // Or 'sandbox'
  3.         env: 'sandbox',//aqui indico si es sandbox o produccion
  4.         style: {
  5.             size: 'medium',
  6.             color: 'blue',
  7.             shape: 'pill',
  8.             /*label: 'checkout',*///Opcional, lo que quiere que diga la etiqueta del boton
  9.             fundingicons: false, // optional
  10.             branding: true // optional
  11.         },
  12.         client: {
  13.             sandbox:    '',//Aqui clave de api sandbox
  14.             production: ''//aqui clave de api para produccion
  15.         },
  16.         commit: true, // Esto en tru muestra el botion en el div indicado
  17.         payment: function(data, actions) {
  18.             return actions.payment.create({
  19.                 payment: {
  20.                     transactions: [
  21.                         {
  22.                             amount: { total: AQUI MONTO, currency: 'USD' },
  23.                             description:AQUI DESCRIPCION DEL PRODUCTO,
  24.                             custom:AQUI CODIGO DEL PRODUCTO
  25.                         }
  26.                     ]
  27.                 }
  28.             });
  29.         },
  30.         onAuthorize: function(data, actions) {
  31.             return actions.payment.execute().then(function(payment) {
  32.                 console.log(payment);//Aqui respuesta de PAYPAL un Json con la informacion del pago realizado
  33.             });
  34.         },
  35.         onCancel: function(data, actions) {
  36.             // Show a cancel page or return to cart
  37.             console.log(data);
  38.         }
  39.     }, '#paypal-buttonA');//Aqui indico donde imprime el boton

es la informacion que utilice para implementar los pagos paypal en mi sitio web, puedes repetir este codigo tantas veces como botones requieras en una misma pagina, la ventaja, el cliente nunca sale de tu sitio para realizar el pago y es más fácil manejar la información del pago, igual puedes combinar con una peticion ajax a otra pagina para validar por IPN el codigo de transacción.

Cuando ingresas a tu cuenta de PayPal developers, en el dashboard, ve a l a seccion REST API apps que esta más abajo, alli crea la app que va a gestionar las peticiones rest, esta al crearla te va a dar el Client ID necesario para el codigo anterior que te pase para sus pruebas , pero una vez creada esta app, veras un boton doble arriba de esta que dice Sandob-Live.

Al darle clic veras tu clientid para producción.

Cualquier cosa en la que te pueda ayudar, vere, Saludos.
__________________
[email protected]
HITCEL

Etiquetas: paypal
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:15.