Каков рабочий процесс программы для платного членства на сайтах? - PullRequest
3 голосов
/ 03 апреля 2011

Я создаю платный членский сайт в php, используя Zend Framework. Мне нужно разработать рабочий процесс для зарядки пользователей. У нас есть несколько ежемесячных пакетов, каждый из которых предлагает различные уровни обслуживания. Для примера:

Бесплатный план, который позволяет пользователям создавать одно рабочее пространство и одного пользователя

Базовый план, который позволяет создать 5 рабочих мест и 3 пользователей и стоит 15 долларов / месяц

Премиум-план, который позволяет создать 20 рабочих мест и 10 пользователей и стоит 35 долларов в месяц

План Heavy Duty, который позволяет создать 50 рабочих мест и 30 пользователей и стоит 65 долларов в месяц

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

Настаиваете ли вы, чтобы они вводили данные своей кредитной карты каждый месяц, или вы действительно запрашиваете их один раз, а затем взимаете их ежемесячно - я, честно говоря, сомневаюсь, что последний может даже рассматриваться.

Или пользователи платят заранее за то, сколько месяцев они хотят использовать - как это обычно делается.

Кроме того, я хотел бы предоставить своим пользователям 10-дневную бесплатную пробную версию всех платных пакетов после регистрации. Как бы я реализовать это в коде. У меня настроено приложение, и оно функционирует так, как если бы все пользователи были администраторами, т. Е. Ничего не удерживало, и теперь они хотят встроить ограничения для монетизации, но я немного растерялся в рабочем процессе, реализации кода и разработке данных, чтобы сделать это. .

Напоминает мне, есть ли какие-либо онлайн-сервисы или приложения с открытым исходным кодом, которые я могу использовать для подключения к своему приложению и обработки этого аспекта сайта для меня?

ОБНОВЛЕНИЕ =========================

Очень подробные ответы, однако на уровне разработки - что я должен хранить в своей базе данных и как мне составить необходимые таблицы. Я не понимаю, что каждый месяц для ежемесячной подписки будет производиться обратная передача по URL, который я предоставляю в качестве шлюза. Как то, что было бы необходимым для базы данных здесь.

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

Ну, вы задаете два вопроса.

как вы будете постепенно взимать плату с пользователя каждый месяц?

То, что вы ищете, - это регулярные платежи, большинство платежных шлюзов предоставляют такие возможности (Paypal делает). По сути, он хранит информацию о кредитной карте в защищенной базе данных и запускает cron каждый день, чтобы проверить наличие повторяющегося профиля и запросить авторизацию. Тем не менее, я на самом деле не советую вам делать это самостоятельно, это сложно и как-то незаконно в большинстве стран. (Вы не можете хранить номера CC самостоятельно).

Какой-то веб-сайт взимает плату один раз за n месяцев, но с точки зрения пользователя он может их испугать.

Как бы я реализовал это в коде?

Zend Framework поставляет компонент (Zend_Acl), который поможет вам создать Список контроля доступа .

То, что вы можете сделать, - это создать одну «роль» для каждого типа подписки, каждая из которых имеет разные привилегии для разных ресурсов.

Если вы знаете метод МОСКВЫ , это как-то похоже:

  • (Роль) Бесплатный план может (Привилегия) зарегистрировать (Ресурс) веб-сайт.
  • (Роль) Базовый план может (Привилегия) создать 5 (Ресурсное) рабочее пространство.
    и т.д.

Обратите внимание, что большую часть времени существует своего рода Повышение привилегий , потому что о том, как вы можете наследовать роли.

Вам нужно изолировать и найти, какой у вас ресурс, ресурсы могут быть чем угодно, и даже быть динамичными и созданными на лету.

Используя утверждения, вы должны иметь возможность ограничить количество рабочих пространств для каждой роли.

Class WorkspaceCountAssertion {

    const MAX_WORKSPACE = 5;

    public function assert(Zend_Acl $acl,
                           Zend_Acl_Role_Interface $role = null,
                           Zend_Acl_Resource_Interface $resource = null,
                           $privilege = null)
    {
        //retrieve the current workspace count
        if ($workspaceCount > self::MAX_WORKSPACE) {
            return false;
        }

        return true;
    }
}

$acl->allow('basic', 'workspace', 'create', new WorkspaceCountAssertion());

Это дает вам идею.

Обратите внимание, что я никогда не использовал термин пользователь, контроллер и т. Д., Вам на самом деле нужно думать с точки зрения роли, ресурса, привилегий.


Вам необходимо сохранить роль с соответствующей учетной записью в простых отношениях «многие к одному».
Каждая учетная запись может иметь одну роль. Как обновить это, когда оплата остановится? Зависит, но в большинстве случаев вам потребуется запустить cron, который проверит окончание подписки и проверит повторяющийся платеж, в зависимости от платежного шлюза, он либо отзовет результирующую транзакцию, либо вернет ее напрямую через веб-сервис. Если платеж не прошел или вам было отказано, вы можете изменить роль на бесплатную учетную запись.

Есть несколько способов сделать это, это зависит от вашего приложения и требований.

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

0 голосов
/ 04 апреля 2011

Большинство платежных шлюзов будут управлять вашими подписками для вас и уведомлять ваш сайт через механизм обратной передачи. Т.е.

  1. Пользователь посещает ваш сайт
  2. Пользователь оплачивает подписку на вашем сайте
  3. Пользователь перенаправляется на платежную форму, размещенную вами или на платежном шлюзе (зависит от шлюза).
  4. Пользователь вводит данные своей кредитной карты в форму и отправляется на платежный шлюз.
  5. Платежный шлюз инициирует подписку и уведомляет ваш сайт с помощью обратной передачи (в фоновом режиме).
  6. В зависимости от того, размещена ли пользовательская форма оплаты локально, и вы просто публикуете отправку на свой платежный шлюз, или платежный шлюз обрабатывает форму, ваш пользователь может быть перенаправлен обратно на страницу успеха / сбоя или просто отобразите соответствующий ответ.

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

Это довольно общая информация, хотя это примерно те же шаги, что и большинство платежных шлюзов.

...