2011-09-30 14 views
9

Ho impostato un file IPN PayPal. Quando l'utente si trova sul sito e viene premuto invia i dettagli della transazione, viene caricato nel db. L'ID pertinente viene inviato tramite PayPal come campo personalizzato. Quando il pagamento completa IPN utilizzato per aggiornare DB come transazione completata sulla base di id.Passing and Parse PayPal IPN Campo personalizzato

Tutto va bene.

Tuttavia, questo è il trucco. Devo anche aggiornare un'altra tabella: un codice sconto/coupon db. L'aggiornamento è basato sul codice inserito e anche sul numero di volte in cui il codice può ancora essere utilizzato. Fondamentalmente se fosse 50 volte, dopo aver usato una volta il db sarebbe stato aggiornato con 49. Quindi ho bisogno di passare il codice e gli usi rimanenti consentiti così posso dire aggiornare la tabella dove codice = XXXX (aggiorna il nuovo valore di 49 ecc.).

Posso capire come passare tutti questi valori nel campo personalizzato, ma non riesco a capire come analizzarli di nuovo? Leggi di separarli con: ecc, ma hai bisogno di un consiglio da qualcuno che ha già fatto.

Questo è il modo IPN dettagli attualmente torna:

$ personalizzati = $ _POST [ 'custom'];

Grazie.

+0

È venuto attraverso questo bit di codice .. – user718359

+0

$ temp = $ _POST ['personalizzato']; // & & IP & visitorId & attributionInfo list ($ , $ , $ custIP, $ visitorId, $ attributionInfo) = explode ("&", $ temp, 5); – user718359

risposta

13

ho fatto proprio questo di recente,
Invia il tuo campo personalizzato paypal per i dati come il tuo sarebbe, all'interno di quel campo personalizzato, utilizzare un separatore per dividere i tuoi dati. Nell'esempio seguente, i valori sono divisi usando un "|", puoi usare qualsiasi carattere che desideri sia disponibile nel tuo set di caratteri.

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

Questo stamperà:

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

Quando si riceve le informazioni da PayPal (la risposta IPN) processo in questo 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. 

Quindi, in pratica, abbiamo inviare una stringa con un delimitatore personalizzato che scegliamo su paypal, paypal ce lo restituirà nella risposta IPN. Abbiamo quindi bisogno di dividerlo (usando la funzione explode()) e poi fare ciò che vorresti con esso.

Quando ottenete il vostro valore dal database tua selezionarlo con metodi normali, poi basta farlo diminuire 1 utilizzando:

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

Grazie .. sto andando a provare questo adesso .. – user718359

+0

E 'un po' giusto? dovrebbe essere -1; piuttosto che --;?? $ Val_from_db--; – user718359

+0

Funziona perfettamente !!! (eccetto per la sezione $ val_from_db che non ho ancora testato o risolto ancora .. stiamo lavorando su questo ora .. – user718359

10

Questo espande su una soluzione di JustAnil.

HTML:

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

e lo script IPN sarebbe simile a questa:

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

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

Si può decidere di verificare che parse_str esegue urldecode sulla conseguente elementi dell'array.

+0

Questo rompe i valori NVP restituiti poiché verrà restituito come "& custom = some-id = 1 & some-type = 2 & some-thing = xyz". –

+0

Sarebbe meglio usare un altro separatore come | o, nel campo personalizzato e quindi usa esplode per restituire un array. –

+0

Soluzioni molto eleganti. Funziona come un incantesimo – MrD

0

Ecco un esempio di utilizzo JSON:

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

Poi dall'altra parte:

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

È inoltre possibile analizzare array associativi troppo:

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

poi dall'altro lato:

C'è una bella simmetria quando si utilizza JSON per analizzare i dati.

Problemi correlati