У меня проблемы с интеграцией IPN PayPal в мою систему. В IPN Simulator мой слушатель работает нормально, но когда я тестирую песочницу, PayPal не обращается к файлу, чтобы сообщить мне об изменениях в запросе.
Оформление заказа работает нормально, но мой listener.php не вызывается PayPal.
Я даже оставил файл с преднамеренными ошибками в коде, чтобы получать журналы, если файл был выполнен. Тем не менее, ничего не происходит, поэтому кажется, что PayPal не отправляет информацию, когда есть изменение в каком-либо запросе
listener.php:
<?php
include "../../includes/functions/functions.php";
$raw_post_data = file_get_contents('php://input');
file_put_contents("Data.txt", $raw_post_data);
$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]);
}
$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";
}
$ch = curl_init('https://ipnpb.sandbox.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'));
if (!($res = curl_exec($ch))) {
// error_log("Got " . curl_error($ch) . " when processing IPN data");
curl_close($ch);
exit;
}
curl_close($ch);
if (strcmp($res, "VERIFIED") == 0) {
file_put_contents("Data.txt", "OK");
}
}
?>
Форма
<form id="paypal<?= $pacoteData->pacotes_id ?>" action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<!--Tipo do botão-->
<input type="hidden" name="cmd" value="_xclick" />
<!--Vendedor e URL de retorno, cancelamento e notificação-->
<input type="hidden" name="business" value="jorge.frillocchi-facilitator@gmail.com" />
<input type="hidden" name="return" value="<?= $config->PROTOCOL ?><?= $config->URL ?>?payment=success&pedido=<?= $codigo_pedido ?>" />
<input type="hidden" name="cancel" value="<?= $config->PROTOCOL ?><?= $config->URL ?>" />
<input type="hidden" name="notify_url" value="<?= $config->PROTOCOL ?><?= $config->URL ?>>modules/pagamento/notificacao.php" />
<!--Internacionalização e localização da página de pagamento-->
<input type="hidden" name="charset" value="utf-8" />
<input type="hidden" name="lc" value="BR" />
<input type="hidden" name="country_code" value="BR" />
<input type="hidden" name="currency_code" value="BRL" />
<!--Informações sobre o produto e seu valor-->
<input type="hidden" name="amount" value="<?= number_format($pacoteData->pacotes_valor, 2, ".", ",") ?>" />
<input type="hidden" name="item_name" value="<?= $pacoteData->pacotes_nome . " " . $pacoteData->pacotes_duracao ?> Dias" />
<input type="hidden" name="quantity" value="1" />
<input type="hidden" name="invoice" value="<?= $codigo_pedido ?>" />
<!--Botão para submissão do formulário-->
<button type="submit" class="mdc-button mdc-card__action mdc-card__action--button">
<i class="material-icons mdc-button__icon" aria-hidden="true">payment</i>
<span class="mdc-button__label">Assinar com PayPal</span>
</button>
</form>