Paypal IPN returnează INVALID
Mi-a permis Ionuţ să vă mai scriu din problemele care mi-au dat multă bataie de cap şi cum le-am rezolvat până la urmă.
Astăzi vă povestesc despre Paypal IPN (Instant Payment Notification). E un sistem care funcţionează cam aşa:
- Tu trimiţi un POST către Paypal cu detaliile produsului (nume, amount, curency etc)
- Paypal trimite înapoi alt POST după ce userul plăteşte. Acesta conţine datele plătitorului, comezii etc. POST-ul acesta merge către un link setat de merchant în interfaţa lui de Paypal.
- La linkul respectiv, tu trebuie să iei postul care vine, să adaugi un câmp anume şi să-l trimiţi înapoi. Dacă Paypal primeşte ce trebuie, trimite înapoi la acelaşi link rezultatul: VALID sau INVALID.
Toate bune şi frumoase. Testele pe sandbox merg perfect, când treci live întoarce INVALID, fără vreun motiv anume.
Problema e în modul cum asamblezi variabilele din POST să le trimiţi înapoi la Paypal.
În manualul de implementare de la IPN, sample code-ul arată aşa:
// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
Am încercat si cu php_build_query din PHP5 dar fără succes.
Rezolvarea am găsit-o tot la ei pe site, dar prin altă documentaţie:
if(function_exists('get_magic_quotes_gpc'))
{
$get_magic_quotes_exists = true;
}
foreach ($_POST as $key => $value)
// Handle escape characters, which depends on setting of magic quotes
{
if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1){
$value = urlencode(stripslashes($value));
} else {
$value = urlencode($value);
}
$req .= "&$key=$value";
}
Trebuia ţinut cont şi de setarea pentru magic quotes.
- Posted in:
- PHP
- Tags:
- guest post,
- Paypal IPN


Good point, Paypal-ul este cosmar uneori si suportul slabut !
Am patit ceva asemanator, pe sandbox mergea dar live nu, ca voia https.
Schimbasera ei cerinta, dar fara sa fi schimbat si in documentatie.
E cam cel mai nasol Payment gateway cu care poti lucra, from a developer point of view. Documentatie este, insa de cele mai multe ori e veche si contradictorie. On the other hand, fiind foarte folosit, sigur s-a mai lovit careva de problema ta.