Intereting Posts
Нужна помощь для показа одной и той же страницы на первой странице, страницы с поисковой страницей и портфолио Фильтрация пользовательских сообщений с помощью Ajax Как обновить пользовательский заголовок сообщения из front-end формы с использованием полей ACF? Как вставить скрипты в правильный путь в плагине? Как настроить мета-поле «Категории», чтобы разрешить только одну категорию? PHP включает в себя действия AJAX Проблемы, с которыми сталкиваются правила перезаписи? get_the_foo () в цикле – выполняет ли он другой запрос? Дублирование сайта с помощью WPCLI Как открыть страницу 404 в предварительном просмотре темы? Определите, есть ли у Термы бабушка / дедушка или бабушка Добавление пункта меню для пользовательского почтового архива Использование субдомена m.website.com для мобильных телефонов? plugins_url () неправильно возвращает URL-адрес с субдоменом www Программно обновлять плагины, размещенные без самостоятельного размещения в WordPress

Проблема WordPress и IPN

Я создал файл в папке с шаблонами ipn.php :

<?php $req = 'cmd=_notify-validate'; foreach($_POST as $key => $value) : $value = urlencode(stripslashes($value)); $req .= "&$key=$value"; endforeach; $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 ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30); if(!$fp) : // HTTP ERROR else : fputs ($fp, $header . $req); while(!feof($fp)) : $res = fgets ($fp, 1024); $fh = fopen('result.txt', 'w'); fwrite($fh, $res); fclose($fh); if (strcmp ($res, "VERIFIED") == 0) : include_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php'); $headers = 'From: Tester 1 <testmail@something.com>' . "\r\n"; $subject = 'Subject test' . "\r\n"; $message = 'Just a test stuff.'; wp_mail('myemail@gmail.com', $subject, $message, $headers ); elseif(strcmp ($res, "INVALID") == 0) : // error endif; endwhile; fclose ($fp); endif; 

и notify_url Я установил:

 <input type="hidden" name="notify_url" value="<?php bloginfo('stylesheet_directory'); ?>/ipn.php"> 

Но после того, как я заплатил, и процесс на странице PyaPal завершен, и меня перенаправляют обратно на мою страницу с благодарностью (эта часть работает нормально), по какой-то причине ipn.php не отправил мне письмо. Почему это?

Есть ли ошибка в коде? Для устранения ошибок я удалил все условия txn_id и электронной почты.

Если я использую симулятор IPN на веб-сайте разработчика paypal и размещаю там адрес notify_url и выбираю Web Accept, результат: IPN успешно отправлен. Таким образом, я предполагаю, что мой хостинг не блокирует транзакции PayPal. Или?

Я даже попытался поместить код электронной почты в начало скрипта ipn.php:

  <?php include_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php'); $headers = 'From: Tester 1 <testmail@something.com>' . "\r\n"; $subject = 'Subject test' . "\r\n"; $message = 'Just a test stuff.'; wp_mail('myemail@gmail.com', $subject, $message, $headers ); $req = 'cmd=_notify-validate'; foreach($_POST as $key => $value) : $value = urlencode(stripslashes($value)); $req .= "&$key=$value"; endforeach; $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 ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30); if(!$fp) : // HTTP ERROR else : fputs ($fp, $header . $req); while(!feof($fp)) : $res = fgets ($fp, 1024); $fh = fopen('result.txt', 'w'); fwrite($fh, $res); fclose($fh); if (strcmp ($res, "VERIFIED") == 0) : elseif(strcmp ($res, "INVALID") == 0) : // error endif; endwhile; fclose ($fp); endif; 

Но похоже, что он не срабатывает вообще ((ни одно письмо не отправлено).

Может быть, WordPress блокирует этот адрес или что-то еще? Я не знаю, может быть, mod_rewrite блокирует это или что-то еще?

Я использую хороший url, поэтому mod_rewrite работает, но, возможно, есть и другие проблемы.

Любая идея, что может быть неправильным?

Я проверил электронную почту и даже папку со спамом, но ничего не приходит ко мне. Если я использую wp_mail в function.php, он работает так, как ожидалось, но не в файле ipn.php.

Любая идея, что может быть неправильно, и почта не отправляется?

Прежде всего, лучше использовать get_template_directory_uri() вместо bloginfo(...

 <input type="hidden" name="notify_url" value="<?php echo get_template_directory_uri(); ?>/ipn.php"> 

но вы правы, если думаете, что проблема не в этом.

Я не могу быть уверен, но я уверен, ваша проблема здесь:

 include_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' ); 

Это проблематичный способ включить wp-load.php , но …

Зачем загружать всю среду WordPress для отправки электронной почты?

Имейте в wp-load.php что загрузка wp-load.php загружает все основные файлы WP, получает опции из базы данных, загружает все активные плагины, загружает активную тему functions.php и родительскую тему functions.php если вы используете дочернюю тему. Вы также запускаете некоторые действия и фильтры … много ненужных вещей.

Они вам совсем не нужны: просто отправьте электронное письмо с помощью функции php mail() (или, по крайней мере, включите класс, подобный этому ).

Ваш процесс будет намного быстрее, и я уверен … успешный.