Ну, я не думаю, что это на самом деле отличается от обычного «откуда я действительно знаю, что продукт X действительно был оплачен через PayPal». Ваш «продукт» здесь представляет собой членскую подписку, а не физический продукт, в противном случае он по сути тот же.
Когда вы отправляете пользователя в PayPal, просто отправьте уникальный идентификатор пользователя вместе с данными PayPal. (Вы можете просто использовать идентификатор пользовательской таблицы, если не хотите создавать «продукт» для продажи.) Передайте это, используя либо поле «custom», либо поле «item_number». PayPal передаст вам обе эти данные в IPN, и вы можете использовать их для проверки того, что для этого пользователя был произведен платеж.
Если вы беспокоитесь о том, что пользователи могут подделывать платежи от имени других пользователей, вы можете: а) зашифровать все данные, которые вы отправляете в PayPal, и б) настроить параметры PayPal, чтобы принимать только зашифрованные данные корзины покупок для вашей учетной записи.
РЕДАКТИРОВАТЬ : много дополнительной информации о передаче информации в PayPal:
Существует множество переменных, которые вы можете использовать для отправки информации в PayPal. Предполагая, что вы используете стандарт платежей через веб-сайт и функциональность корзины покупок, это можно разделить на две группы.
- Поля, которые применяются ко всей транзакции. См. Таблицу 4 в этом документе: https://www.x.com/docs/DOC-1332#id08A6HH0D0TA
- Поля, которые относятся к отдельному предмету. См. Таблицу 5 в том же документе.
Не вся эта информация передается вам обратно в IPN. Чтобы увидеть, что вам передают в IPN, посмотрите раздел «Пример сообщения IPN» здесь: https://cms.paypal.com/cgi-bin/marketingweb?cmd=_render-content&content_ID=developer/e_howto_admin_IPNIntro.
Вам нужна часть информации, которую а) вы передаете в PayPal для однозначной идентификации пользователя и б) PayPal передает вам обратно в IPN.
Я предлагаю вам использовать переменную с именем "custom" для этой цели. (См. Таблицу 4: HTML-переменные для платежных транзакций.)
Что именно вы передадите в "пользовательскую" переменную, зависит от вас. Вы можете отправить а) идентификатор пользователя в вашей пользовательской таблице, б) его зарегистрированный адрес электронной почты на вашем сайте, в) некоторый хэш одного из них ... это не имеет большого значения, если он однозначно идентифицирует пользователя , чтобы при получении IPN вы могли сказать: «Я знаю, что этот платеж предназначен для пользователя X».