Регистрация через 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
При успешной регистрации вы получите 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 объект, содержащий все дисциплины и актуальные заявки для них.