Я не на 100% понимаю это при использовании IPN, скажем, на 3 веб-сайтах, и если кто-то со знанием может объяснить это мне в соответствии с моим сценарием, я буду этому признателен.
Я установил свою учетную запись для проверки sanbox, чтобы использовать прослушиватель IPN: site1.com/listener.php (работает просто отлично).
Мне интересно, как настроить больше слушателей для других моих сайтов, используя одну и ту же учетную запись PayPal.
В моем сценарии я работаю только с подписными платежами для всех сайтов.
Вопрос 1: переменная ipn_notification_url . Будет ли эта переменная, если она задана, указать paypal при совершении платежа, всегда использовать ее как URL-адрес слушателя ipn? Пример; если подписка завершится неудачей или что-то в этом роде, когда будет сделан следующий платеж?
Итак, когда у PayPal есть потребность в IPN моем слушателе, он будет использовать слушателя из переменной, а не заданного url в настройках профиля учетной записи? Или эта переменная ТОЛЬКО используется для фактического платежа при обработке?
Вопрос 2. Можно ли отличать сайты друг от друга, если необходимо иметь мастер-слушатель, который обрабатывает пересылку на правильный URL-адрес слушателя? Пример: custom = userId, receiver_id = Sitename
Вопрос 2 действительно похож на вопрос 1. Будут ли переменные POSTED от первоначального платежа STICK к платежам , которые будут автоматически выполняться в будущем для моих подписчиков. Так что, когда paypal необходимо отправить мне обновления IPN, он всегда будет использовать url из моей переменной, установленной при первоначальном платеже?
Спасибо за любое просвещение по этому поводу.
Я нашел этот скрипт с http://codeseekah.com/, который позволит вам настроить несколько прослушивателей IPN PayPal. Он позволяет фильтровать уведомления, что означает, что вы можете отправлять другим слушателям в зависимости от условий, которые вы установили (так полезно!):
<?php ini_set( 'max_execution_time', 0 ); // Do not abort with timeouts ini_set( 'display_errors', 'Off' ); // Do not display any errors to anyone $urls = array(); // The broadcast session queue // List of IPN listener points ** ADJUST THESE TO POINT TO YOUR LISTENERS $ipns = array( 'first' => 'http://www.yourwebsite1.co.uk//paypal/ipn.php', 'second' => 'http://www.yourwebsite2.co.uk//paypal/ipn.php', 'third' => 'http://www.yourwebsite3.co.uk//paypal/ipn.php' ); // ** ADJUST THESE CONDITIONS TO FILTER if($_POST['txn_type']!='cart') $urls []= $ipns['first']; // Choose this IPN URL if all conditions have been met if(isset($_POST['auction_buyer_id'])) $urls []= $ipns['second']; // Choose this IPN URL if all conditions have been met $urls []= $ipns['third']; // maybe this one is always sent to // Broadcast if ( !sizeof($urls) ) $urls = $ipns; // No URLs have been matched $urls = array_unique( $urls ); // Unique, just in case // Broadcast (excluding IPNs from the list according to filter is possible foreach ( $urls as $url ) broadcast( $url ); header( 'HTTP/1.1 200 OK', true, 200 ); exit(); // Perform a simple cURL-powered proxy request to broadcast function broadcast( $url ) { // Format POST data accordingly $data = array(); foreach ($_POST as $key => $value) $data []= urlencode($key).'='.urlencode($value); $data = implode('&', $data); // Log the broadcast file_put_contents('_logs/'.time().'.'.reverse_lookup( $url ).'-'.rand(1,100), $data); $ch = curl_init(); // Initialize curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, count($data)); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_exec($ch); // Execute HTTP request curl_close($ch); // Close } function reverse_lookup( $url ) { global $ipns; foreach ( $ipns as $tag => $_url ) { if ( $url == $_url ) return $tag; } return 'unknown'; } ?>
Просто настройте нужные части (с помощью ** s), сохраните их в файле, например, «multiple-paypal-ipn.php», а затем разместите его на одном из ваших серверов. Затем в настройке вашего IP-адреса PayPal IPN (в PayPal) укажите полный URL-адрес, где вы только что разместили его, например http: //www.yourwebsite/paypal/multiple-paypal-ipn.php
Это спасло меня БОЛЬШИМ временем, поэтому, надеюсь, будет для других! _g
Существует три URL-адреса, которые вы можете предоставить через скрытые элементы ввода в форме, с этими именами:
Поэтому, если вы используете notify_url
в кнопке, это может быть разным для каждого сайта, за кнопку и даже для рендеринга каждой кнопки, если у вас есть возможность использовать такую вещь.
Обратите внимание, что notify_url
переопределяет все, что вы установили в «Предпочтения платежей».
Что касается (2), вы также можете rm
переменную rm
следующим образом:
0: Пользователь возвращается через GET 1: Пользователь возвращается через GET без переменных платежа. 2. Пользователь возвращается через PUT со всеми возвращаемыми платежными переменными, то есть в качестве эха того, что кнопка отправила в PayPal.
Я не понимаю разницу между 0 и 1.
См. HTML-переменные PayPal .
EDIT В другом ответе на SO, который я теперь не могу найти, пользователь PayPal заявляет, что вы можете передать произвольные аргументы в самом файле notify_url, который вернется так же, как вы их отправили.