Pasar y analizar el campo personalizado IPN de PayPal

4 minutos de lectura

He configurado un archivo IPN de PayPal. Cuando el usuario está en el sitio y presiona enviar, los detalles sobre la transacción se cargan en la base de datos. La identificación relevante se envía a través de PayPal como campo personalizado. Cuando se completa el pago, la IPN se usa para actualizar la base de datos como transacción completada según la identificación.

Todo está bien.

Sin embargo, esta es la parte difícil. También necesito actualizar otra tabla: un código de descuento/cupón db. La actualización se basa en el código ingresado y también en la cantidad de veces que aún se puede usar el código. Básicamente, si fue 50 veces, después de usarlo una vez, la base de datos se actualizaría con 49. Entonces, necesito pasar el código y los usos restantes permitidos, así que puedo decir actualizar tabla donde código = XXXX (actualizar nuevo valor de 49, etc.).

Puedo averiguar cómo pasar todos estos valores en el campo personalizado, pero no puedo averiguar cómo analizarlos nuevamente. Lea acerca de cómo separarlos con: etc., pero necesita algunos consejos de alguien que lo haya hecho antes.

Así es como regresan actualmente los detalles de IPN:

$personalizado = $_POST[‘custom’];

Gracias.

  • Encontré este bit de código …

    – usuario718359

    30 sep.

  • $temp = $_POST[‘custom’]; // & & ip & visitorId & attributionInfo list($, $, $custIP, $visitorId, $attributionInfo) = explotar(“&”, $temp, 5);

    – usuario718359

    30 sep.

Hice esto recientemente,
Envíe su campo personalizado de Paypal a los datos como lo haría, dentro de ese campo personalizado, use un separador para dividir sus datos. En el siguiente ejemplo, los valores se dividen usando un “|”, puede usar cualquier carácter que desee que esté disponible en su juego de caracteres.

$member_id = 1;
$some_other_id = 2;
<input type="hidden" name="custom" value="<?php echo $member_id.'|'.$some_other_id ?>"/>

Esto generará:

<input type="hidden" name="custom" value="1|2"/>

Cuando obtenga la información de paypal (la respuesta de IPN), procéselo así:

$ids = explode('|', $_POST['custom']); // Split up our string by '|'
// Now $ids is an array containing your 2 values in the order you put them.
$member_id = $ids[0]; // Our member id was the first value in the hidden custom field
$some_other_ud = $ids[1]; // some_other_id was the second value in our string.

Básicamente, enviamos una cadena con un delimitador personalizado que elegimos a paypal, paypal nos lo devolverá en la respuesta de IPN. Luego necesitamos dividirlo (usando la función explotar()) y luego hacer lo que quieras con él.

Cuando obtenga su valor de la base de datos, selecciónelo usando métodos normales, luego simplemente disminúyalo en 1 usando:

$val_from_db--; // Thats it!, Takes the current number, and minus 1 from it.

  • ¿Es este poco correcto? debería ser -1; en lugar –;?? $val_from_db–;

    – usuario718359

    30 sep. 2011 a las 13:00

  • ¡¡¡Funciona perfectamente!!! (excepto por la sección $val_from_db que aún no he probado ni resuelto… trabajando en eso ahora…

    – usuario718359

    30 sep.

  • Este es probablemente el mejor método. Es una pena que PayPal no proporcione varios campos personalizados. Creo que lo diseñaron para que use un número de factura para determinar el pedido en lugar de usar una identificación de miembro u otro identificador. Para evitar el uso de la explosión de PHP, simplemente puede almacenar una identificación para una fila en una tabla de base de datos que almacena toda esta información.

    – Daniel Oeste

    24 jul.

  • Solo recuerde que hay un límite de 256 caracteres en el tamaño del campo personalizado.

    – Patanjali

    20 mayo 2016 en 09:15

Esto amplía la solución de JustAnil.

HTML:

<input type="hidden" name="custom" value="some-id=1&some-type=2&some-thing=xyz"/>

y su secuencia de comandos IPN se vería así:

<?php
    parse_str($_POST['custom'],$_CUSTOMPOST);

    echo $_CUSTOMPOST['some-id'];
    echo $_CUSTOMPOST['some-type'];
    echo $_CUSTOMPOST['some-price'];
?>

Es posible que desee volver a verificar que parse_str realiza urldecode en los elementos de matriz resultantes.

  • Esto rompe los valores de NVP devueltos, ya que se devolverá como “&custom=some-id=1&some-type=2&some-thing=xyz”.

    – Daniel Oeste

    22 jul.


  • Sería mejor usar otro separador como | o , en el campo personalizado y luego use explotar para devolver una matriz.

    – Daniel Oeste

    24 jul.

Aquí hay un ejemplo usando JSON:

<?php
  $arr = array($member_id, $coupon);
  $data = json_encode($arr);
?>
<input type="hidden" name="custom" value="<?= $data ?>"/>

Luego por el otro lado:

$custom = json_decode($_POST['custom'], true);
$member_id = $custom[0];
$coupon = $custom[1];

También puede analizar matrices asociativas también:

<?php
  $arr = array('id' => $member_id, 'coupon' => $coupon);
  $data = json_encode($arr);
?>
<input type="hidden" name="custom" value="<?= $data ?>"/>

Luego por el otro lado:

$custom = json_decode($_POST['custom'], true);
$member_id = $custom['id'];
$coupon = $custom['coupon'];

Hay una buena simetría cuando se usa JSON para analizar los datos.

.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad