Премиум-лицензия

Как одновременно опубликовать базовую и расширенную версию программного продукта

Содержание...

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

Пользователь может купить либо одну из этих лицензий, либо переход с базовой на премиум-лицензию (если у него уже есть базовая лицензия). Стоимость обеих лицензий разработчик определяет самостоятельно.

Покупка перехода на премиум-лицензию

Купить переход с базовой на премиум-лицензию пользователь может на странице продукта в «Инсталлере». Рекомендуем показывать информацию об этом в интерфейсе самого продукта, чтобы стимулировать переход пользователей на более функциональную версию. Для этого можно использовать ссылку с адресом, сформированным с помощью кода вида {$wa_backend_url}installer/store/....

Готовый код Smarty для добавления такой ссылки в каждый продукт есть в вашем профиле разработчика в Центре заказчика Webasyst — просто скопируйте и используйте в своём исходном коде. Визуальное оформление таких ссылок — на ваше усмотрение!

Проверка лицензии в исходном коде продукта

Обе лицензии продукта доступны в магазине Webasyst в рамках одного экземпляра программного кода. Чтобы определить, какую часть функций надо сделать доступными конкретному пользователю, надо проверить его лицензию — с помощью методов класса waLicensing: в PHP-коде и в шаблонах Smarty.

  • check

    Возвращает экземпляр класса waLicensing, соответствующий указанному программному продукту.

  • isPremium

    Проверяет доступность информации о наличии у пользователя премиум-лицензии.

  • isStandard

    Проверяет доступность информации о наличии у пользователя базовой лицензии и отсутствие информации о наличии премиум-лицензии.

  • isAnyPremiumFeatureEnabled

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

  • getSetting

    Возвращает значение настройки, связанной с проверкой лицензии.

  • hasLicense

    Проверяет наличие у пользователя любой действующей лицензии продукта.

  • hasPremiumLicense

    Проверяет наличие у пользователя действующей премиум-лицензии продукта.

  • hasStandardLicense

    Проверяет наличие у пользователя действующей базовой лицензии и отсутствие премиум-лицензии продукта.

  • isCached

    Возвращает информацию о том, будет ли следующий вызов других методов класса быстрым — без выполнения сетевого запроса.

public static function check ($slug = '')

Возвращает экземпляр класса waLicensing, соответствующий указанному программному продукту, — с его помощью удобно вызывать остальные публичные методы класса.

Параметры

  • $slug

    Идентификатор продукта, составленный по следующим правилам:

    • для приложений: app_id приложения, например, 'shop';
    • для плагинов приложений: app_id/plugins/plugin_id, например, 'shop/plugins/referrals';
    • для системных плагинов: wa-plugins/shipping/plugin_id, например, 'wa-plugins/shipping/courier', 'wa-plugins/payment/cash', 'wa-plugins/sms/smsru';
    • для тем дизайна: parent_theme_app_id/themes/parent_theme_id, например, 'site/themes/default' (нужно указывать идентификатор родительской темы дизайна и её приложения, потому что лицензия закрепляется именно за родительской темой).

Пример

// PHP
if (waLicensing::check('myapp')->isPremium()) {
    echo 'Благодарим вас за приобретение премиум-лицензии!';
}

// Smarty
{if waLicensing::check('someapp/plugins/myplugin')->isPremium()}
    Благодарим вас за приобретение премиум-лицензии!
{/if}

Чтобы не указывать идентификатор продукта при каждом вызове метода, удобно создать в своём продукте собственный класс, унаследованный от waLicensing, с фиксированным значением поля $static_slug.

class myappLicensing extends waLicensing
{
    protected static $static_slug = 'myapp';
}

Статический метод check() такого класса можно вызывать без аргумента:

$is_premium = myappLicensing::check()->isPremium();

public function isPremium()

Возвращает true, если доступна информация о том, что в данный момент у пользователя есть или имелась в прошлом премиум-лицензия.

Пример

// PHP
if (waLicensing::check('myapp')->isPremium()) {
    echo 'У вас есть или была ранее премиум-лицензия.';
}

public function isStandard()

Возвращает true, если отсутствует информация о том, что в данный момент у пользователя есть или имелась в прошлом премиум-лицензия.

Пример

// PHP
if (waLicensing::check('myapp')->isStandard()) {
    echo 'У вас базовая лицензия.';
}

public function isAnyPremiumFeatureEnabled()

Возвращает true, если в настройках продукта активированы какие-либо возможности, которые должны быть доступны только владельцам премиум-лицензии. Метод может использоваться только в приложениях и их плагинах, для остальных видов продуктов он всегда возвращает false.

Для работы этого метода в классе конфигурации приложения, описанном в файле wa-apps/[app_id]/lib/config/[app_id]Config.class.php, или в основном классе плагина должен быть реализован публичный метод с именем isAnyPremiumFeatureEnabled(), возвращающий нужное булево значение в зависимости от текущих настроек продукта.

Этот метод удобно использовать для учёта ситуаций, когда информация о наличии у пользователя премиум-лицензии не может быть получена (например, сайт восстановлен из резервной копии и нет связи с сервером обновлений Webasyst), а также во время разработки.

Пример

// PHP
if (waLicensing::check('myapp')->isAnyPremiumFeatureEnabled()) {
    echo 'У вас включены настройки, доступные для пользователей премиум-лицензии.';
}

public function getSetting ($name, $default = null)

Возвращает значение настройки, связанной с проверкой лицензии, например, 'license_premium' (эта настройка означает доступность информации о том, что в данный момент у пользователя есть или имелась в прошлом премиум-лицензия).

Пример

// PHP
if (waLicensing::check('myapp')->getSetting('license_premium')) {
    echo 'У вас есть или имелась в прошлом премиум-лицензия.';
}

public function hasLicense ($err_if_unable_to_connect = false)

Возвращает true, если у пользователя есть любая действующая в данный момент лицензия продукта: базовая или премиум.

Параметры

  • $err_if_unable_to_connect

    Флаг, обозначающий необходимость выбросить исключение, если сервер лицензий Webasyst не вернул корректный ответ на запрос информации о лицензиях. Если указано false, то метод вернёт информацию о наличии лицензий у пользователя, полученную во время последней успешной проверки.

Пример

// PHP
if (waLicensing::check('myapp')->hasLicense()) {
    echo 'У вас есть действующая лицензия продукта.';
}

public function hasPremiumLicense ($err_if_unable_to_connect = false)

Возвращает true, если у пользователя есть действующая в данный момент премиум-лицензия продукта.

Параметры

  • $err_if_unable_to_connect

    Флаг, обозначающий необходимость выбросить исключение, если сервер лицензий Webasyst не вернул корректный ответ на запрос информации о лицензиях. Если указано false, то метод вернёт информацию о наличии лицензий у пользователя, полученную во время последней успешной проверки.

Пример

// PHP
if (waLicensing::check('myapp')->hasPremiumLicense()) {
    echo 'У вас есть действующая премиум-лицензия продукта.';
}

public function hasStandardLicense ($err_if_unable_to_connect = false)

Возвращает true, если у пользователя есть действующая в данный момент базовая лицензия продукта и нет ни одной действующей премиум-лицензии этого продукта.

Параметры

  • $err_if_unable_to_connect

    Флаг, обозначающий необходимость выбросить исключение, если сервер лицензий Webasyst не вернул корректный ответ на запрос информации о лицензиях. Если указано false, то метод вернёт информацию о наличии лицензий у пользователя, полученную во время последней успешной проверки.

Пример

// PHP
if (waLicensing::check('myapp')->hasStandardLicense()) {
    echo 'У вас есть действующая базовая лицензия продукта и нет премиум-лицензии.';
}

public function isCached()

Возвращает информацию о том, будет ли следующий вызов других методов класса быстрым — без выполнения сетевого запроса.

Пример

// PHP
if (waLicensing::check('myapp')->isCached()) {
    //следующий вызов методов класса будет быстрым
}

Системные требования

Методы класса waLicensing и, следовательно, возможность использования премиум-лицензии доступны только пользователям, у которых установлен фреймворк Webasyst версии не ниже 2.7.0. При публикации продукта с поддержкой премиум-лицензии укажите это ограничение в системных требованиях:

'app.installer' => [
    'version' => '>=2.7.0',
    'strict' => true,
],

Как опубликовать премиум-лицензию

  1. Добавьте в исходный код продукта проверку — с помощью методов класса waLicensing, чтобы часть функций была доступна только владельцам определённых лицензий.
  2. Включите премиум-лицензию в свойствах продукта в профиле разработчика в Центре заказчика Webasyst.
  3. Укажите стоимость премиум-лицензии.
  4. Отправьте продукт на публикацию в магазине Webasyst.