visit - instasport/club-api GitHub Wiki

Запись или отмена записи на тренировку

Для записи или отмены записи на тренировку в заголовке авторизации необходимо указать токен (авторизованного клиента) и клуб.

Подача заявки на тренировку.

Неоплаченная заявка не гарантирует место на тренировке.

Обязательные параметры

eventId - ID тренировки
origin - 5 для мобильного приложения, 3 для сайта клуба (плагина), 2 для сайта Instasport

Необязательные параметры

familyProfileId - ID пользователя для записи члена семьи
options - JsonString, массив ID которые необходимо добавить к тренировке
mutation RequestVisitMutation {
    requestVisit(eventId: 690867, origin: 5, familyProfileId: 60432, options: "[31, 32]") {
        visit {
            id
        }
    }
}

Оплата тренировки абонементом

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

Если указать параметр visitId, то будет авторизовано уже существующее посещение. visitId - id неавторизованного посещения(заявки) или забронированного посещения. В случае ошибки уже существующее посещение не будет удалено.

Параметры (все обязательные)

event - ID тренировки
card - ID абонемента
origin - 5 для мобильного приложения, 3 для сайта клуба (плагина) 

Необязательные параметры

familyProfileId - ID пользователя для записи члена семьи
visitId - ID посещения которое необходимо оплатить.
mutation PayVisitByCard {
  payVisitByCard {
    visit(event: 12345, card: 100, origin: 5, familyProfileId: 60000) {
      visit {
        id
      }
    }
  }
}

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

После вызова функции будет создано посещение. Посещение будет оплачено со счета. Если это не возможно, то посещение будет удалено.

Если указать параметр visitId, то будет авторизовано уже существующее посещение. visitId - id неавторизованного посещения(заявки) или забронированного посещения. В случае ошибки уже существующее посещение не будет удалено.

Параметры (все обязательные)

event - ID тренировки
origin - 5 для мобильного приложения, 3 для сайта клуба (плагина)

Необязательные параметры

familyProfileId - ID пользователя для записи члена семьи
visitId - ID посещения которое необходимо оплатить.
mutation PayVisitFromAccount {
  payVisitFromAccount {
    visit(event: 12345, origin: 5, options: "[31, 32]) {
      visit {
        id
      }
    }
  }
}

Бронирование тренировки

После вызова функции будет создано посещение. Посещение будет забронировано. Если это не возможно, то посещение будет удалено.

Если указать параметр visitId, то будет авторизовано уже существующее посещение. visitId - id неавторизованного посещения(заявки). В случае ошибки уже существующее посещение не будет удалено.

Параметры (все обязательные)

event - ID тренировки
origin - 5 для мобильного приложения, 3 для сайта клуба (плагина)

Необязательные параметры

familyProfileId - ID пользователя для записи члена семьи
visitId - ID посещения которое необходимо оплатить.
options - JsonString, массив ID опций которые необходимо добавить к тренировке
mutation BookVisit {
  bookVisit {
    visit(event: 12345, origin: 5, options: "[31, 32]") {
      visit {
        id
      }
    }
  }
}

Оплата тренировки через liqpay/wayforpay

Данные для оплаты тренировки можно получить в полях liqpay/wayforpay запроса ClientEventDetail

Оплата тренировки через liqpay/wayforpay для семейных профилей.

Данные для оплаты тренировки для семейного профиля можно получить в запросе ClientEventDetail в поле family.

Пример запроса

В поля wayforpay и liqpay необходимо передавать обязательный параметр eventId.

eventId - int. ID тренировки которую необходимо оплатить.
clientReturnUrl - строка. Необязательный параметр. url на который буде перенаправлен клиент после совершения оплаты
query event {
    clientEvent(id:725141) {
        id
        family {
            id 
            wayforpay(eventId:725141, clientReturnUrl: "url"){
                merchantAccount
                merchantDomainName
                merchantSignature
                orderReference
                orderDate
                amount
                currency
                productName
                productCount
                productPrice
                returnUrl
                serviceUrl
                action
                price
                clientCommission
                comment
            }
            liqpay(eventId:725141, clientReturnUrl: "url"){
                data
                signature
                action
                price
                clientCommission
                comment
            }
        }
    }
}

При оплате существующего посещения через Liqpay/Wayforpay необходимо выполнить дополнительный запрос

mutation {setVisitPaymentOrderProcessing(visitId: 12345){ok}}

Оплата тренировки через Apple Pay и Google Pay

Запрос для оплаты тренировки через Apple Pay или Google Pay. Параметры запроса:

eventId - int, обязательный параметр
origin - int, обязательный параметр (5 для мобильного приложения)
visitId - int, необязательный параметр. Используется для оплаты уже существующей тренировки
familyProfileId - int, необязательный параметр. Используется для оплаты тренировки семейного профиля
options - JsonString, массив ID опций которые необходимо добавить к тренировке

Для оплаты через Apple Pay необходимо передавать параметры data и key

data - строка, данные полученные от Apple Pay
key - строка, данные полученные от Apple Pay

Для оплаты через Google Pay необходимо передавать параметр token

token - строка, токен полученный от Google Pay
mutation AppPayVisit {
    appPayVisit(eventId:771820, origin:5, visitId:1856120, familyProfileId: 68321, data:"data" key:"key" token: "token", options: "[31, 32]") {
        ok
    }
}

В результате успешной оплаты будет возвращено bool True. В случае ошибок:

  • GraphQLError - указанны неправильные параметры, например несуществующий eventId или не указаны data и key или token
  • InstasportGraphQLError с кодом ошибки RESULT_PAYMENT_ERROR = 20 - неуспешный платеж
  • InstasportGraphQLError с кодом ошибки RESULT_PAYMENT_3D_SECURE = 21 - необходимо 3D-Secure подтверждение платежа от клиента
  • InstasportGraphQLError с кодом ошибки RESULT_PAYMENT_WAIT_STATUS = 22 - получен wait статус от платежной системы. Ожидание завершения обработки платежа

Отмена записи на тренировку

После вызова функции будет удалено посещение.

mutation DeleteVisit {
  deleteVisit {
    visit(id: 67890) {
      ok
    }
  }
}

Просмотр записей на тренировку

Для просмотра записей на тренировку в заголовке авторизации необходимо указать токен (авторизованного клиента) и клуб. Можно просматривать прошедшие записи и записи на будущее.

Все параметры необязательные

startDate - начальная дата, если не указана, то используется сегодняшняя
endDate - конечная дата, если не указана, то возвращаются все тренировки, начиная со startDate
hall - ID зала, если не указан то показываются посещения по всем залам в клубе
event - ID тренировки, если не указан, то показываются посещения по всем тренировкам
query Visits {
  visits(startDate: "2020-09-01", endDate: "2020-10-01", hall: 10, event: 12345) {
    visit {
      id
      event {
        date
        duration
        title
      }
      authorized
      paid
      payment
      payments {
          title
          chocie
      }
      cards {
        id
      }
      paidByCard {
        id
      }
      liqpay {
        price
      }
      wayforpay {
        price
      }
    }
  }
}

История записей на тренировки

Параметры запроса

   page - int, страница
   pageSize - int, количество тренировок на старницу
query Visit {
    visitHistory(page:1, pageSize:5) {
        id
        event {
            id
            instructor {
                id
            }
            template {
                headline
                duration
                activity {
                    id
                }
            }
        }
        user {
            id
            firstName
        }
        paid
        paidStatus 
        paidStatusShort
    }
}

Возвращаемые данные

date - дата/время тренировки
title - название тренировки
authorized - авторизованное посещение или нет (если посещение забронировано или оплачено, то оно считается авторизованным)
paid - как было оплачено посещение
paid_by_card - если посещение было оплачено абонементом, то это ID абонемента

Значение paid

-1 - не оплачено
0 - подарок
1 - оплачено за наличные
2 - оплачено онлайн через Liqpay
3 - оплачено с абонемента
4 - оплачено со внутреннего счета
5 - посещение забронировано
6 - оплачено по безналу (терминал в клубе)
10 - оплачено онлайн через Portmone
11 - оплачено онлайн через WayForPay
query VisitDetail {
  visit(id: 12345) {
    visit {
      id
      event {
        date
        duration
        title
      }
      authorized
      paid
      paidByCard {
        id
      }
      refundable
      payment
      payments {
          title
          chocie
      }
      cards {
        id
      }
      status
      paidStatus
      liqpay {
        price
      }
      wayforpay {
        price
      }
      availableOptions {
        id
        title
        price
        description
        promocodePrice
        image
      }
      visitOptions {
        id
        title
        price
        description
        image
        paid
      }
     priceWithOptions
    }
  }
}

Поле paidStatus

'Неавторизованная заявка. Место не гарантированно'
'Тренировка вам подарена'
'Тренировка оплачена наличными'
'Тренировка оплачена кредитной картой'
'Тренировка оплачена по безналу'
'Тренировка оплачена абонементом'
'Тренировка оплачена со счета'
'Вам забронировано место'

Поле status

'Время отмены прошло'

Дополнительные поля

refundable - возможна ли отмена или нет
payment (deprecated) - варианты оплат
payments  - варианты и название оплат, напирмер "payments": [{"choice": 4,"title": "Оплатить со счета"},]
cards - абонементы, которыми можно оплатить посещение
paidStatus - строка отображающая статус оплаты
status - строка отображающая статус возможности отмены
availableOptions - массив опций которые можно добавить к тренировке
visitOptions - массив опций добавленых к тренировке
liqpay - данные для оплаты через liqpay
wayforpay - данные для оплаты через wayforpay

Опции

Добавление опций к существующей тренировке

Обязательные параметры запросов

    visitId - Int, ID тренировки
    options - JsonString, массив ID опций, кторорые необходимо добавить к тренировке
mutation VisitAddOption {
    visitAddOption(visitId: 2124059, options:"[32, 33]") {
    visit {
      id
      availableOptions{
        id
        title
        price
     } 
     visitOptions {
        id
        title
        price
        paid
     } 
   }
  }
}
mutation VisitRemoveOption {
    visitAddOption(visitId: 2124059, options:"[1110, 1111]") {
    visit {
      id
      availableOptions{
        id
        title
        price
     } 
     visitOptions {
        id
        title
        price
        paid
     } 
   }
  }
}

Гостевые визиты

Для создания гостевого визита клиент должен оплатить тренировку с абонемента на котором есть гостевые посещения.

Создание гостевого визита происходит в 2 этапа.

Этап 1

Параметры запроса, все обязательные

   phone - string, номер телефона гостя
   visitId - int, ID визита оплаченного абонементом
   firstName - string, имя гостя
   lastName - string, фамилия гостя
   birthday - date, дата рождения гостя
   origin - 5 для мобильного приложения, 3 для сайта клуба (плагина)
mutation CreateGuestProfile {
    createGuestVisit(visitId:2630725, phone:"+380976282322", firstName: "first name", lastName:"last name" origin:3 birthday: "16.10.1994") {
        ok
     }
}

В результате успешного выполнения запроса гостю на телефон будет отправлено смс с кодом и ссылкой для ввода кода.

Этап 2

Подтверждение гостевого визита.

Параметры запроса, все обязательные

   code - string, код из смс
   data - string, параметр полученный в GET запросе
   origin - 5 для мобильного приложения, 3 для сайта клуба (плагина)
mutation CreateGuestProfile {
     phoneVerifyGuest(code:"4225" origin: 3, data: "KzM4MDk3NjI4MjMyMi8yNjMwNzI1LzUzMDM0cccc") {token {
    accessToken
    }
}}

В результате запроса гость подвердит номер телефона и будет записан на гостевой визит.