필자는 하루 종일 PayPal IPN 리스너를 샌드 박스 모드로 실험 해본 결과 내 용도로 샘플 코드를 수정하려고했습니다. 내가 얻는 결과 - 리스너 스크립트에 전송 된 각 IPN에 대해 6 줄의 데이터를 삽입하면 맨 아래에서 실행되는 MySQL 쿼리와 혼동됩니다. 필자는 쿼리를 변경했으며 데이터베이스에 삽입 된 내용을 재현하여 내 요점을 설명했습니다. 코드 아래의 표를 참조하십시오. 어떤 아이디어? 다른 API를 사용하기 전에 이런 일이 일어 났음을 기억하지만 확실한 원인이 될 수 있습니다. 양식이 제대로 작동하는지 확인할 수 있으면 데이터를 올바르게 탈출 할 수 있습니다.Paypal IPN 리스너 페이지에서 MySQL 데이터를 여러 번 삽입하는 중
+----+-------------------+---------------------+
| id | email | password |
+----+-------------------+---------------------+
| 25 | [email protected] | 2013-07-03 17:15:58 |
+----+-------------------+---------------------+
| 26 | [email protected] | 2013-07-03 17:15:58 |
+----+-------------------+---------------------+
| 27 | [email protected] | 2013-07-03 17:15:58 |
+----+-------------------+---------------------+
| 28 | [email protected] | 2013-07-03 17:15:58 |
+----+-------------------+---------------------+
| 29 | [email protected] | 2013-07-03 17:15:59 |
+----+-------------------+---------------------+
| 30 | [email protected] | 2013-07-03 17:15:59 |
+----+-------------------+---------------------+
왜 데이터가 삽입되는 여러 번이 IPN에 대해 다음과 같이
<?php
$dbc = mysqli_connect ('host', 'user', 'pass', 'db');
// 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";
}
// post back to PayPal system to validate
$header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);
if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if ((stristr ($res, "VERIFIED") == 0) &&
($_POST['payment_status'] == 'Completed'))
{
// PAYMENT VALIDATED & VERIFIED!
$email = $_POST['payer_email'];
$next = mysqli_query($dbc, "INSERT INTO users (email, password) VALUES('$email', NOW()) ");
$to = $email;
$subject = 'Download Area | Login credentials';
$message = '
Thank you for your purchase
Your account information
-------------------------
Email: '.$email.'
Password:
-------------------------
You can now login at http://yourwebsite.com/PayPal/';
$headers = 'From:[email protected]' . "\r\n";
mail($to, $subject, $message, $headers);
}
내가 한 IPN에서 가져온 데이터는 무엇입니까?
감사합니다. @ 앤드류 앤젤 나는 그것을 시도하고 여기에 다시보고 할 것입니다. – Welly
그리고 200을 돌려 주더라도 겹칠 수는 있습니다. 자신이 중복되었는지 확인해야합니다. – EJP