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.

Articol scris de adrian

Sunt Adrian Basalic şi fac lucrurile să meargă cu mai mult sau mai puţin succes de câţiva ani buni.

2 Comentarii to “Paypal IPN returnează INVALID”

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

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

Show trackbacks

Ți-a plăcut articolul? Lasă un comentariu!

You can insert code snippets using BBcode:
[js].[/js] [html].[/html] [php].[/php] [css].[/css]
You can also use some HTML tags:
<blockquote>.</blockquote> <code>.</code> <a href="">.</a> <strong>.</strong> <em>.</em>