Подписки Paypal IPN - проблема с многократной подпиской пользователей

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

По большей части он работает хорошо, но иногда я сталкивался с одной проблемой.

Обычно, если пользователь отменяет свою подписку, я жду уведомления об окончании срока (subscr_eot), прежде чем отключать доступ к моему сайту.

Таким образом, если они вносят предоплату за весь месяц, а затем сразу же отменяют подписку, у них все еще есть доступ на оставшуюся часть месяца (как и должно быть).

Но у некоторых пользователей эта проблема возникает, когда они:

  1. Отменить подписку
  2. До того, как истечет "срок", они решают повторно подписаться
  3. Когда наступает «конец срока» для их первой подписки, мое приложение получает уведомление и отправляет пользователю электронное письмо с чем-то вроде «ваша учетная запись была отключена, если вы когда-нибудь захотите зарегистрироваться снова, вы можете повторно подпишитесь, нажав здесь ».
  4. Это сбивает их с толку, потому что они думают ... это странно, я думал, что подписался примерно неделю назад (и они так и сделали). Так что они идут СНОВА подписаться. Теперь у них есть две одновременные действующие подписки на мой сайт, и через месяц или два я получаю электронное письмо от службы поддержки («черт возьми, ты выставил мне счет дважды в этом месяце, придурок !!»)

Так что я не нашел хорошего способа исправить это. Я думаю, что лучшим решением было бы сделать дополнительный вызов API, когда получено уведомление «конец срока», которое спрашивает PayPal: «Эй, этот человек уже повторно подписался?». Если это так, то не нужно удалять это письмо. Но я еще не видел способа сделать этот вызов API.

Другое решение - немедленно отключить их учетную запись при отмене (уведомление «subscr_cancel»), но затем я получаю разные гневные письма службы поддержки: «Эй, я внес предоплату за весь месяц, почему моя учетная запись уже была отключена !!».

Кто-нибудь еще решил это?


person Brian Armstrong    schedule 27.03.2010    source источник


Ответы (4)


Я знаю, что это старый поток, но я не видел реального ответа на этот вопрос, поэтому, если кто-то задается вопросом об этом, как я, вот решение.

Если кто-то отменяет свою учетную запись (subscr_cancel) до окончания срока (subscr_eot), я бы настроил ее в своей базе данных для обработки. Например, если у вас есть таблица «Пользователи» в вашей базе данных, просто добавьте новое поле «int» и назовите его «Term». По умолчанию в этом поле должно быть установлено значение «0». Затем внутри вашего IPN настройте его так, чтобы, если пользователь отменяет свою подписку до окончания срока, в поле «Срок» для этого пользователя устанавливается значение «1». Если этот пользователь возвращается и повторно подписывается на ваши услуги, попросите IPN обновить поле «Term» для этого пользователя до «0».

Затем в вашем почтовом скрипте просто попросите его проверить поле «Срок» для этого пользователя, когда он будет работать до конца срока. Если он установлен на «0», не отправляйте электронное письмо. Если он установлен на «1», отправьте электронное письмо с надписью «Adios!»

person David Dietz    schedule 11.04.2011

Насколько мне известно, не существует API PayPal для проверки подписок, если вы используете стандартные / профессиональные кнопки оплаты веб-сайта, что, как я полагаю, у вас есть.

Я борюсь с этим, сохраняя состояние активности / отмены / повторной подписки в моей базе данных и обновляя состояние на основе сообщений IPN, которые я получаю от PayPal. Я сопоставляю сообщения IPN с моими случаями использования с помощью поля custom в кнопке, которое отправляется обратно в каждом сообщении IPN.

Есть также много третьих лиц, которые помогают вам управлять этим процессом, поскольку api PayPal в этой области немного слабоват. Recurly - это то, что я рассмотрел и планирую реализовать, есть и другие.

person dar    schedule 30.03.2010

Цитируйте: Re: Когда выдается subscr_eot?

Если вы начали принимать подписки после ноября 2009 г., идентификатор подписчика будет начинаться с «I-» - и не будет возвращать «subscr_eot» по истечении срока действия. Paypal ожидает, что вы будете записывать, как долго они подписаны, и обновите учетную запись до понижения (или чего-то еще), когда этот период истечет, если клиент тем временем снова не заплатит.

person Alister Bulman    schedule 29.06.2010
comment
Интересно, но я не уверен, что он имел в виду под идентификаторами профиля. Я не получаю обратно идентификатор профиля от Paypal. Идентификатор транзакции есть, но он не начинается с I- или S-. - person Brian Armstrong; 30.06.2010

Как предотвратить дублирование платежей PayPal?

Вы хотите добавить уникальный идентификатор к параметру invoice; и включите «Блокировать повторяющиеся платежи» в разделе «Профиль»> «Мои инструменты для продажи» в своей учетной записи на сайте www.paypal.com.

person JMHeap    schedule 02.08.2013