2011-09-30 28 views
9

He configurado un archivo de IPN de PayPal. Cuando el usuario está en el sitio y presione enviar detalles sobre la transacción se carga en el archivo db. La identificación relevante se envía a través de PayPal como el campo personalizado. Cuando se completa el pago IPN se usa para actualizar el DB como transacción completada en base al id.Pasar y analizar PayPal IPN Campo personalizado

Todo está bien.

Sin embargo, este es el truco. 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 la cantidad de veces que se puede usar el código. Básicamente si fue 50 veces, después de usarse una vez que la base de datos se actualizaría con 49. Por lo tanto, necesito pasar el código y los usos restantes permitidos, por lo que puedo decir tabla de actualización 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 encontrar la forma de analizarlos de nuevo? Lea acerca de separarlos con: etc., pero necesita algún consejo de alguien que lo haya hecho antes.

Es así como detalles de IPN actualmente regresa:

$ encargo = $ _POST [ 'costumbre'];

Gracias.

+0

Encontré este código ... – user718359

+0

$ temp = $ _POST ['custom']; // y y ip y visitorId y attributionInfo lista ($ , $, $ custIP, visitorId $, $ attributionInfo) = explode ("&", $ temp, 5); – user718359

Respuesta

13

Hice esto recientemente,
Envíe su campo personalizado de PayPal a los datos como lo haría, dentro de ese campo personalizado, utilice un separador para dividir sus datos. En el ejemplo siguiente, los valores se dividen utilizando un "|", puede usar cualquier carácter que desee 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 ?>"/> 

Esta es la salida:

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

Cuando se obtiene la información de PayPal (la respuesta IPN) proceso que de este modo:

$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. 

Así que, básicamente, enviamos una cadena con un delimitador personalizado que elegimos para paypal, PayPal nos lo devolverá en la respuesta de IPN. Luego tenemos que dividirlo (usando la función de explosión()) y luego hacer lo que quieras con él.

Al llegar a su valor a partir de la base de datos de su seleccionarlo con los métodos normales, a continuación, sólo disminuirlo 1 usando:

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

Gracias ... voy a probar esto ahora mismo ... – user718359

+0

¿Es esto cierto? debería ser -1; en lugar --;?? $ val_from_db--; – user718359

+0

¡Funciona perfectamente! (a excepción de la sección $ val_from_db que aún no he probado ni solucionado aún ... trabajando en eso ahora ... – user718359

10

Esto expande en 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 sería algo como esto:

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

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

Es posible que desee volver a comprobar que parse_str realiza urldecode de elementos de la matriz resultante.

+0

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

+0

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

+0

Soluciones muy elegantes. Funciona como un encanto – MrD

0

Aquí hay un ejemplo usando JSON:

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

A continuación, en 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 ?>"/> 

A continuación, en 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.

Cuestiones relacionadas