login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Paypal IPN

Offline rpgnox - 28/02/2010 20:44
Avatar van rpgnoxPHP interesse Voor paypal heb ik na veel werk eindelijk het betaal systeem af. Nu wil ik alleen nog dat na een betaling een verificatie wordt gemaakt en bij een succesvolle betaling een update in mijn database plaats vindt.

Het probleem is echter dat ik dit gedeelte niet volledig werkende krijg.

Wellicht iemand enig idee hoe ik na een succesvolle betaling de volgende update werkende krijg?

  1. mysql_query("UPDATE `users` SET `callcredits`=`callcredits`+'30' WHERE `login`='$data->login'");


Script:

  1. <?php
  2. /*
  3. Simple IPN processing script
  4. based on code from the "PHP Toolkit" provided by PayPal
  5.  
  6. mysql_query("UPDATE `users` SET `callcredits`=`callcredits`+'30' WHERE `login`='$data->login'");
  7. */
  8.  
  9. include("../settings.php");
  10. if(!(@mysql_connect("$host","$user","$pass") && @mysql_select_db("$tablename"))) {echo"Geen verbinding gevonden";}
  11.  
  12. include("../../language/dutch.php");
  13.  
  14. $url = 'https://www.paypal.com/cgi-bin/webscr';
  15. $postdata = '';
  16. foreach($_POST as $i => $v) {
  17. $postdata .= $i.'='.urlencode($v).'&';
  18. }
  19. $postdata .= 'cmd=_notify-validate';
  20.  
  21. $web = parse_url($url);
  22. if ($web['scheme'] == 'https') {
  23. $web['port'] = 443;
  24. $ssl = 'ssl://';
  25. } else {
  26. $web['port'] = 80;
  27. $ssl = '';
  28. }
  29. $fp = @fsockopen($ssl.$web['host'], $web['port'], $errnum, $errstr, 30);
  30.  
  31. if (!$fp) {
  32. echo $errnum.': '.$errstr;
  33. } else {
  34. fputs($fp, "POST ".$web['path']." HTTP/1.1\r\n");
  35. fputs($fp, "Host: ".$web['host']."\r\n");
  36. fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
  37. fputs($fp, "Content-length: ".strlen($postdata)."\r\n");
  38. fputs($fp, "Connection: close\r\n\r\n");
  39. fputs($fp, $postdata . "\r\n\r\n");
  40.  
  41. while(!feof($fp)) {
  42. $info[] = @fgets($fp, 1024);
  43. }
  44. fclose($fp);
  45. $info = implode(',', $info);
  46. if (eregi('VERIFIED', $info)) {
  47. // yes valid, f.e. change payment status
  48. } else {
  49. // invalid, log error or something
  50. }
  51. }
  52. ?>

3 antwoorden

Gesponsorde links
Offline Koen - 28/02/2010 20:50
Avatar van Koen PHP expert Wat werkt er dan precies niet?

Wat ik wel weet is dat deze code voor een knelpunt zal zorgen:
  1. fputs($fp, "Connection: close\r\n\r\n");
  2. fputs($fp, $postdata . "\r\n\r\n");

In de header moet elke regel worden afgesloten door een carriage return gevolgd door een linefeed (\r\n), enkel bij de laatste header moet een dubbele witregel worden meegegeven om aan te geven dat de headers gedaan zijn. Je code zal dan zo worden:
  1. fputs($fp, "Connection: close\r\n");
  2. fputs($fp, $postdata . "\r\n\r\n");
Offline rpgnox - 28/02/2010 20:55
Avatar van rpgnox PHP interesse Oke bedankt, wijzig ik dat ook gelijk.

Probleem is dat er geen update wordt gemaakt. Na een betaling wordt er wel gelinkt naar het ipn script maar de update in de db vindt niet plaats. Ik weet dus niet exact waar het update gedeelte dient te staan, waarschijnlijk gaat het hier fout.
Offline Koen - 28/02/2010 21:08
Avatar van Koen PHP expert Ik veronderstel dat je dan gewoon die query moet uitvoeren op de plaats van "// yes valid, f.e. change payment status "? Vergeet niet om een verbinding te maken met je database.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.21s