Основы
Запрос
Взаимодействие осуществляется через отправку обычных HTTP-запросов на
api.behappy2day.com. Поддерживаются как обычное, так и SSL-соединение.
Формат входных данных такой же, как и при отправке обычных форм в HTML
(application/x-www-form-urlencoded или multipart/form-data).
Ответ
Разбирая ответ сервера, необходимо ориентироваться на код статуса ответа и тело ответа,
представленное в формате JSON. Если у пользователя была установлена cookie rm2
(играет роль remember me), при возобновлении сессии с помощью этой куки в ответ будут
добавлены свойства X-New-SID (новый sid, все последующие запросы следует выполнять с
ним) и X-New-Login (пока не используется).
{
"field": "password",
"value": null,
"rule": "validate_required",
"param": null
}
Здесь field – поле, не прошедшее проверку,
value – поданное значение,
rule – правило, которому поле должно было соответствовать,
param – параметр правила (в случае с минимальной/максимальной длиной, например).
0. {
1. "code": 255,
2. "validation_result":
3. {
4. "main_ruleset":
5. [
6. {
7. "field": "password",
8. "value": null,
9. "rule": "validate_required",
11. }
12. ],
13. "alt_ruleset":
14. [
15. {
20. },
21. {
26. }
27. ]
28. }
29.}
Автоматический переводчик
В данный момент в методах, поддерживающих автоматический переводчик,
используются следующие языки:
en - English
de - Deutsch
da - Dansk
es - Español
fr - Français
it - Italiano
nl - Nederlands
pt - Português
fi - Suomi
ru - Русский
sv - Svenska
zh-CN - 中国
ja - 日本語
ar - العربية
«Карта» методов
Каждый GET-запрос может быть заменён на POST /gp/<оригинальный адрес>.
Man_ManageFavorites POST
/men/(?<login>[a-z\d]+|me)/favorites/(?<action>add|delete)
Chat_PurchaseOfflineMessage POST
/chat/(?<id>[a-z\d]+)/offline-messages/(?<message_id>\d+)
Misc_GetTestimonialsGET /testimonials
LuckyMingle_RetrievePOST /services/lucky-mingle/retrieve
Предоставляемые методы
Входные данные, отмеченные зелёным, поставляются из адресной строки.
Session_GetStatus
Различная статистика по сессии
Вход:
Выход:
{
"logged_in": bool
}
Session_Terminate
Завершить текущую сессию
Вход:
Выход:
Man_Register
Регистрация нового мужчины
Вход:
firstname:string
password:string
birthday:string Y-m-d
emailaddress:string
country:string
state:string
pp_and_tc_acceptance:0|1 - cогласие с Privacy Policy и Terms and Conditions
newsletter_acceptance:0|1 - согласие на получение newsletters
require_auth_link:0|1 - в ответе должен быть линк на заход на основной сайт
Выход:
{
"login": string,
"password": string,
}
Man_Auth
Аутентификация мужчины
Вход:
Выход:
{
"sid": string, // ID новой сессии
"login": string, // реальный ID клиента
“origin”: string // source / medium для данного клиента
}
Man_GetStatus
Получить «статус» мужчины.
Вход:
Выход:
{
credits:int, //баланс
favorites:int, // всего девушек в контакт-листе
inbox:
{
total:int, //всего писем
unread:int, // непрочитанных писем
unread_online_camera:int // непрочитанных писем от девушек онлайн
с камерой
},
virtual_gifts:
{
unread:int // неоткрытых входящих вирт подарков
},
cs:
{
unread:int // всего непрочитанных писем в Customer Support
unread_high_priority: [
ticket_id:string // ID непрочитанного тикета с высоким
приоритетом (требует блокирующего уведомления)
]
}
bonus:
{
free_chat_min:int, // доступно бесплатных минут чата
free_lm:int, // доступно бесплатных Lucky Mingle
credits:?int, // доступно бонусных кредитов
bonus_popup_index:int // какую оповещалку про бонусы нужно показать
(если он его ещё не видел, просмотр сохраняет девайс)
free_reads:int // доступно бесплатных входящих писем
free_chat_photos:?int, // (акция) доступно бесплатных входящих фото
в чате
free_out_chat_photos:?int, // (акция) доступно бесплатных исходящих
фото в чате
free_in_clips:?int, // (акция) доступно бесплатных входящих клипов
в чате
free_out_clips:?int, // (акция) доступно бесплатных исходящих клипов
в чате
free_out_stickers:?int // (акция) доступно бесплатных отправок
стикеров в чате
},
phone_calls:
{
unconfirmed:int, // число звонков, ожидающих подтверждения
watch_queue: // Очередь оповещений по звонкам
[
{
id:string,
type:string,
lady:
{
id:int,
name:string,
photo:url,
}
}
]
},
birthday_notifications:
[
{
id:int,
lady:
{
id:int,
name:string,
photo:url,
}
days_left:int // Дней до дня рождения, может быть отрицательным,
тогда он прошёл
}
],
email_verified:bool, // Подтвердил ли клиент свой имейл
email_info:?object // если не подтвердил
{
email:string, // на этот адрес было выслано подтверждение
homepage:url, // линк на страницу проверки почты, подставляется для
Gmail, Yahoo, Aol, Hotmail
},
misc_notifications:
[
{
id:int,
date:string, // Y-m-d H:i:s
type:string,
link:url,
image:url,
content:mixed // Зависит от type
lady:?int // Девушка, связанная с оповещением
{
id:int,
age:int,
name:string,
photo:url,
}
}
]
}
bonus_popup_index
=2 You have {credits} bonus credits. You are welcome to chat {credits} minutes for FREE.
Please enjoy our services!
phone_calls.watch_queue[].type
new|rescheduled|confirmed
misc_notifications[].type
misc_notifications[].content
Для offline_message
{
id:int // Id оффлайн-сообщения
}
Для missed_chat
{
message:html // текст сообщения
}
bonus_popup_index
=2 You have {credits} bonus credits. You are welcome to chat {credits} minutes for FREE.
Please enjoy our services!
phone_calls.watch_queue[].type
new|rescheduled|confirmed
Man_FetchProfile
Получить профиль мужчины, то есть параметры, доступные для редактирования
Вход:
login
with_avatar:bool
Выход:
{
"firstname": string,
"lastname": string,
"emailaddress": string,
"country": string,
"usstate": string,
"province": string,
"address": string,
"city": string,
"zip": string,
"citycode": string,
"phonenumber": string,
"phonenumber_country_code": string,
"phonenumber_number": string,
"birthday": date,
"heightcm": uint,
"weightkg": uint,
"haircolor": string,
"eyecolor": string,
"maritalstatus": string,
"religion": string,
"drinking": string,
"smoking": 0|1,
"education": string,
"profession": string,
"interests": string,
"kharacter": string,
"lookingforagestarting": string,
"lookingforageending": string,
"lookingfortype": string,
“avatar”:?url
}
Man_FetchAccount
Инфо об аккаунте мужчины. Список полей, которые можно обновить через
Man_UpdateAccount
Вход:
Выход:
{
password:string // всегда пусто
}
Man_UpdateProfile
Внесение изменений в профиль мужчины
Вход: updates:array см. выход Man_FetchProfile, кроме avatar + login - логин пользователя.
Man_UpdateAccount
Вход:
Man_FetchSettings
Дополнительные настройки.
Выход:
{
"auto_purchase_allowed":string - разрешены ли автопокупки;
“email_preferences”:
{
“newsletters”:0|1 - Согласие на получение Newsletters/Ads;
“personal_notifications”:0|1 - Согласие на получение оповещений о
новых письмах и т.п.
},
“language_preferences”: // на данный момент оно автозаполняется основе
заполнения полей Language анкеты. Если поля не заполнены, опирается на
Accept-Language
{
primary_language:string,
secondary_language:string
}
}
Man_UpdateSettings
Вход:
login - логин пользователя
updates: Man_FetchSettings, кроме language_preferences
Man_UploadPhotos
Вход:
Выход:
v=2
[
{ // если ошибка
error:string
},
{ // если ок
id:int,
width:int,
height:int,
href:url
},...
]
Man_GetPhotos
Получить фото в профайле мужчины
Вход:
Выход:
v=1
[
"href": url,
“id”:int,
},
…
]
v=2
0. [
1. {
2. id:int,
3. href:url,
6. width:int,
7. height:int,
8. },...
9. ]
Man_DeletePhoto
Удалить фото из профайла мужчины
Вход:
Man_GetExclusiveVideos
Получить список девушек, у которых клиент смотрел видео
Вход:
login - логин пользователя
Выход:
[
{
lady: {
id:int,
name:string,
photo:url
},
videos: [
{
id:string,
number:int - порядковый номер видео
}
]
]
Man_RemindPassword
Запросить напоминалку пароля на почту. При запросе пароль пользователя меняется на
новый автоматически
Вход:
email:string
Man_ResendRegistrationEmail
Заново отправить имейл о регистрации для подтверждения ящика
Вход:
login:string
Man_ManageFavorites
Управление списком favorites
Вход:
Выход:
Man_RetrieveCreditsHistory
Получить историю трат/начислений кредитов
Вход:
Выход:
[
{
“id”:int, //ID операции
“stamp”:int, // время
“description”:string,
“credits”:int // “сумма изменения”, бывает
отрицательной и положительной. Или 0 в исключительных случаях
(например, когда обнаружена мошенническая покупка)
},
…
]
Man_StoreDeviceToken
Сохранить токен устройства клиента (Firebase)
Вход:
Man_RetrieveBonusPoints
Получить информацию по бонусному счёту
Вход:
login:string
Выход:
{
send_letters:int,
livechat_minutes:int,
read_letter:int,
replies:int
}
Ladies_Retrieve
Получить список из каталога девушек по определённым критериям
Вход:
filters:array
asian:void
slavic:void
latin:void
european:void
us_canada:void
online:void
not_online:void
birthday_soon:void (день рождения через месяц или ближе)
country:string (из списка countries)
residence:string (из списка residences)
name:string
age_from:int
age_to:int
height_from:int (Из табл. tsp_height)
height_to:int (Из табл. tsp_height)
weight_from:int (Из табл. tsp_weight)
weight_to:int (Из табл. tsp_weight)
hair_color:int (Из табл. tsp_hair_color)
eye_color:int (Из табл. tsp_eyes_color)
smoking:int (Из табл. tsp_smoking)
drinking:int (Из табл. tsp_drinking)
education:int (Из табл. tsp_education)
marital_status:int (Из табл. tsp_marital_status)
english:int (Из табл. tsp_english)
children:int (Из табл. tsp_children)
plans_children:int (Из табл. tsp_plans_children)
religion:int (Из табл. tsp_religion)
zodiac:int (Из табл. tsp_astrology_sign) asian
favorite:void
id:int,
has_correspondence_with_me:void (фильтр только тех, с кем есть переписка)
limit:int = 1000 по умолчанию
offset:int = 0
sort:array
type:string
age,
profile_date // время создания анкеты
last_act // время последней активности онлайн
rand
online
camera
id
rating // внутренний рейтинг
name
direction
0 – ASC
1 – DESC
Выход:
{
"result":
[
{
"id": int,
"name": string
"age": int,
“area”:string,
"residence": string,
“is_new_profile”: bool,
"is_online": bool,
"has_webcam": bool,
"small_photo": url,
"favorite": bool,
“time_zone”:string,
},
…
],
"total_count": int
}
area
A = asian
R = russian
U = ukrainian
L = latin
E = european
Ladies_GetVideoGallery
Вход:
filters:array
date_add:array<string> - фильтр по дате загрузки, две даты Y-m-d H:i:s
lady_id:int|array<int>
video_id:string|array<string>
watched_only:void - только просмотренные клиентом
sort:array
type:string
date_add
last_year_views
watched - сортировка по тому, просмотрено ли видео
lady_title_russian
lady_title_asian
direction
0 – ASC
1 – DESC
limit:int
offset:int
Выход:
[
{
id:string,
source:object - см. Lady_GetVideos,
_lady: {
id:int,
name:string,
age:int,
residence:string,
status_string:string, // “Статус” в профиле
is_online:bool,
has_webcam:bool,
small_photo:url,
favorite:bool
},
is_payment_needed:bool
},
...
]
Ladies_GetVideoGalleryItem
Получить отдельное видео в галерее
Вход:
id:string
Выход:
[
{
id:string,
source:object - см. Lady_GetVideos,
is_payment_needed:bool
},
...
]
Lady_FetchProfile
Вход:
id:int
navigation:int 0|1 - включить “предыдущий” и “следующий” профиль
Выход:
{
"id": int,
"firstname": string,
"residence": string,
"age": int,
"birthday": date,
"hair_color": string,
"eyes_color": string,
"drinking": string,
"smoking": string,
"occupation": string,
"education": string,
"marital_status": string,
"english": string,
"religion": string,
"children":
[
{
"sex": 0|1, - Ж|М,
"age":int,
},
…
],
"plans_children": "Yes"|"No",
"zodiac": string,
"self_description": string,
"searching_for": string,
"interests": string,
"favorite": bool,
"is_online": bool,
"has_webcam": bool
"videos_count":int,
"has_interview":bool,
{
id:int,
url:url
}
],
navigation:
{
next:int,
previous:int
}
}
Lady_GetPhotos
Вход:
id:int
w:int - ширина превью в режиме shrink.
pm:string - (shrink|blur) - тип превью. shrink - уменьшенная копия, blur - размытая
копия. Режим по умолчанию - shrink.
Выход:
{
"more_available": bool,
{
"href": url,
"description": string
},
{
"href": url
"description": string
},
"extra":
[
{
"href": url,
"description": string,
“height”: int,
“width”: int
},
…
],
"exclusive_previews":
[
{
"href": url,
"description": string
},
…
]
}
Lady_GetInterview
Получение результатов «интервью». Оно есть далеко не у всех.
Вход:
id
Выход:
[
{
},
{
"q": "My favorite movie:",
},
{
},
…
]
Lady_GetVideos
Вход:
id:int
Выход:
[
{
"id":string,
"source": { //
(360|480|720|1080): { // "качество видео", 360,
480 и т.д.
"src":url, // ссылка на видео
"thumb_src":url, // ссылка на превью
"width":int,
"height":int
},
…
}
"is_payment_needed":bool
},
]
Services_GetConfig
Получить кратую информацию по сервисам
Выход:
{
services:
{
mail:
{
p_read:int, // цена за прочтение
p_send:int, // цена за отправку
p_attachment:int, // цена за отправку фото в письме,
сверх бесплатного лимита
free_attachments:int, // кол-во фото, которое можно
отправить с письмом бесплатно
},
live_chat:
{
p_per_minute:int, // цена за минуту
attachment_price:int, // цена отправки/получения
фото для клиента
attachment_base_price:int, // цена
отправки/получения фото, обычная
shortie_price:int, // цена отправки клипа
shortie_receive_price:int, // цена получения клипа
translator_langs: // языки автоматического
переводчика, этот список актуален и для писем
[
{
lang:str, //двухбуквенный код
caption:str, // самоназвание языка
caption_en:str, // название языка на
английском
image:str, //
https://static.behappy2day.com/chat/m/img/flags/png/{image}.
png содержит изображение соответствующего флага
},...
]
},
live_video_chat:
{
p_per_minute:int, // цена за минуту
},
two_way_live_video_chat:
{
p_per_minute:int, // цена за минуту
},
exclusive_photos:
{
p:int, // цена за просмотр доп. фото одной девушки
},
watch_video:
{
p:int, // цена за просмотр видео в профиле
},
virtual_gift:
{
p:int, // цена за отправку вирт подарков
p_contacts:int, // цена за отправку контактов с вирт
подарками
},
phone_calls:
{
p:int, // цена за минуту звонка
min_prepaid:int, // минимальное кол-во
предоплаченных минут
},
lucky_mingle:
{
p:int, // цена за один Lucky Mingle
}
},
main_site_theme:?string, // BH: тема на основном сайте
show_theme_switch:?string, // (для моб версии BH)
theme_switch_block_position:?string, // (для моб версии BH)
}
Mail_Send
Отправка письма.
Вход:
girl_id:int
subject:string
message:string
replied_on:string – если это ответ на какое-то письмо, необходимо поставить ID
этого письма
attachments:array<int> ИЛИ прикрепляемые файлы
v:int - версия тела письма. 1 - простой текст, 2 - HTML-письмо. По умолчанию – 1
Выход:
{
}
Mail_UploadAttachments
Загрузка аттачмента в систему
Вход:
+ прикрепляемые файлы
Выход:
Mail_Retrieve
Получить список писем по определённым критериям
Вход:
filters:array
box:string – in|out|all
lady:int
is_read:1|0
is_deleted:1|0
is_favorite:1|0
date_sent:array<string> - массив из двух Y-m-d
with_attachments:1|0
limit:int = 100 по умолчанию
offset:int = 0
with_stub - включить начало текста сообщения
sort:array
type:string
date
is_read
is_lady_favorite
direction
0 – ASC
1 – DESC
Выход:
{
"result":
[
{
"id": string,
"lady_id": int,
"from": string,
"to": string,
"subject": string,
"girl_name": string,
"girl_age": int,
"girl_is_online": bool,
"girl_has_camera": bool,
"girl_photo_small": url,
"girl_photo_big": url,
"man_name": string,
"man_photo_big": url,
"stamp": int,
"is_read": bool,
"has_attachments": bool,
"has_clips": bool,
},
…
],
"total_count": "368"
}
Mail_Read
Прочтение конкретного письма
Вход:
lid
rtok:string - токен для бесплатного прочтения письма, если известен
t_lang - Язык, на который нужно перевести письмо
Выход:
{
"id": string,
"from": string,
"to": string,
"subject": string,
"girl_name": string,
"girl_age": string,
"girl_residence": string,
"girl_photo_small": url
"girl_photo_big": url
"stamp": int,
"is_read": bool,
"has_attachments": bool,
“has_clips”:bool,
"lady_id": int,
"message": string,
"attachments":
[
{
"href": url,
"description": string
},
…
],
"clips":
[
{
"id": int,
},
…
]
}
Mail_Delete
Вход:
lid
Выход:
Mail_Restore
Вход:
lid
Выход:
Chat_GetSettings
Получить специфические настройки чата
Вход:
Выход:
{
"ff"":array<string>, - шрифты,
[
{
"code": string,
"href": url
},
],
[
{
"code": string,
"href": url
},
…
]
}
Выход с smilies_v2:
0. {
1. "ff"":array<string>, // шрифты,
6. "smilies": {
9. {
10. “title”:string,
11. “type”:string,
14. },
15. …
16. ],
18. /.*/: {
21. }
22. }
23. }
24.}
Выход с smilies_v = 3:
id:int,
available:bool - может ли клиент пользоваться этим набором
price_per_usage:int - цена за использование 1 стикера
price:int - цена за открытие набора
Chat_GetMessages
Получение сообщений в чате с указанным собеседником.
Вход:
id – ID собеседника в чате
autotran_enabled:int
autotran_lang:string
limit:int
offset:int
history:1|0 - если 1, это выбираются сообщения не из текущего чата, история
offline - запрос оффлайн-сообщений
offline_unread:1 - запрос непрочитанных оффлайн-сообщений
filters:array
last_timestamp:int
history_first_timestamp:int - с какого времени брать историю
history_last_timestamp:int - до какого времени брать историю
from - ID того, чьи сообщения нужно искать
Выход:
{
result:
[
{
id: string,
from: string,
to: string,
message: string,
style:
{
c: string // цвет
},
is_read:bool,
is_offline:bool,
time:int,
}
],
total_count: int
}
Chat_SendMessage
Вход:
id – ID собеседника
message:string
style:array
ff – шрифт
fs – размер шрифта
c – цвет шрифта
autotran_enabled:bool // Включен ли переводчик
autotran_lang:string // Язык переводчика
Выход:
{
“message”:Chat_GetMessages
}
Chat_GetVideo
Получить стрим собеседника в чате. Также доступно WebRTC, необходимо задействовать
Flashphoner/Web call server SDK.
Вход:
id – ID собеседника
Выход:
{
“id”:string - ID стрима
"source":
{
"ws":url,
"rtsp":url,
"rtmp":url
}
}
Chat_SendEvent
Отправка нового события в чат
Вход:
id – ID собеседника
evt_code:string –
enter|leave|video_request|video_start|video_end|broadcast_start|broadcast_end
evt_data:array
stream_id:string ID своего стрима
Chat_GetInvites
Вход:
last_timestamp:int
from:?int - ID пользователя, от которого нужно искать инвайт
Выход:
{
id: string,
lady:{Lady},
message:string,
stamp:int,
bonus:bool // бесплатный ли чат
}
где Lady:
{
id:int,
name:string,
age:int,
residence:string,
is_online:bool,
has_webcam:bool,
small_photo:url,
favorite:bool
}
Chat_UpdateInvite
Принятие/отклонение инвайта
Вход:
id:string – ID приглашения
action:string – accept|decline
Выход:
Chat_GetSessions
Список активных сессий в чате
Вход:
Выход:
[
{
"id":string,
"message":string,
"lady":
{
"id": string,
"name": string,
"age": int,
"residence": string,
“status_string:string,
"is_online": bool,
"has_webcam": bool,
"small_photo": url,
"favorite": bool
}
},
…
]
Chat_UploadAttachments
Загрузка фото/клипа для пересылки в чате. Фото или клип - определяется по MIME.
Вход:
Выход:
0. [
1. {
2. “type”:(photo|shortie), - фото или клип
3. "id":int,
4. "path":?url, // относительно, см. Chat_GetSettings
5. “poster”:?url, // предпросмотр для клипа, относительно, см.
Chat_GetSettings
6. "width":int,
7. “height”:int
8. },
9. …
10.]
Chat_GetHistoryLadies
Получить список девушек, с кем когда-либо был чат
Выход:
[
{
"id": int,
"name": string
"age": int,
"residence": string,
"is_online": bool,
"has_webcam": bool,
"small_photo": url
},…
]
Chat_GetHistoryDays
Получить список дат, в которые был чат
Вход:
filters:array
lady:int
Выход:
[
‘YYYY-mm-dd’,
…
]
Chat_GetHistoryList
Получить список чатов соответственно критериям
Вход:
Выход:
{
“count”:int,
“chats”: [
{
“gid”:int, // ID девушки
“gname”:string, // Имя девушки
“uid”:string, // ID мужчины
“uname”:string, // имя мужчины
“stamp_inv”:int, // отметка времени приглашения
“last_mess”:int, // ID последнего сообщения,
предшествующего чату
“totaltime”:string, // Продолжительность, мин.
“videotime”:string, // Продолжительность ВЧ, мин.
“dvctime”:string // Продолжительность ДВЧ, мин.
}
]
}
Chat_GetHistoryItem
Получить сообщения из определённого чата
Вход:
Выход:
[
object // см. Chat_GetMessages
]
Chat_CollectVCstats
Сбор статистики по ВЧ
Вход:
method - hls, nhls (нативный HLS), rtsp, flash (RTMP), web (websockets)
login - необязательный параметр
Chat_PurchaseStickersPack
Покупка набора стикеров.
Вход:
pack_id:int
Выход:
{
error:string // текст ошибки, если есть. Например, получен
неверный айди набора
}
Chat_PurchaseOfflineMessage
Купить просмотр оффлайн-сообщения
Вход:
message_id:int
Выход:
{
“message”:Chat_GetMessages
}
Payments_GetRetailersOrder
Получить список доступных пользователю основных биллингов в порядке использования
(для моб. версии сайта). Сейчас основные биллинги - DialXS, Verotel и CCBill.
Payments_Process_GooglePlay
Приём ответов от Google Play
Вход:
result:string – success|error
response:string – текст ответа от гугла
signature:string – гугловская сигнатура данных
Payments_Process_Itunes
Приём квитанций о покупке от iTunes. Возвращает код 200 если покупка прошла успешно,
400 – если покупка не прошла по вине клиента (дубль транзакции, неверный receipt), 500
– если покупка не прошла из-за ошибки сервера.
Вход:
Вход:
Выход:
{
"link":url
}
Payments_GetPurchaseLink_Verotel
Получить ссылку на покупку кредитов от Verotel
Вход:
Выход:
{
"link":url
}
Payments_GetPurchaseLink_Dimoco
Получить ссылку на покупку кредитов от Dimoco
Вход:
Выход:
0. {
1. "link":url
2. }
Payments_GetPurchaseLink_Xanpay
Получить ссылку на покупку кредитов от Xanpay
Вход:
Выход:
0. {
1. "link":url
2. }
Payments_GetAlternativePaymentMethods_Xanpay
Получить список методов покупки через Xanpay. Если метод возвращает результат, значит
клиенту доступен Xanpay, а все возвращённые картинки показываются на кнопке покупки
через Xanpay (потому что непосредственно выбор происходит уже на их платёжной
странице).
Выход:
[
{
key:string,
image:url,
name:string // Текстовое представление метода для
пользователя
}
]
Payments_GetPurchaseLink_Dialxs
Получить ссылку на покупку кредитов от DialXS
Вход:
Выход:
0. {
1. "link":url
2. }
Payments_GetAlternativePaymentMethods_Dialxs
Получить список методов покупки через DialXS. Если резальтат непустой, то клиенту
доступен DialXS, и каждый метод показывается отдельной кнопкой.
Выход:
0. [
1. {
2. key:string, // Эта строка подаётся в method при
получении ссылки на покупку
3. image:url,
4. name:string // Текстовое представление метода для
пользователя
5. }
6. ]
Payments_GetCreditsOptions
Получить список доступных опций для покупки кредитов
Вход:
Выход
[
{
"id":int,
"price":float,
"quantity":int,
"description":string,
"currency":string, // трёхбуквенный код
"currency_symbol":char,
"old_option":?object, // если указан, значит действует
скидка, а это поле содержит изначальный пункт
"extra":?int // кол-во бонусных кредитов за покупку
},
…
]
Services_ExclusivePhotos_Order
Оплата просмотра эксклюзивных фото.
Вход:
id:int – ID девушки
Services_WatchVideo_Order
Оплата просмотра видео
Вход:
id:string – ID видео
Services_ChatAttachments_Receive
Оплата просмотра фото/клипа в чате и их получения
Вход:
redirect:bool - если true, при успешной оплате будет выдан заголовок редиректа на
сам файл фото или клипа
Выход:
{
errcode:?int, - отладочный код
path:string, - путь к файлу фото или клипа относительно
соответствующего корня
poster:?string, - путь к постеру клипа относительно корня
width:int,
height:int,
}
Data_Ladies_GetResidenceList
Получение списков для поиска по городу/стране
Вход:
Выход:
{
"residences": array<string>,
"countries":array<string>
}
Data_GeoCityList
Получить список городов
Вход:
Выход:
[
{
"city_name":<string>
}
]
Data_GetOwnLocation
Получить свою локацию (по версии нашей системы)
Выход:
{
ip:string,
country:string,
is_eu:bool, // европейская ли локация
is_eu_user:bool, // европейский ли клиент
}
Misc_Unsubscribe
Отписывание пользователя от уведомления на эл. почту. Работает для неавторизованных
пользователей. Указание почты обязательно.
Вход:
string:emailaddress
Выход:
Misc_GetTestimonials
Получить список тестимониалов. Для длинных тестимониалов отдаётся превью
Вход:
offset:int
limit:int
Выход:
{
"result":
[
{
“id”:int,
“stamp”:int, // временная отметка
“name”:string, // автор тестимониала
“more”:bool, // представлено превью тестимониала
“excerpt”:string, // HTML-код превью тестимониала либо полного
текста, если more === true
“image”:string // URL картинки в превью, если есть
},
…
],
“total_count”:int
}
Misc_GetTestimonial
Получить отдельный тестимониал.
Вход
id:int
Выход:
{
“id”:int,
“stamp”:int, // временная отметка
“name”:string, // автор тестимониала
“content”:string // HTML-код текста тестимониала
}
CustomerSupport_GetThreads
Получить список существующих тикетов в кастомер суппорте
Вход:
Выход:
0. {
1. "result":
2. [
3. {
4. "id":string, // Внутренний ID тикета (не нужен)
5. "ticket_id":string, // Внешний ID тикета (показывать клиенту и
использовать в API)
6. "user_id":string, // ID клиента или Administrator, если тикет от
админа
7. "user_name":string, // имя инициировавшего тикет
8. "is_read":bool,
9. "category":string,
10. "text":string, // текст тикета
11. "stamp":int, // время создания
12. "stamp_last_admin_message":int|null, //время последнего сообщения
от юзера
13. "stamp_last_user_message":int|null, // время последнего сообщения
от админа
14. "stamp_last_message":int,
15. “priority”:int // 15 - LOW, 10 - NORMAL, 5 - HIGH
16. },
17. …
18. ]
19.}
Misc_AntiscamClaimSubmit
Подать жалобу на scam.
Вход:
email:string
phonenumber:string
date:string - любой формат
message:string
upload:array - файлы вложений в формате multipart/form-data
Misc_GetNews
Получить список новостей
Вход:
filters:array
id:int
limit:int
offset:int
Выход:
[
{
id:int,
stamp:int, - unix timestamp
type:string,
short:string, - заголовок
long:string,
url:?url,
preview_enabled:bool, - нужна ли картинка превью
preview:?url,
associated_girl: {
id:int,
name:string,
photo:url,
}
associated_blog_post_id:?int
}
]
CustomerSupport_GetCategories
Список доступных категорий для создания запроса
Вход:
Выход:
array<string>
CustomerSupport_GetThread
Получить сообщения из треда с заданным ID
Вход:
id:int
Выход:
1. {
2. "id":string,
3. "ticket_id":string,
4. "user_id":string,
5. "user_name":string,
6. "is_read":bool,
7. "category":string,
8. "text":string,
9. "stamp":int,
10. "stamp_last_admin_message":int|null,
11. "stamp_last_user_message":int|null,
12. "stamp_last_message":int,
13. "message_list": // список сообщений
14. [
15. {
16. "id":string, // ID сообщения
17. "thread_id":string, // внутренний ID тикета
18. "user_id":string,
19. "user_name":string,
20. "text":string,
21. "attachments":
22. [
23. {
24. "path":url,
25. "descr":text
26. }
27. ],
28. "stamp":int
29. },
...
30. ]
31.}
CustomerSupport_PostThread
Создать новый тикет
Вход:
Выход:
{
"thread_id":string, // внутренний ID
"ticket_id":string // внешний ID
}
CustomerSupport_PostReply
Ответить в тикете
Вход:
ticket:id - внешний ID тикета
text:string
Выход:
Gifts_GetCategories
Получить список категорий подарков
Вход:
Выход:
[
{
id:int,
name:string,
layout_type:int,
image:
{
url:url,
width:int,
height:int
}
is_new:bool
},...
]
layout_type:
5 - букеты
is_new: нужен ли значок new
Gifts_GetCategory
Получить категорию подарков
Вход:
id:int
lady_id:int
Выход:
[
{
id:int,
name:string,
layout_type:int,
image:
{
url:url,
width:int,
height:int
}
items: [
{
id:int,
title:string,
subtitle:string,
description:text,
price:int,
price_old:int,
image:
{
url:url,
width:int,
height:int
}
}
]
},...
]
subtitle: подзаголовок как в https://www.behappy2day.com/romantic_sets.php
Gifts_Cart_Add
Добавить подарок в корзину
Вход:
lady_id:int
gift_id:int
Gifts_Cart_Update
Пока это просто удалить подарок из корзины.
Вход:
Gifts_Cart_Get
Получить содержимое корзины
Gifts_Cart_Checkout
Рассчитаться за предметы в корзине
Выход:
{
transaction_id:string, // ID транзакции
onum:string // ID заказа
}
Gifts_GetOrders
Получить список своих заказов
Вход:
filters:?object
date:array<string> - даты заказа, Y-m-d
sort:?object
type:string - только date
direction - 0|1 - ASC|DESC
Выход:
{
result:
[
{
id:string,
transaction_id:string,
user_id:string,
lady:
{
id:int,
name:string,
photo:url,
online:bool,
camera:bool,
},
stamp:int, // Штамп времени заказа
scheduled_delivery_stamp:?int, // Штамп
запланированного времени заказа, если пусто, то as soon as
possible
status:int,
count_items:int,
grand_total:int,
},...
],
total_count:int
}
status:
0 = PENDING
1 = DELIVERED
2 = CANCELED
Gifts_GetOrder
Получить информацию по конкретному заказу.
Вход:
id
Выход:
{
... поля те же, что и для заказов в Gifts_GetOrders ...
items:
[
{
name:string,
quantity:int,
price:int,
}
]
}
Gifts_Cart_Postcheckout
Передать дополнительную информацию по успешно созданному заказу
Вход:
Services_VirtualGift_GetGiftList
Получить список доступных подарков. Если не подать категорию, будут все доступные. На
данный момент это только так и используется.
Virtual Gifts от Virtual Cards отличаются только размерами картинок, Gifts - картинки
192x192 (96x96), Cards - картинки разной ширины с высотой 384
Вход:
category:?int
type:int - 0 - обычные подарки, 1 - cards
Выход:
{
id:int,
url:url // URL картинки
}
Services_VirtualGift_Order
Сделать заказ подарка
Возможность отправить свои контакты в отдельном текстовом поле contacts есть только
если Ladies_Retreive для соответствующей девушки выдаёт vg_contacts_available = true
Вход:
lady_id:int
gift_id:int
message:?text
contacts:?text
VirtualGift_Retrieve
Получить список подарков
Вход:
filters:object
box:string - in|out|all
limit:?int
offset:?int
sort:?object
type:string - date
direction:int
Выход:
{
result: [
{
id:int,
pic:url, // URL картинки
stamp:int, // Штамп отправки
message:text, // Записка
view:bool, // Прочитан ли
gift_type:int, // 0 - gift, 1 - card
type:int, // from_man|from_lady
lady:
{
id:int,
name:string,
photo:url,
online:bool,
camera:bool
}
},...
],
total_count:int
}
VirtualGift_Read
Открыть вирт. подарок
Вход:
id:int
Выход:
см. Virtual_Gift_Retrieve
VirtualGift_Delete
Удалить вирт. подарок
Вход:
id:int
LuckyMingle_Retrieve
Получить список профилей в рамках услуги Lucky Mingle
Вход:
filters
prefer_online:int - 0|1
check_age:int - 0|1
age_from:int
age_to:int
kids:int - 0|1
zodiac:int
origin:char - R|L|A|E Slavic, Latin, Asian, European
Выход:
{
result:
[
{
id:int,
name:string,
photo:url,
age:int,
online:int
}
],
lm_id:id // ID Lucky Mingle
}
LuckyMingle_UseBonus
Вход:
Data_TzGetList
Получить список доступных часовых поясов
Выход:
{
"Etc/GMT+12": "(GMT-12:00) International Date Line West",
"ключ": "Описание",...
}
Data_TzNow
Получить текущее время в выбранном часовом поясе
Вход:
tz:string
Выход:
{
result:string // Y/m/d H:i:s
}
Data_TzConvert
Сконвертировать время в другой часовой пояс
Вход:
Выход:
{
result:string // Y/m/d H:i:s
}
PhoneCalls_GetClosestDate
Получить ближайшую доступную дату/время для звонка
Вход:
Выход:
{
result:string // Y-m-d H:i:s
}
PhoneCalls_GetAvailableHours
Получить доступные для звонка часы в заданный день
Вход:
date:string - Y-m-d
tz:string - часовой пояс, например US/Pacific
Выход:
PhoneCalls_PlaceOrder
Разместить заказ звонка
Вход:
girl_id:int
schedule_input
date:string - Y-m-d
time:string - H:i
tz:string - часовой пояс, например US/Pacific
phone_number
code - например, +1
number - например, 123456789
pc_auto_charge_agreement:bool - согласен ли пользователь на автоматическое
списание кредитов сверх лимита
Выход:
{
oid:?string // ID заказа звонка
alert:?string // Фраза, которую нужно показать пользователю
}
PhoneCalls_Retrieve
Получить список заказов телефонных звонков
Вход:
filters:object
lady_name:string
initiated_by:int - 1 - мужчина, 2 - женщина
lady_search_field:string - поле “ID или имя”
pc_status:int статус звонка, см. выходные данные
limit:?int
offset:?int
sort:?object
type:string - date
direction:int
Выход:
{
result:
[
{
id:string,
user_id:string,
type:string, // from_lady|from_man|from_agency,
from_agency - это "Administration"
lady:
{
id:int,
name:string,
photo:url,
online:bool,
camera:bool
}
stamp:int, // штамп времени заказа
scheduled:int, // штамп времени, на которое звонок
назначен
scheduled_formatted_date:string, // d M Y
scheduled_formatted_time:string, // h:i A
tz:string,
status:int
}
,...
],
total_count:int
}
status:
0: DEPOSIT REQUIRED
1: UNCONFIRMED
2: UNCONFIRMED
3: CONFIRMED
4: COMPLETED
5: COMPLETED
6: CANCELED
7: FAILED
8: RUNNING
PhoneCalls_GetOrder
Получить информацию по конкретному заказу
Вход:
id:string
Выход:
{
id:string,
user_id:string,
phone_number:
{
code:string,
number:string
},
type:string, // from_lady|from_man|from_agency,
from_agency - это "Administration"
stamp:int, // Штамп даты заказа
scheduled:int, // Штамп назначенного времени
schedule_input:
{
date:string, // Y-m-d
time:string, // H:i
},
scheduled_formatted_date:string, // d M Y
scheduled_formatted_time:string, // h:i A
tz:string,
status:int,
confirm_required:bool // Нужно ли подтвердить звонок
}
PhoneCalls_Cancel
Отмена тел. звонка
Вход:
id:string
PhoneCalls_Confirm
Подтверждение тел. звонка
Вход:
id:string
PhoneCalls_Update
Обновление тел. звонка
Вход:
id:string
phone_number:?object
code:string
number:string
schedule_input:?object
date:string - Y-m-d
time:string - H:i
tz:string
DateMe_Order
Заказ Date Me.
Вход:
lady_id:int
date_from:string
date_to:string
interpretation:?int
transportation_from_airport:?int
transportation_to_airport:?int
transportation_to_place_of_stay:?int
accomodation:?int
transportation:?int
comments:?string
interpretation_hours:?int
array phone
string code
string number
Выход:
{
processing_hours:int // число часов, требующихся для
обработки заказа, используется в соответствующей фразе
}
Misc_GetHappyMatches
Получить список Happy Match. Это отдельные избранные Testimonials с отдельной
квадратной картинкой и коротким текстам. Каждый Happy Match ведёт на Testimonial с
таким же id. Могут быть не всегда отсортированы по дате, есть внутренние приоритеты
Вход:
limit:int
offset:int
Выход:
{
result:
[
{
id:int, // ID тестимониала
stamp:int, // Штамп времени создания
name:string, // Автор тестимониала
image:url,
excerpt:html
},...
],
total_count:int
}
Misc_GetClosestSpecial
Получить баннер о предстоящей/текущей акции. Если нашёлся, то показываем его,
запоминаем показ и в течение 3 дней игнорируем
Выход:
{
state:int, // 0 - нет акции, 1 - скоро будет, 2 - в процессе
name:?string,
popup:?
{
src:url,
width:int,
height:int,
},
special:?string // что-то большее, чем баннер. Если это поле
установлено, а соответствующая данному значению логика не
реализована, игнорируем результат целиком
}
Misc_CloseBellNotifications
Вход
id:int
Misc_CloseBirthdayNotifications
Вход
id:int
Misc_Complaint
Отправить жалобу на девушку
Вход:
action:string - report|block|unblock
content:string - lady|lady_photo|lady_video|chat|letter
lady_id:int
report_reason:string - поле свободного ввода
photo_url:url - если жалоба на фото
video_url:url - если жалоба на видео
letter_id:string - если жалоба на письмо
Выход:
{
result:bool
}
Misc_GetComplaintStatus
Получить статус жалобы (отправлена или нет, для отображения в интерфейсе)
Выход:
{
status:bool
}
/chat/invites/<id_инвайта>/accept
/chat/invites/<id_инвайта>/decline
далее он заходит в чат с девушкой (инвайт-не инвайт, не важно), отсылая событие входа в
чат (Chat_SendEvent)
пока чат открыт, он периодически забирает новые сообщения от неё, и как раз в момент
"забора" биллингуется сервером. Как только кредиты кончаются, он не может отправлять
сообщения (и отключается всё видео в чате), но по-прежнему может их получать.
[/\[([b|u|i])\]/g, '<$1>'],
[/\[url=(((f|ht)tp(s)?:\/\/)[-a-z\(\)0-9@:%_+.~#?&;\/=!]+)\]/g, '<a
href="$1" target="_blank">'],
[/([^(href=")]|^)(((f|ht)tp(s)?:\/\/)[-a-z\(\)0-9@:%_+.~#?&;\/=!]+)/gi
, '$1<a href="$2" target="_blank">$2</a>'],
[/\[\/([b|u|i])\]/g, '</$1>'],
[/\[\/quote\]/g, '</q>'],
[/\[\/url\]/g, '</a>']
.cs-quote {
color:#ab0a0a;
margin-left:2ex;
font-style:italic
.cs-quote::after,.cs-quote::before {
content:'"'
WEBCAM_ACCEPT
WEBCAM_REQUEST
Если текст соответствует /^GAME_/ и is_system. Пропускаем эти сообщения, если клиент
не поддерживает игры
GAME_JOIN#<id_игры>
GAME_JOIN_ACCEPT#<id_игры>
GAME_JOIN_REFUSE#<id_игры>
Ссылки имеют вид [a href=url]Текст[/a], и, как правило, ведут на девушек онлайн, либо
на покупку кредитов. Если url содержит “buy_credits”, ссылка будет вести на
соответствующую страницу покупки кредитов. Если url содержит “online-ladies”, ссылка
будет вести на девушек онлайн.
Процесс следующий
Есть ещё вариант с автозапуском видео, если оно есть, то есть пользователю не нужно
инициировать процесс. Но это мобильные пользователи вряд ли оценят.
Двусторонний видеочат
Когда клиент смотрит видео от девушки, и у него есть камера, он имеен возможность
начать двусторонний видеочат. Как только клиент начинает трансляцию своего видео, он
отсылает событие broadcast_start методом Chat_SendEvent , отсылая в evt_data свойство
stream_id с номером своего стрима. Как только клиент по любой причине прекращает
трансляцию, он отсылает событие broadcast_end методом Chat_SendEvent
[attachment param1[=value1]...]
Возможные параметры
id
path - путь относительно корня
payment-required - фото ещё не оплачено
private - показываем обозначение Private в углу предпросмотра
width
height
По кнопке View выдаётся подтверждение “10 credits will be deducted from your account for
sending this photo”
Передача фото
Фото передаётся методом Chat_UploadAttachments. В случае успеха отправляем
сообщение типа
Приём клипов
Клипы приходят в сообщении BB-кодом
[shortie param1[=value1]...]
Корень расположения: https://static.behappy2day.com/video/shorties
Возможные параметры
id
poster - превью клипа, путь относительно корня
path - клип, путь относительно корня
payment-required - клип ещё не оплачен
width
height
Если клип неоплачен, то по нажатию на кнопку выдаётся подтверждение “15 credits will be
deducted from your account for viewing this clip”.
Передача клипов
Фото передаётся методом Chat_UploadAttachments. В случае успеха отправляем
сообщение типа