Это действительно зависит от системы обработки транзакций, которую вы используете. Если вы проверяете результат транзакции, вызывая их API, то в ответе обычно есть идентификатор пользователя или что-то, что вы можете привязать к идентификатору пользователя. Вы можете сохранить имя пользователя в файле cookie, файлы cookie относятся к домену или поддомену, и оно не будет отправлено на веб-сайт обработки транзакций, если он находится в другом домене, чем ваш, что, скорее всего, имеет место. Получите или извлеките имя пользователя из ответа на результат транзакции, сравните его с тем, которое вы получили из своего cookie. Если они совпадают, войдите в систему. Подписать пользователя только на основании содержимого файлов cookie во многих отношениях рискованно. Прежде всего, любой может установить cookie с любым именем в браузере. Во-вторых, если вы входите в систему только на основе файла cookie, вы, по сути, получаете никогда не истекающий сеанс. Это не то, что вы хотите. Для дополнительной безопасности вы можете проверить время транзакции из ответа на результат транзакции и отказаться от входа, если это было слишком давно.
О, и в своем вопросе вы упоминаете, что вам «нужно поддерживать множество модулей довольными», но вы не расширяете, что вы подразумеваете под этим. Так что я просто игнорирую этот бит. Не уверен, как выглядит счастливый модуль =)