Приложения, плагины и темы дизайна могут быть доступны в магазине 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, ],
Как опубликовать премиум-лицензию
- Добавьте в исходный код продукта проверку — с помощью методов класса
waLicensing
, чтобы часть функций была доступна только владельцам определённых лицензий. - Включите премиум-лицензию в свойствах продукта в профиле разработчика в Центре заказчика Webasyst.
- Укажите стоимость премиум-лицензии.
- Отправьте продукт на публикацию в магазине Webasyst.