Регистрация через API reg.place

Получение информации о соревновании

Получить информацию о соревновании можно, исполнив GET запрос по адресу https://api.reg.place/v1/events/{slug}?compact=false&races=true, где slug — уникальный идентификатор соревнования. Вы получите json-объект, содержащий всю необходимую информацию, для отображения соревнования на вашем сайте. В полученном json необходимо обратить внимание на ключ races, в нём находятся дисциплины соревнования, и на ключ form_fields, который присутствует у соревнования и может присутствовать у дисциплин соревнования.

Ключ form_fields содержит информацию для построителя форм, в нём описывается то, как должна выглядеть анкета для регистрации на дисциплину соревнования. Если ключа form_fields нет в дисциплине, необходимо использовать данные из ключа form_fields соревнования. Форма представляет собой массив объектов-полей.

Ниже представлена информация о том, как выглядит элемент массива — единичное поле. Ключ presence намекает на то, что это обязательное поле, ключ validator описывает формат поля (дата, телефон, время и т.д.). Ключ select_variants описывает допустимые варианты для селектора. Остальные атрибуты понятны без дополнительного описания.

{
  "name": "name_last",
  "label": "Фамилия",
  "placeholder": "ваша фамилия",
  "hint": "Введите вашу фамилию.",
  "type": "string",
  "default": "",
  "presence": true,
  "validator": null,
  "select_variants": {},
  "agreement_text": null
}

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

Создание заявки

Для создания заявки необходимо выполнить json POST запрос по адресу https://api.reg.place/v1/heats. В запросе обязательно должны быть указаны: race_id — идентификатор дисциплины, token — уникальный идентификатор компании, проводящей соревнования (этот параметр можно посмотреть в админке, в разделе своей компании). Также вам необходимо верно составить объект form_fields, содержащий ответы пользователя на вопросы анкеты.

Объект с ответами строится на базе информации о соревновании из предыдущего раздела и представляет собой структуру. Пример:

  {
    'personal.name_last': 'Савельев',
    'personal.name_first': 'Константин',
    'personal.birthday': '1983-10-17',
    'personal.gender': :male,
    'contacts.email': 'inferno@bugz.ru'
  }

Все обязательные поля должны присутствовать в объекте. Форма строго проверяется перед сохранением, и вы получите сообщение об ошибках, в том числе и об ошибках валидации. Ниже представлен пример скрипта на ruby, который выполняет регистрацию для формы соревнования, применяемой по умолчанию.

require 'faraday'
require 'awesome_print'
require 'json'

heat = {
  race_id: 783,
  token: '9f9a9bc1-428d-4d2c-9b08-4c0cc0d0f251', # это фейковый токен, не используйте его, он не будет работать
  code: 'DSDEFRG', # вы можете указать промо-код, который будет использован для формирования заявки
  form_fields: {
    'personal.name_last': 'Савельев',
    'personal.name_first': 'Константин',
    'personal.birthday': '1983-10-17',
    'personal.gender': :male,
    'contacts.email': 'inferno@bugz.ru'
  }
}

# Обратите внимание — https подключение
c = Faraday.new(url: 'https://api.reg.place') do |faraday|
  faraday.headers['Content-Type'] = 'application/json'
  faraday.response :logger
  faraday.adapter  Faraday.default_adapter
end

res = c.post do |req|
  req.url '/v1/heats'
  req.headers['Content-Type'] = 'application/json'
  req.body = heat.to_json
end

ap JSON.parse(res.body)

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

{
        "status" => "success",
    "event_name" => "Такеда Весенний гром",
    "race_name" => "Полумарафон",
          "heat" => {
                "id" => 78838,
            "status" => "created",
        "payment_url" => "https://securepayments.sberbank.ru/payment/merchants/rbs/payment_ru.html?mdOrder=7e936be5-01d0-437e-8200-31e0d459830b"
    }
}

При неудачной регистрации, ответ вида:

{
    "status" => "error",
    "message" => "не удалось создать заявку",
    "errors" => {
        "personal.name_last" => "не может быть пустым",
            "contacts.email" => "имеет неверное значение"
    }
}

Если вы попытаетесь зарегистрироваться на соревнование с реквизитами, с которыми уже ранее создавали заявку (имя, фамилия, год рождения), вам будет возвращена информация о вашей ранее созданной заявке. Используйте payment_url для повторной оплаты.

Примечание №1: соревнование можно настроить на сбор пожертвований; при регистрации вы можете указать пожертвование в ключе donation; если для соревнования сбор пожертвований запрещен, при попытке создать заявку вы получите ошибку.

Примечание №2: вы можете привязать существующего участника к заявке, для этого вам нужно передать в ключ athlete_id уникальный идентификатор участника.

Получение информации о заявке

Для получения информации о заявке вам необходимо выполнить GET-запрос по адресу https://api.reg.place/v1/heats/{id}, где id — номер заявки. Пример ответа:

{
  "heat": {
    "id": 78829,
    "status": "locked", // статус заявки: locked — оплачивается, ready — оплачено, created — новая, cancelled — отменена
    "name_first": "Константин",
    "name_last": "Савельев",
    "name_middle": null,
    "birthday": "1983-10-17",
    "gender": "male",
    "paid_at": null, // дата оплаты заявки, если оплата была
    "heat_url": "http://api.reg.place/heats/5d6ab3bb-7bce-48cc-8534-9fd382307a0c" // ссылка на страничку заявки на http://reg.place
  }
}

Также вы можете получить список всех актуальных заявок для всех дисциплин выбранного соревнования, для этого выполните GET-запрос по адресу https://api.reg.place/v1/events/{slug}/heats, где slug — айди соревнования. Будет возвращен json объект, содержащий все дисциплины и актуальные заявки для них.