Создать приложение

Приложения расширяют аккаунт ресторана через ограниченный, отзываемый OAuth-доступ. Ваш код работает на ваших серверах; платформа держит реестр, журнал установок и платёжные механизмы. Это руководство проведёт вас от нуля до установленного приложения с учётом использования.

1. Зарегистрируйте своё приложение

Создайте приложение в панели партнёра: название, категория, нужные вам области, необязательный webhook URL и модель оплаты. Отправка создаёт OAuth-клиент (client id + секрет) и отправляет приложение на проверку. После одобрения админом оно появляется в App Store и может быть установлено.

2. Установитесь

Владелец ресторана устанавливает ваше приложение со страницы его карточки в App Store, предоставляя запрошенные вами области. Установка создаёт AppInstallation и (для платных приложений) списывает первый период через их кошелёк.

3. Вызовите API

Обменяйте OAuth-токен для устанавливающего аккаунта, затем вызовите REST API с ним. Сообщайте об использовании, получайте webhooks или встраивайте страницу в их панель — рассмотрено ниже.

OAuth и токены

Приложения аутентифицируются через OAuth 2.0 (Laravel Passport). Ваши учётные данные клиента берутся из панели партнёра. Используйте стандартный поток authorization-code; выданный токен несёт области, одобренные владельцем при установке.

# Exchange an authorization code for an access token
curl -X POST https://www.menubarcode.comoauth/token \
  -d grant_type=authorization_code \
  -d client_id=YOUR_CLIENT_ID \
  -d client_secret=YOUR_CLIENT_SECRET \
  -d redirect_uri=YOUR_REDIRECT \
  -d code=AUTH_CODE

# Call the API with the returned bearer token
curl https://www.menubarcode.com/api/v1/restaurants \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Accept: application/json"

Токены ограничены: вызов, требующий orders:read не проходит, если владелец не предоставил это. Запрашивайте минимальный набор — проверяющие это контролируют.

Сессионные токены

Для кратковременных вызовов сервер-встраивание создайте сессионный токен из активной установки. Токены истекают через 60 секунд.

GET https://www.menubarcode.comapps/{appId}/session-token
# → { "token": "…", "expires_in": 60 }

Встроенные приложения

Если ваше приложение объявляет embed_url, платформа размещает его в iframe внутри панели владельца по адресу /apps/{appId}/embed. Совместите его с сессионным токеном (выше), чтобы аутентифицировать встроенную страницу без полного цикла OAuth.

Вебхуки

Подпишитесь на события в webhook_url. Доставки ставятся в очередь, повторяются и подписываются по схеме Standard Webhooks с использованием секрета подписи вашего приложения. Ваша конечная точка должна быть публичным HTTPS URL (без приватных/loopback/metadata хостов) и возвращать 2xx быстро.

# A delivery your endpoint receives
POST https://your-app.com/webhooks
webhook-id: msg_...
webhook-timestamp: 1710000000
webhook-signature: v1,BASE64_HMAC
Content-Type: application/json

{ "type": "order.paid", "data": { "order_id": 123, ... } }

Проверяйте подпись по вашему секрету, прежде чем доверять payload. См. список событий.

Оплата по использованию

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

curl -X POST https://www.menubarcode.com/api/app/usage \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Accept: application/json" \
  -d quantity=1 \
  -d ref=unique-key-per-event
ПолеТипЗаметки
quantityчисло > 0обязательно — потреблённые единицы
refстрока ≤ 120необязательный ключ идемпотентности

Конечная точка возвращает 403 если токен не принадлежит зарегистрированному приложению или приложение не установлено для аккаунта.

Практические руководства

Выберите тип оплаты

  • Бесплатно — без списания при установке.
  • Периодический — фиксированная цена, списываемая каждый расчётный период (по умолчанию 30 дней) с кошелька владельца.
  • По использованию — цена за единицу, списываемая по мере того, как вы сообщаете об использовании.

Запрашивайте области ответственно

Запрашивайте только те области, которые использует ваше приложение. Изменение областей у активной карточки отправляет приложение на повторную проверку. См. справочник областей.

Очищайте при удалении

Когда владелец удаляет приложение, платформа отзывает его токены и вызывает app/uninstalled событие. Остановите фоновую работу и удалите сохранённые данные этого аккаунта, когда получите его.

справочник областей

Отражено из реестра областей OAuth платформы.

Область действияПрава
menu:readRead menus, categories and items
menu:writeCreate and update menu items
orders:readRead orders and their status
orders:writeCreate and update orders
analytics:readRead scan and sales analytics
restaurant:readRead restaurant profile and settings

События webhook

События, на которые вы можете подписаться сегодня:

Событие
order.created
order.status_changed
order.paid
refund.completed
reservation.created
reservation.cancelled
customer.created
shift.opened
shift.closed
menu.updated
entitlement.changed
subscription.paused
subscription.resumed
subscription.renewed
subscription.expired
subscription.plan_changed
subscription.past_due
subscription.expiring
subscription.trial_ending
app.uninstalled

Требования к карточке и проверке

Прежде чем админ одобрит ваше приложение, оно должно:

  • Запрашивать только используемые области, каждая обоснована в описании.
  • Предоставлять рабочую конечную точку webhook (публичный HTTPS), если оно подписывается на события.
  • Указывать точные цены — таблица цен на странице сведений генерируется из них.
  • Включать чёткий слоган, описание, категорию и хотя бы один скриншот.
  • Корректно обрабатывать удаление (отзыв доступа, остановка оплаты, удаление данных аккаунта).

Правки метаданных (слоган, описание, скриншоты, ссылки) публикуются сразу; изменения цены или областей отправляют на повторную проверку.

Свяжитесь с нами

Подписывайтесь на нас