В настоящее время я работаю с платежами через PayPal.До недавнего времени все шло гладко.У меня есть кнопка подписки.Я установил обратный URL-адрес, чтобы обрабатывать получение данных из транзакции и отправлять ее пользователю по почте.Все нужные мне данные успешно извлекаются, однако проблема в том, что мои функции запускаются дважды по возвращении.Я получаю электронные письма, которые должен получить дважды.Это работало отлично пару недель назад, поэтому теперь мне интересно, что случилось, почему он вдруг получил эту ошибку.
Я прочитал здесь: Адаптивный URL возврата платежа Paypal вызывает дважды Это может быть потому, что я нажал кнопку «Нажми здесь», хотя это еще не было 10 секунд.Я уже пытался щелкнуть и не щелкать по нему, но я все еще получаю тот же результат.
Я также читал, что это может быть связано с тем, что он вызывается после оплаты, а затем для начала подписки.Любая идея, как я мог справиться с этим?
$pp_hostname = "www.sandbox.paypal.com"; // Change to www.sandbox.paypal.com to test against sandbox
$req = 'cmd=_notify-synch';
$tx_token = $_GET['tx'];
$auth_token = "my_token_from_paypal";
$req .= "&tx=$tx_token&at=$auth_token";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://$pp_hostname/cgi-bin/webscr");
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);
//set cacert.pem verisign certificate path in curl using 'CURLOPT_CAINFO' field here,
//if your server does not bundled with default verisign certificates.
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Host: $pp_hostname"));
$res = curl_exec($ch);
curl_close($ch);
if(!$res){
//HTTP ERROR
}else{
// parse the data
$lines = explode("\n", trim($res));
$keyarray = array();
if (strcmp ($lines[0], "SUCCESS") == 0)
{
for ($i = 1; $i < count($lines); $i++) {
$temp = explode("=", $lines[$i],2);
$keyarray[urldecode($temp[0])] = urldecode($temp[1]);
}
// code for mail handling
}
else if (strcmp ($lines[0], "FAIL") == 0) {
echo 'there has been an error';
}
}