Paypal IPN stuurt vaker VERIFIED

Gestart doorJesper4 reacties41 weergaven

5 berichten · pagina 1 van 1

Jesper

Lid · Topicstarter

Berichten
3.532
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Ik heb dit stukje code:

Codeblok (1024b.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104


include(../config.php);
// STEP 1: read POST data

// Reading POSTed data directly from $_POST causes serialization issues with array data in the POST.
// Instead, read raw POST data from the input stream.

$raw_post_data = file_get_contents(php://input);
$raw_post_array = explode(&, $raw_post_data);
$myPost = array();
foreach ($raw_post_array as $keyval) {
$keyval = explode (=, $keyval);
if (count($keyval) == 2)
$myPost[$keyval[0]] = urldecode($keyval[1]);
}

// read the IPN message sent from PayPal and prepend cmd=_notify-validate
$req = cmd=_notify-validate;
if(function_exists(get_magic_quotes_gpc)) {
$get_magic_quotes_exists = true;
}

foreach ($myPost as $key => $value) {
if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) {
$value = urlencode(stripslashes($value));
}
else {
$value = urlencode($value);
}

$req .= "&$key=$value";
}


// STEP 2: POST IPN data back to PayPal to validate

$ch = curl_init(https://www.paypal.com/cgi-bin/webscr);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(Connection: Close));

// In wamp-like environments that do not come bundled with root authority certificates,
// please download cacert.pem from "http://curl.haxx.se/docs/caextract.html" and set
// the directory path of the certificate as shown below:
// curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . /cacert.pem);

if( !($res = curl_exec($ch)) ) {
// error_log("Got " . curl_error($ch) . " when processing IPN data");
curl_close($ch);
exit;
}

curl_close($ch);

// STEP 3: Inspect IPN validation result and act accordingly

if (strcmp ($res, "VERIFIED") == 0) {
// The IPN is verified, process it:
// check whether the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process the notification

// assign posted variables to local variables

$item_name = $_POST[item_name];
$item_number = $_POST[item_number];
$payment_status = $_POST[payment_status];
$payment_amount = $_POST[mc_gross];
$payment_currency = $_POST[mc_currency];
$txn_id = $_POST[txn_id];
$receiver_email = $_POST[receiver_email];
$payer_email = $_POST[payer_email];

// IPN message values depend upon the type of notification sent.
// To loop through the &_POST array and print the NV pairs to the screen:


$username = jespar;
$apicode = xT;
$testmode = true;
$admin_mail = jesper0100@live.nl;
$jouw_domein = ;
$return = file_get_contents(http://www.one2xs.com/api/bestel/handle?user=.$username.&key=.sha1($apicode).&product=mc&type=1024&whitelabel=2&testmode=.($testmode == true ? 1 : 0).&whitelabel_server=.$jouw_domein);

$return = new SimpleXMLElement($return);

if(isset($return->error))
{

$mysql->query("INSERT INTO paylog(ip, pakket, datum, status) VALUES(".$_SERVER[REMOTE_ADDR].", 1024, ".date("Y-m-d H:i:s").", niet gelukt)");
mail($admin_mail, Fout in de API, Een bezoeker met IP .$_SERVER[REMOTE_ADDR]. probeerde op .date(d-m-Y H:i:s). een server te bestellen, maar de API gaf dit terug: .$return->error);

}

else
{
$mysql->query("INSERT INTO paylog(ip, pakket, datum, status) VALUES(".$_SERVER[REMOTE_ADDR].", 1024, ".date("Y-m-d H:i:s").", gelukt)");
$mysql->query("INSERT INTO buys(locatie, user, pass, email) VALUES(".$return->channel->panel_location.", ".$return->channel->panel_user.", ".$return->channel->panel_pass.", ".$mysql->real_escape_string($_POST[os0]).")");
}

}
else if (strcmp ($res, "INVALID") == 0) {
// IPN invalid, log for manual investigation
echo "The response from IPN was: " .$res ."";
}
else {
echo Onbekende error;
}

?>

Wanneer de betaling gelukt is word er een server aangemaakt, maar na een aantal seconden gebeurt dit weer en nog een keer. Ik weet niet waar het aanligt misschien dat paypal vaker VERIFIED terug stuurt?
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Volgens mij is één request van PayPal en eentje van de bezoeker zelf.
Even de requests ($_SERVER, $_POST en $_GET) loggen en kijken wat het verschil is.
0
Jesper

Lid · Topicstarter

Berichten
3.532
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Lennard schreef:
Volgens mij is één request van PayPal en eentje van de bezoeker zelf.
Even de requests ($_SERVER, $_POST en $_GET) loggen en kijken wat het verschil is.
Maar de bezoeker wordt naar succes.php gestuurt:

Codeblok (succes.php):

1
2
3
4
5
6
7


include(config.php);
echo Uw gegevens komen op de email te staan
;
echo Veel succes met uw server.
;
echo
;
echo $hostnaam;
?>

en paypal doet een request naar 1024b.php (de code in starterspost)
0
Berichten
13.482
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
In de code staat in de comments dit:

Quote:
// The IPN is verified, process it:
// check whether the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process the notification

Je moet dus zelf controleren of deze transactie niet al eens gecheckt is.

Weet je trouwens zeker dat je script een lege output heeft? Als er iets op die pagina staat, denkt Paypal dat de verificatie mislukt is en probeert hij het nog eens..
0
Jesper

Lid · Topicstarter

Berichten
3.532
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Sjoerd schreef:
In de code staat in de comments dit:

Quote:
// The IPN is verified, process it:
// check whether the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process the notification
Je moet dus zelf controleren of deze transactie niet al eens gecheckt is.

Weet je trouwens zeker dat je script een lege output heeft? Als er iets op die pagina staat, denkt Paypal dat de verificatie mislukt is en probeert hij het nog eens..

Bedankt sjoerd, topic mag dicht biggrin
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren