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>

windows apple dropbox facebook twitter