IPN PayPal: некоторые заказы приводят к сбою IPN (неопределенный индекс: счет-фактура)


Я протестировал заказ PayPal (используя стандартную проверку на одной странице и стандарт основных платежей Paypal), когда IPN включен, и статусы обновляются нормально, поэтому IPN, похоже, функционирует.

Однако PayPal периодически отправляет по этому электронному адресу:

Дорогой хххх,

Пожалуйста, проверьте ваш сервер, который обрабатывает мгновенные платежи PayPal Уведомления (IPN). Уведомления о мгновенных платежах, отправленные на следующие URL-адреса, не работают:

Http:// хххх /paypal/ipn/

Если вы не распознаете этот URL-адрес, возможно, вы используете поставщика услуг , который использует IPN от вашего имени. Пожалуйста, свяжитесь с вашим поставщиком услуг с вышеуказанной информацией. Если эта проблема сохранится, IP-адреса для вашей учетной записи могут быть отключены.

Благодарим вас за оперативное внимание к этому вопросу.

Искренне ваш, PayPal

А затем примерно через неделю автоматически отключает IPN, что останавливает обновление заказов PayPal должным образом.

Проверка системы.журнал показывает кучу уведомлений

2014-02-12T20:29:54+00:00 ERR (3): Notice: Undefined index: invoice  in /var/www/windswept/app/code/core/Mage/Paypal/Model/Ipn.php on line 171

Существует около 50 таких ошибок (по одной каждые 15/20 мин), в то время как в последнее время у нас было небольшое количество заказов Paypal.

У кого-нибудь есть какое-либо представление об этой проблеме?

Author: Prince Patel, 2014-02-12

4 answers

Если ваш URL-адрес правильный, то это то, что Кейур Шах уже прокомментировал, но, вероятно, было недостаточно ясно. Если у вас включен IPN и вы получаете платежи из разных источников (ebay, Magento и другие) на один и тот же аккаунт PayPal, PayPal, к сожалению, продолжает пытаться отправлять уведомления, связанные с этими заказами, в магазин Magento, где этих заказов не существует.

Возможным решением является создание централизованного получателя IPN, см. Этот URL-адрес для очень полезного скрипта, который поможет вам начатый. http://codeseekah.com/2012/02/11/how-to-setup-multiple-ipn-receivers-in-paypal/

 7
Author: ivanji, 2014-09-22 12:53:43

Как указал @Keyur Shah, эти заказы не были размещены в Magento. (так что, вероятно, в моем случае они импортируются M2E)

Magento ничего о них не знает и ожидает, что поле invoice будет заполнено, поэтому происходит что-то вроде этого:

  1. Ipn получает запрос от Paypal без поля invoice.
  2. Mage_Paypal_Model_Ipn::_getOrder() ожидайте поля invoice и создайте исключение
  3. Mage_Paypal_IpnController отправил ответ 503 Service Unavailable в Paypal
  4. Вы получили электронное письмо Paypal ... Paypal продолжает повторять попытки в течение некоторого времени для невыполненных заказов

Решение
Переписать Mage_Paypal_Model_Ipn::processIpnRequest()
Я не объясняю всю процедуру полностью, так как существует множество учебных пособий, показывающих, как создать модуль, который переписывает основной файл.

Этот мод:

  1. Не вызывает исключения, если поле invoice отсутствует, и регистрируйте эти идентификаторы заказов
  2. Ответит Paypal успешно, поэтому Paypal не отправит никакого электронного письма и перестанет отправлять эту информацию о заказе на IPN снова.

Вот файл класса:

class MyModule_Fix_Model_Paypal_Ipn extends Mage_Paypal_Model_Ipn
{
    public function processIpnRequest(array $request, Zend_Http_Client_Adapter_Interface $httpAdapter = null)
    {
        $this->_request = $request;
        $this->_debugData = array('ipn' => $request);
        ksort($this->_debugData['ipn']);

        try {
            if (!isset($this->_request['invoice'])) {
                if ($httpAdapter) {
                    $this->_config = Mage::getModel('paypal/config', array('', ''));
                    $this->_postBack($httpAdapter); // send reply to paypal
                }
                $this->_debugData['exception'] = 'Missing Invoice/Order Id (maybe Ebay/Amazon order ?)';
                return;
            }

            if (isset($this->_request['txn_type']) && 'recurring_payment' == $this->_request['txn_type']) {
                $this->_getRecurringProfile();
                if ($httpAdapter) {
                    $this->_postBack($httpAdapter);
                }
                $this->_processRecurringProfile();
            } else {
                $this->_getOrder();
                if ($httpAdapter) {
                    $this->_postBack($httpAdapter);
                }
                $this->_processOrder();
            }
        } catch (Exception $e) {
            $this->_debugData['exception'] = $e->getMessage();
            $this->_debug();
            throw $e;
        }
        $this->_debug();
    }
}
 5
Author: Fra, 2017-07-20 07:35:42

Вам нужно подключиться к своей учетной записи PayPal, нажать на профиль и установить IP-адрес следующим образом

YOUR_BASE_URL/index.php/paypal/ipn/index/

Или, если это не сработает

YOUR_BASE_URL/paypal/ipn/

Смотрите эту ссылку

 1
Author: Mma87, 2014-08-08 09:17:51

Вы можете попробовать URL-адрес как Если вы используете переписывание URL-адресов (удобные для поисковых систем URL-адреса), наш IP-адрес будет: YOUR_BASE_URL/paypal/standard/ipn/

Если вы не используете URL-адрес, ваш адрес должен быть: (Я думаю, что это правильно, я не пробовал его полностью) YOUR_BASE_URL/index.php/paypal/standard/ipn/

Для получения дополнительной информации смотрите здесь

 1
Author: Bikram Shrestha, 2015-01-13 08:49:51