1Как устроена сессияHow a session worksCómo funciona una sesiónWie eine Sitzung funktioniertMiten istunto toimii
Границу ответственности проще всего увидеть по шагам.The division of labour is easiest to see step by step.El reparto de tareas se ve mejor paso a paso.Die Aufgabenteilung sieht man am besten Schritt für Schritt.Työnjako näkyy helpoimmin vaihe vaiheelta.
1. Игрок нажимает «Играть» у вас на сайте.
2. Вы выпускаете сессионный токен и открываете нашу ссылку в <iframe>.
3. Мы зовём POST /auth на вашем кошельке с этим токеном.
Вы отвечаете, кто это и сколько у него денег —
именно отсюда мы узнаём валюту.
4. Идёт игра. Каждая ставка — POST /bet, каждая выплата — POST /win.
Ставку, которую нужно вернуть, отменяет POST /rollback.
5. Игрок уходит. /win и /rollback обязаны работать и после этого.1. The player presses Play on your site.
2. You mint a session token and open our link in an <iframe>.
3. We call POST /auth on your wallet with that token.
You answer with the player and their balance —
this is where we learn the currency.
4. The game runs. Every stake is POST /bet, every payout POST /win.
A stake that has to be given back is POST /rollback.
5. The player leaves. /win and /rollback still have to work.1. El jugador pulsa Jugar en su sitio.
2. Usted emite un token de sesión y abre nuestro enlace en un <iframe>.
3. Llamamos a POST /auth en su monedero con ese token.
Usted responde con el jugador y su saldo —
aquí es donde conocemos la moneda.
4. El juego corre. Cada apuesta es POST /bet, cada pago POST /win.
Una apuesta que hay que devolver es POST /rollback.
5. El jugador se va. /win y /rollback todavía tienen que funcionar.1. Der Spieler drückt auf Ihrer Seite auf Spielen.
2. Sie stellen ein Sitzungstoken aus und öffnen unseren Link in einem <iframe>.
3. Wir rufen POST /auth auf Ihrem Wallet mit diesem Token auf.
Sie antworten mit dem Spieler und seinem Saldo —
hier erfahren wir die Währung.
4. Das Spiel läuft. Jeder Einsatz ist POST /bet, jede Auszahlung POST /win.
Ein Einsatz, der zurück muss, ist POST /rollback.
5. Der Spieler geht. /win und /rollback müssen weiter funktionieren.1. Pelaaja painaa sivustollanne Pelaa.
2. Te luotte istuntotunnisteen ja avaatte linkkimme <iframe>-kehykseen.
3. Kutsumme lompakkonne POST /auth -päätepistettä tuolla tunnisteella.
Te vastaatte pelaajalla ja hänen saldollaan —
tässä kohtaa saamme tietää valuutan.
4. Peli käy. Jokainen panos on POST /bet, jokainen maksu POST /win.
Panos, joka on palautettava, on POST /rollback.
5. Pelaaja poistuu. /win ja /rollback on yhä toimittava.Шаги 3–5 держите вы. Всё остальное — мы.You host steps 3–5. We host everything else.Usted aloja los pasos 3–5. Nosotros alojamos todo lo demás.Sie hosten die Schritte 3–5. Alles andere hosten wir.Te isännöitte vaiheet 3–5. Kaiken muun isännöimme me.
Валюту называете вы, а не URL.The currency comes from you, not from the URL.La moneda viene de usted, no de la URL.Die Währung kommt von Ihnen, nicht aus der URL.Valuutta tulee teiltä, ei URL-osoitteesta.
Параметр currency в ссылке необязателен. Если его нет, мы спросим кошелёк — потому что единственный, кто точно знает, в чём номинирован счёт игрока, это тот, кто этот счёт держит.
The currency parameter is optional. Leave it out and we ask your wallet — because the only party that knows what a player's account is denominated in is the one holding it.
El parámetro currency es opcional. Omítalo y preguntamos a su monedero — porque la única parte que sabe en qué está denominada la cuenta de un jugador es la que la tiene.
Der Parameter currency ist optional. Lassen Sie ihn weg, dann fragen wir Ihr Wallet — denn die Einzigen, die wissen, auf welche Währung das Konto eines Spielers lautet, sind die, die es führen.
Parametri currency on valinnainen. Jätä se pois, niin kysymme lompakoltanne — sillä ainoa taho, joka tietää missä valuutassa pelaajan tili on, on se joka tiliä pitää.
Токен не одноразовый.The token is not single-use.El token no es de un solo uso.Das Token ist nicht einmalig.Tunniste ei ole kertakäyttöinen.
Каждая загрузка ссылки зовёт /auth с этим токеном, то есть перезагрузка страницы — это ещё один /auth с тем же токеном, и игра может проверить его ещё раз при старте. Принимайте повторные /auth, пока токен жив, и держите его живым всю сессию: /getBalance и /bet пользуются им всё это время. После перезагрузки игрок возвращается в ту же сессию, вместе со ставками, которые уже сделал в текущем раунде.
Every load of the launch link calls /auth with it, so a reload is another /auth with the same token, and the game may verify it once more when it starts. Accept repeated /auth calls for as long as the token is valid, and keep it valid for the whole session: /getBalance and /bet use it throughout. A reload puts the player back in the same session, with the bets they already have in the current round.
Cada carga del enlace de lanzamiento llama a /auth con él, así que una recarga es otro /auth con el mismo token, y el juego puede verificarlo una vez más al arrancar. Acepte llamadas /auth repetidas mientras el token sea válido, y manténgalo válido durante toda la sesión: /getBalance y /bet lo usan todo el tiempo. Una recarga devuelve al jugador a la misma sesión, con las apuestas que ya tiene en la ronda en curso.
Jedes Laden des Start-Links ruft damit /auth auf, ein Neuladen ist also ein weiteres /auth mit demselben Token, und das Spiel prüft es beim Start unter Umständen noch einmal. Nehmen Sie wiederholte /auth-Aufrufe an, solange das Token gültig ist, und halten Sie es die ganze Sitzung über gültig: /getBalance und /bet verwenden es durchgehend. Ein Neuladen setzt den Spieler zurück in dieselbe Sitzung, mit den Einsätzen, die er in der laufenden Runde bereits hat.
Jokainen käynnistyslinkin lataus kutsuu sillä /auth-päätepistettä, joten sivun uudelleenlataus on uusi /auth samalla tunnisteella, ja peli saattaa tarkistaa sen vielä kerran käynnistyessään. Hyväksykää toistuvat /auth-kutsut niin kauan kuin tunniste on voimassa, ja pitäkää se voimassa koko istunnon ajan: /getBalance ja /bet käyttävät sitä jatkuvasti. Uudelleenlataus palauttaa pelaajan samaan istuntoon, mukaan lukien panokset jotka hänellä jo on käynnissä olevassa kierroksessa.
2Ссылка на игруThe launch linkEl enlace de lanzamientoDer Start-LinkKäynnistyslinkki
Её вы собираете у себя и открываете в iframe.You build it on your side and open it in an iframe.Usted lo construye en su lado y lo abre en un iframe.Sie bauen ihn auf Ihrer Seite und öffnen ihn in einem iframe.Te rakennatte sen omalla puolellanne ja avaatte sen iframessa.
https://play.afr.stellar-kiosk.com/game/{customer}/{module}/{game}/?<params>
play.afr.stellar-kiosk.com |
Адрес площадки. Любой другой адрес, который вы от нас видели, — демо или тестовая среда, и ссылкой на игру он не является.The launch host. Any other address you have seen from us is a demo or a test environment and is not a launch host.El host de lanzamiento. Cualquier otra dirección que haya visto de nosotros es una demo o un entorno de pruebas y no es un host de lanzamiento.Der Start-Host. Jede andere Adresse, die Sie von uns gesehen haben, ist eine Demo oder eine Testumgebung und kein Start-Host.Käynnistyspalvelin. Kaikki muut osoitteet, joita olette meiltä nähneet, ovat demoja tai testiympäristöjä eivätkä käynnistyspalvelimia. |
{customer} |
Идентификатор, который мы вам присваиваем: строчными буквами, без пробелов.The id we assign you: lower case, no spaces.El identificador que le asignamos: minúsculas, sin espacios.Die Kennung, die wir Ihnen zuweisen: Kleinbuchstaben, keine Leerzeichen.Tunnus, jonka annamme teille: pienillä kirjaimilla, ei välilyöntejä. |
{module} / {game} |
Называют игру; оба даём мы, по каждому тайтлу.Name the game; we give you both per title.Nombre el juego; le damos ambos por título.Benennen Sie das Spiel; wir geben Ihnen beide pro Titel.Nimeä peli; annamme molemmat kutakin peliä kohden. |
2.1ПараметрыParametersParámetrosParameterParametrit
| ПараметрParameterParámetroParameterParametri | Что кладёмWhat goes in itQué va en élWas hineingehörtMitä siihen tulee | |
|---|---|---|
token | обяз.requiredobligatorioerforderlichpakollinen | Сессионный токен игрока. Вернём его вам в каждом вызове кошелька.The player's session token. We send it back on every wallet call.El token de sesión del jugador. Lo devolvemos en cada llamada al monedero.Das Sitzungstoken des Spielers. Wir senden es bei jedem Wallet-Aufruf zurück.Pelaajan istuntotunniste. Lähetämme sen takaisin jokaisessa lompakkokutsussa. |
partnerId | opt. | Бренд, к которому относится игрок, если на одном вашем кошельке их несколько. Мы вернём его в каждом вызове кошелька как operatorId, и один и тот же токен под двумя брендами останется двумя разными игроками. При одном бренде параметр не кладите. Это не тот partnerId, что лежит в теле запроса, — см. 6.1.The brand this player belongs to, when one wallet of yours serves several. We return it on every wallet call as operatorId, so one token string under two brands stays two different players. With a single brand, leave it out. It is not the partnerId in the wallet body — see 6.1.La marca a la que pertenece este jugador, cuando un monedero suyo sirve a varias. La devolvemos en cada llamada al monedero como operatorId, de modo que una misma cadena de token bajo dos marcas sigue siendo dos jugadores distintos. Con una sola marca, omítalo. No es el partnerId del cuerpo del monedero — véase 6.1.Die Marke, zu der dieser Spieler gehört, wenn ein Wallet von Ihnen mehrere bedient. Wir geben sie bei jedem Wallet-Aufruf als operatorId zurück, damit ein und dieselbe Token-Zeichenkette unter zwei Marken zwei verschiedene Spieler bleibt. Bei einer einzigen Marke lassen Sie ihn weg. Er ist nicht die partnerId im Wallet-Body — siehe 6.1.Brändi, johon tämä pelaaja kuuluu, kun yksi lompakkonne palvelee useaa. Palautamme sen jokaisessa lompakkokutsussa kenttänä operatorId, jolloin sama tunnistemerkkijono kahden brändin alla pysyy kahtena eri pelaajana. Yhdellä brändillä jätä se pois. Se ei ole lompakkorungon partnerId — katso 6.1. |
currency | opt. | ISO 4217. Без него спросим кошелёк.ISO 4217. Omit it and we ask your wallet.ISO 4217. Omítalo y preguntamos a su monedero.ISO 4217. Lassen Sie ihn weg, dann fragen wir Ihr Wallet.ISO 4217. Jätä pois, niin kysymme lompakoltanne. |
language | opt. | ISO 639-1: en, ru. en-US тоже принимаем, регион сохраняем.ISO 639-1: en, ru. en-US is accepted; the region is kept.ISO 639-1: en, es. Se acepta en-US; la región se conserva.ISO 639-1: en, de. en-US wird akzeptiert; die Region bleibt erhalten.ISO 639-1: en, fi. en-US hyväksytään; alue säilytetään. |
openType | opt. | real или fun. Всё, чего мы не узнаём, и отсутствие параметра — это реальные деньги.real or fun. Anything we do not recognise, and anything absent, means real money.real o fun. Cualquier cosa que no reconozcamos, y cualquier ausencia, significa dinero real.real oder fun. Alles, was wir nicht kennen, und alles, was fehlt, bedeutet Echtgeld.real tai fun. Kaikki mitä emme tunnista, ja kaikki mikä puuttuu, tarkoittaa oikeaa rahaa. |
devicetypeid | opt. | 1 web, 2 мобильный web, 3 iOS, 4 Android.1 web, 2 mobile web, 3 iOS, 4 Android.1 web, 2 web móvil, 3 iOS, 4 Android.1 Web, 2 mobiles Web, 3 iOS, 4 Android.1 web, 2 mobiiliweb, 3 iOS, 4 Android. |
gameId | opt. | Ваш каталожный id игры, если он у вас есть.Your own catalogue id for the game, if you have one.Su propio identificador de catálogo para el juego, si lo tiene.Ihre eigene Katalogkennung für das Spiel, falls Sie eine haben.Oma luettelotunnuksenne pelille, jos sellainen on. |
exitURL | opt. | Куда внутриигровая кнопка «выход» уводила бы игрока. Значение до игры доезжает уже сейчас, самой кнопки пока нет — см. 2.3.Where an in-game exit control would send the player. Carried to the game today; the control itself is not built yet — see 2.3.A dónde enviaría al jugador un control de salida dentro del juego. Hoy se transporta hasta el juego; el control en sí todavía no está construido — véase 2.3.Wohin ein Ausgangs-Element im Spiel den Spieler schicken würde. Der Wert wird heute bis ins Spiel durchgereicht; das Element selbst ist noch nicht gebaut — siehe 2.3.Minne pelin sisäinen poistumispainike ohjaisi pelaajan. Arvo kulkee jo peliin asti; itse painiketta ei ole vielä rakennettu — katso 2.3. |
depositURL | opt. | То же для кнопки кассы. Не пришлёте — кассы внутри игры не будет вовсе.The same, for a cashier control. Send nothing and there will be no cashier inside the game at all.Lo mismo, para un control de caja. No envíe nada y no habrá ninguna caja dentro del juego.Dasselbe für ein Kassen-Element. Schicken Sie nichts, dann gibt es im Spiel überhaupt keine Kasse.Sama kassapainikkeelle. Älä lähetä mitään, niin pelin sisällä ei ole kassaa lainkaan. |
https://play.afr.stellar-kiosk.com/game/{customer}/crash/default/
?token=abc123&language=en&openType=real
&devicetypeid=1&exitURL=https://casino.example/lobby2.2Три вещи, которые стоит знатьThree things worth knowingTres cosas que conviene saberDrei Dinge, die man wissen sollteKolme asiaa jotka kannattaa tietää
Регистр и разделители не важны. auth_token, authToken и AUTH-TOKEN — для нас один и тот же параметр. Если ваша платформа уже отдаёт другое написание — присылайте как есть: скорее всего мы его уже принимаем, а если нет, добавить его — это правка конфигурации у нас, а не у вас.
Case and separators do not matter. auth_token, authToken and AUTH-TOKEN are the same parameter to us. If your platform already emits a different spelling, send it: we probably accept it already, and if not, accepting it is a configuration change on our side, not a change on yours.
Mayúsculas y separadores no importan. auth_token, authToken y AUTH-TOKEN son el mismo parámetro para nosotros. Si su plataforma ya emite otra grafía, envíela: probablemente ya la aceptamos, y si no, aceptarla es un cambio de configuración de nuestro lado, no un cambio del suyo.
Groß- und Kleinschreibung und Trennzeichen spielen keine Rolle. auth_token, authToken und AUTH-TOKEN sind für uns derselbe Parameter. Wenn Ihre Plattform bereits eine andere Schreibweise ausgibt, schicken Sie sie: wahrscheinlich akzeptieren wir sie schon, und wenn nicht, ist das Akzeptieren eine Konfigurationsänderung auf unserer Seite, keine Änderung auf Ihrer.
Kirjainkoolla ja erottimilla ei ole väliä. auth_token, authToken ja AUTH-TOKEN ovat meille sama parametri. Jos alustanne lähettää jo jotain muuta kirjoitusasua, lähettäkää se: luultavasti hyväksymme sen jo, ja jos emme, sen hyväksyminen on konfiguraatiomuutos meidän puolellamme, ei muutos teidän.
Незнакомые параметры мы не выбрасываем. Они возвращаются в диагностике, так что если вы что-то прислали, а мы будто не заметили — видно ровно то, что пришло. Anything we do not recognise is kept, not dropped. It comes back in the diagnostics, so if you send us something and we appear to ignore it, you can see exactly what arrived. Todo lo que no reconocemos se conserva, no se descarta. Vuelve en los diagnósticos, así que si nos envía algo y parece que lo ignoramos, puede ver exactamente qué llegó. Alles, was wir nicht kennen, wird behalten, nicht verworfen. Es taucht in der Diagnose wieder auf — wenn Sie uns also etwas schicken und wir es zu ignorieren scheinen, können Sie genau sehen, was angekommen ist. Kaikki mitä emme tunnista säilytetään, ei pudoteta. Se palaa diagnostiikassa, joten jos lähetätte meille jotain ja näyttää siltä että ohitamme sen, näette tarkalleen mitä saapui.
Откройте ссылку в браузере до того, как напишете код кошелька. Мы отдадим страницу, которая перечисляет каждый присланный параметр, во что мы его сопоставили, и что ваш кошелёк ответил про токен. Это самый быстрый способ найти ссылку, собранную не на того кастомера. Open the launch link in a browser before writing any wallet code. We serve a page listing every parameter you sent, what we matched it to, and what your wallet said about the token. It is the fastest way to find a link built against the wrong customer. Abra el enlace de lanzamiento en un navegador antes de escribir cualquier código de monedero. Servimos una página que lista cada parámetro que envió, con qué lo emparejamos y qué dijo su monedero sobre el token. Es la forma más rápida de encontrar un enlace construido contra el cliente equivocado. Öffnen Sie den Start-Link in einem Browser, bevor Sie eine einzige Zeile Wallet-Code schreiben. Wir liefern eine Seite aus, die jeden gesendeten Parameter auflistet, wozu wir ihn zugeordnet haben und was Ihr Wallet zum Token gesagt hat. Das ist der schnellste Weg, einen Link zu finden, der gegen den falschen Kunden gebaut wurde. Avaa käynnistyslinkki selaimessa ennen kuin kirjoitat riviäkään lompakkokoodia. Tarjoamme sivun, joka listaa jokaisen lähettämänne parametrin, mihin sen yhdistimme ja mitä lompakkonne sanoi tunnisteesta. Se on nopein tapa löytää väärälle asiakastunnukselle rakennettu linkki.
В ссылке нет ваших секретов — и не должно быть.The link carries none of your secrets, and must not.El enlace no lleva ninguno de sus secretos, y no debe llevarlos.Der Link enthält keines Ihrer Geheimnisse, und er darf keines enthalten.Linkki ei sisällä mitään salaisuuksianne, eikä saa sisältää.
Общий ключ подписи не участвует в запуске: он живёт только на вашем бэкенде и на нашем. URL уходит в браузер игрока, где его видно целиком, поэтому единственное, что там важно, — сессионный токен: короткоживущий, и выпускаете его вы. The shared signing key takes no part in a launch: it lives on your backend and ours. The URL goes into a player's browser where all of it is visible, so the only thing in it that matters is the session token — short-lived, and yours to issue. La clave compartida de firma no participa en un lanzamiento: vive en su backend y en el nuestro. La URL acaba en el navegador de un jugador, donde todo es visible, así que lo único que importa en ella es el token de sesión — de vida corta, y suyo para emitirlo. Der gemeinsame Signaturschlüssel spielt beim Start keine Rolle: er lebt in Ihrem und unserem Backend. Die URL landet im Browser eines Spielers, wo alles davon sichtbar ist — das Einzige darin, worauf es ankommt, ist daher das Sitzungstoken: kurzlebig, und von Ihnen ausgestellt. Jaettu allekirjoitusavain ei osallistu käynnistykseen lainkaan: se elää teidän ja meidän backendissä. URL päätyy pelaajan selaimeen, jossa kaikki siitä on näkyvissä, joten ainoa merkityksellinen asia siinä on istuntotunniste — lyhytikäinen, ja teidän myöntämänne.
2.3Кнопки выхода и кассыThe exit and cashier controlsLos controles de salida y de cajaDie Ausgangs- und Kassen-ElementePoistumis- ja kassapainikkeet
Как есть сегодня: значения передаются, кнопок ещё нет.State today: the values are carried, the buttons are not built.Estado hoy: los valores se transportan, los botones no están construidos.Stand heute: die Werte werden durchgereicht, die Schaltflächen sind nicht gebaut.Tilanne tänään: arvot kulkevat läpi, painikkeita ei ole rakennettu.
Всё, что вы положите в exitURL и depositURL, доезжает до клиента игры корректно — это видно на странице запуска, — но ни одна игра пока не рисует для них контрол. Мы предпочитаем сказать это здесь, а не дать вам обнаружить это на тестах.
Whatever you put in exitURL and depositURL reaches the game client correctly — you can see it on the launch page — but no game we serve draws a control for it yet. We would rather say so here than let you discover it in testing.
Lo que ponga en exitURL y depositURL llega correctamente al cliente del juego — puede verlo en la página de lanzamiento — pero ningún juego que servimos dibuja todavía un control para ello. Preferimos decirlo aquí antes que dejar que lo descubra en pruebas.
Was Sie in exitURL und depositURL schreiben, erreicht den Spiel-Client korrekt — Sie sehen es auf der Startseite —, aber kein Spiel, das wir ausliefern, zeichnet dafür bisher ein Bedienelement. Wir sagen es lieber hier, als es Sie im Test entdecken zu lassen.
Se mitä laitatte kenttiin exitURL ja depositURL saapuu peliclientille oikein — näette sen käynnistyssivulla — mutta yksikään tarjoamamme peli ei vielä piirrä sille painiketta. Sanomme sen mieluummin tässä kuin annamme teidän löytää sen testeissä.
Ничего из того, что вы строите сейчас, менять не придётся: правила уже зафиксированы.Nothing you build now has to change when they appear, because the rules are already fixed:Nada de lo que construya ahora tendrá que cambiar cuando aparezcan, porque las reglas ya están fijadas:Nichts, was Sie jetzt bauen, muss sich ändern, wenn sie kommen, denn die Regeln stehen bereits fest:Mikään mitä rakennatte nyt ei joudu muuttumaan kun ne tulevat, sillä säännöt ovat jo lyöty lukkoon:
- Нет адреса — нет кнопки. Не серая, не неработающая — контрола не существует. Не слать
exitURLи нарисовать свой выход вокруг iframe — поддерживаемая конфигурация, а не обходной путь, и она останется верной и потом.No url, no button. Not a greyed-out one, not one that does nothing — the control does not exist. LeavingexitURLoff and drawing your own exit around the iframe is a supported configuration, not a workaround, and it stays correct afterwards.Sin url, sin botón. Ni uno en gris, ni uno que no haga nada — el control no existe. OmitirexitURLy dibujar su propia salida alrededor del iframe es una configuración admitida, no un apaño, y sigue siendo correcta después.Keine URL, keine Schaltfläche. Keine ausgegraute, keine, die nichts tut — das Element existiert nicht.exitURLwegzulassen und den eigenen Ausgang um das iframe herum zu zeichnen, ist eine unterstützte Konfiguration, kein Notbehelf, und bleibt auch danach richtig.Ei osoitetta, ei painiketta. Ei harmaana, ei sellaista joka ei tee mitään — painiketta ei ole olemassa.exitURL:n jättäminen pois ja oman poistumispainikkeen piirtäminen iframen ympärille on tuettu ratkaisu, ei kiertotie, ja se pysyy oikeana myöhemminkin. - Адрес может прийти из ссылки или из настроек. Если игроки всегда возвращаются в одно лобби, назовите адрес один раз — мы его сохраним. Игра разницы не видит.A url may come from the link or from your settings. If players always return to the same lobby, tell us the address once and we hold it. The game cannot tell the two apart.Una url puede venir del enlace o de sus ajustes. Si los jugadores vuelven siempre al mismo lobby, díganos la dirección una vez y la guardamos. El juego no distingue una de otra.Eine URL kann aus dem Link oder aus Ihren Einstellungen kommen. Wenn Spieler immer in dieselbe Lobby zurückkehren, nennen Sie uns die Adresse einmal, und wir halten sie vor. Das Spiel kann beide nicht unterscheiden.Osoite voi tulla linkistä tai asetuksistanne. Jos pelaajat palaavat aina samaan aulaan, kertokaa osoite meille kerran ja me säilytämme sen. Peli ei erota näitä kahta toisistaan.
- Переход заменяет всю страницу, а не фрейм. Лобби, отрисованное внутри прямоугольника игры, в её рамке и с её полосами прокрутки, — не то, что мы стали бы выпускать.The control replaces the whole page, never the frame. A lobby rendered inside the game's rectangle, still wrapped in the game's frame and scrollbars, is not something we would ship.El control reemplaza la página entera, nunca el marco. Un lobby renderizado dentro del rectángulo del juego, todavía envuelto en el marco y las barras de desplazamiento del juego, no es algo que fuéramos a entregar.Das Element ersetzt die ganze Seite, niemals den Frame. Eine Lobby, die im Rechteck des Spiels gerendert wird, noch immer im Rahmen und den Scrollbalken des Spiels — so etwas würden wir nicht ausliefern.Painike korvaa koko sivun, ei koskaan kehystä. Aula, joka piirretään pelin suorakulmion sisään, yhä pelin kehyksen ja vierityspalkkien ympäröimänä, ei ole jotain mitä me toimittaisimme.
Проходят только обычные http(s)-адреса. Это единственные два параметра ссылки запуска, по которым что-либо переходит, поэтому значение вида javascript: или data: отбрасывается, а не передаётся дальше. Если вы прислали такое и игра ведёт себя так, будто вы не прислали ничего, — причина в этом. У правила 3 есть одно требование к вашей стороне — см. 3.
Only ordinary http(s) values survive. These two are the only parameters on a launch link that anything navigates to, so a javascript: or data: value is discarded rather than passed on. If you send one and the game behaves as though you sent nothing, that is why. Rule 3 has one requirement on your side — see 3.
Solo sobreviven valores http(s) corrientes. Estos dos son los únicos parámetros de un enlace de lanzamiento a los que algo navega, así que un valor javascript: o data: se descarta en lugar de pasarse. Si envía uno y el juego se comporta como si no hubiera enviado nada, esa es la razón. La regla 3 tiene un requisito de su lado — véase 3.
Nur gewöhnliche http(s)-Werte überleben. Diese beiden sind die einzigen Parameter eines Start-Links, zu denen überhaupt etwas navigiert; ein javascript:- oder data:-Wert wird daher verworfen statt weitergereicht. Wenn Sie einen schicken und das Spiel sich verhält, als hätten Sie nichts geschickt, ist das der Grund. Regel 3 stellt eine Anforderung an Ihre Seite — siehe 3.
Vain tavalliset http(s)-arvot selviävät. Nämä kaksi ovat käynnistyslinkin ainoat parametrit, joihin mikään navigoi, joten javascript:- tai data:-arvo hylätään sen sijaan että se välitettäisiin. Jos lähetätte sellaisen ja peli käyttäytyy kuin ette olisi lähettäneet mitään, syy on tämä. Säännöllä 3 on yksi vaatimus teidän puolellanne — katso 3.
3Встраивание iframeEmbedding the iframeIncrustar el iframeDas iframe einbettenIframen upottaminen
Игра — обычная страница на нашем домене. От вас нужны размер и разрешение на звук.The game is an ordinary page on our domain. What it needs from you is a size and permission to make sound.El juego es una página corriente en nuestro dominio. Lo que necesita de usted es un tamaño y permiso para hacer sonido.Das Spiel ist eine gewöhnliche Seite auf unserer Domain. Was es von Ihnen braucht, ist eine Größe und die Erlaubnis, Ton auszugeben.Peli on tavallinen sivu meidän verkkotunnuksellamme. Se tarvitsee teiltä koon ja luvan tuottaa ääntä.
<iframe
src="https://play.afr.stellar-kiosk.com/game/{customer}/crash/default/?token=abc123&openType=real"
allow="autoplay; fullscreen"
title="Crash"
style="border:0; width:100%; height:100%; display:block">
</iframe>- Размер задаёте вы. Игра тянется на весь фрейм; своей высоты у неё нет. Дайте контейнеру реальную высоту —
height:100%внутри блока нулевой высоты даёт пустой прямоугольник. allow="autoplay"— без него в игре не будет звука до первого касания.fullscreenнужен, если даёте кнопку на весь экран.- Не ставьте
sandbox, если не уверены в наборе флагов: игре нужны скрипты, свой origin и хранилище. Урезанный sandbox ломает её молча. Если вы всё же ставите sandbox и хотите, чтобы работали внутриигровые выход и касса из 2.3, нужен ещёallow-top-navigation-by-user-activation— без него браузер не даст игре заменить страницу, и откажет молча. - Новая сессия — новый элемент. Не переиспользуйте один iframe, меняя
src: создавайте элемент заново, чтобы перезапуск был настоящей перезагрузкой, а не страницей, сохранившей прежнее состояние.
- The size is yours to set. The game fills the frame and has no height of its own. Give the container a real height —
height:100%inside a zero-height block is an empty rectangle. allow="autoplay"— without it there is no sound until the first tap.fullscreenis needed if you offer a full-screen button.- Do not set
sandboxunless you are sure of the flags: the game needs scripts, its own origin and storage. A trimmed sandbox breaks it silently. If you do sandbox the frame and you want the in-game exit or cashier of 2.3 to work, it also needsallow-top-navigation-by-user-activation— without it the browser refuses to let the game replace the page, and refuses silently. - A new session is a new element. Do not reuse one iframe by changing
src; create the element again, so reopening is a real reload rather than a page that kept its state.
- El tamaño lo fija usted. El juego llena el marco y no tiene altura propia. Dé al contenedor una altura real —
height:100%dentro de un bloque de altura cero es un rectángulo vacío. allow="autoplay"— sin él no hay sonido hasta el primer toque.fullscreenhace falta si ofrece un botón de pantalla completa.- No ponga
sandboxa menos que tenga claras las banderas: el juego necesita scripts, su propio origen y almacenamiento. Un sandbox recortado lo rompe en silencio. Si sí aísla el marco y quiere que funcionen la salida o la caja del 2.3, también hace faltaallow-top-navigation-by-user-activation— sin ello el navegador se niega a dejar que el juego reemplace la página, y se niega en silencio. - Una sesión nueva es un elemento nuevo. No reutilice un iframe cambiando
src; cree el elemento otra vez, para que reabrir sea una recarga de verdad y no una página que conservó su estado.
- Die Größe setzen Sie. Das Spiel füllt den Frame und hat keine eigene Höhe. Geben Sie dem Container eine echte Höhe —
height:100%in einem Block ohne Höhe ist ein leeres Rechteck. allow="autoplay"— ohne das gibt es bis zur ersten Berührung keinen Ton.fullscreenbrauchen Sie, wenn Sie eine Vollbild-Schaltfläche anbieten.- Setzen Sie kein
sandbox, es sei denn, Sie sind sich der Flags sicher: das Spiel braucht Skripte, einen eigenen Origin und Speicher. Eine beschnittene Sandbox macht es lautlos kaputt. Wenn Sie den Frame doch sandboxen und Ausgang oder Kasse aus 2.3 funktionieren sollen, braucht es zusätzlichallow-top-navigation-by-user-activation— ohne das weigert sich der Browser, das Spiel die Seite ersetzen zu lassen, und zwar lautlos. - Eine neue Sitzung ist ein neues Element. Verwenden Sie ein iframe nicht wieder, indem Sie
srcändern; erzeugen Sie das Element neu, damit erneutes Öffnen ein echtes Neuladen ist und keine Seite, die ihren Zustand behalten hat.
- Koon määrittelette te. Peli täyttää kehyksen eikä sillä ole omaa korkeutta. Antakaa säiliölle todellinen korkeus —
height:100%nollakorkuisen lohkon sisällä on tyhjä suorakulmio. allow="autoplay"— ilman sitä ääntä ei kuulu ennen ensimmäistä kosketusta.fullscreentarvitaan, jos tarjoatte kokoruututilan painikkeen.- Älkää asettako
sandbox-määrettä ellette ole varmoja lipuista: peli tarvitsee skriptit, oman originin ja tallennustilan. Karsittu sandbox rikkoo sen äänettömästi. Jos kuitenkin eristätte kehyksen ja haluatte kohdan 2.3 poistumisen tai kassan toimivan, tarvitaan myösallow-top-navigation-by-user-activation— ilman sitä selain kieltäytyy päästämästä peliä korvaamaan sivua, ja kieltäytyy äänettömästi. - Uusi istunto on uusi elementti. Älkää käyttäkö samaa iframea uudelleen vaihtamalla
src; luokaa elementti uudestaan, jotta uudelleenavaus on oikea uudelleenlataus eikä sivu joka säilytti tilansa.
Только https, с обеих сторон.https on both sides, always.https en ambos lados, siempre.https auf beiden Seiten, immer.https molemmilla puolilla, aina.
Ваша страница по https не может открыть фрейм по http — браузер режет это как mixed content, молча и без диалога. Наш адрес всегда https; следите, чтобы и ваш был. A page on https cannot open a frame on http — browsers block it as mixed content, silently and with no prompt. Our address is always https; keep yours that way too. Una página en https no puede abrir un marco en http — los navegadores lo bloquean como contenido mixto, en silencio y sin aviso. Nuestra dirección es siempre https; mantenga la suya igual. Eine Seite auf https kann keinen Frame auf http öffnen — Browser blockieren das als Mixed Content, lautlos und ohne Rückfrage. Unsere Adresse ist immer https; halten Sie Ihre ebenso. https-sivu ei voi avata http-kehystä — selaimet estävät sen sekasisältönä, äänettömästi ja ilman kysymystä. Meidän osoitteemme on aina https; pitäkää omanne samoin.
4Эндпоинт кошелькаThe wallet endpointEl endpoint del monederoDer Wallet-EndpunktLompakon päätepiste
Пять методов. Вы даёте один базовый URL, пути мы дописываем сами.Five endpoints. You give us one base URL; we append the paths.Cinco endpoints. Usted nos da una URL base; nosotros añadimos las rutas.Fünf Endpunkte. Sie geben uns eine Basis-URL; wir hängen die Pfade an.Viisi päätepistettä. Te annatte meille yhden perus-URL:n; me lisäämme polut.
POST {base}/auth проверить токен → кто игрок + баланс
POST {base}/getBalance прочитать баланс, ничего не двигает
POST {base}/bet списать ставку
POST {base}/win начислить выплату
POST {base}/rollback вернуть ставкуPOST {base}/auth verify a token → who the player is + balance
POST {base}/getBalance read the balance, moves nothing
POST {base}/bet debit a stake
POST {base}/win credit a payout
POST {base}/rollback give a stake backPOST {base}/auth verificar un token → quién es el jugador + saldo
POST {base}/getBalance leer el saldo, no mueve nada
POST {base}/bet cargar una apuesta
POST {base}/win abonar un pago
POST {base}/rollback devolver una apuestaPOST {base}/auth Token prüfen → wer der Spieler ist + Saldo
POST {base}/getBalance Saldo lesen, bewegt nichts
POST {base}/bet einen Einsatz abbuchen
POST {base}/win eine Auszahlung gutschreiben
POST {base}/rollback einen Einsatz zurückgebenPOST {base}/auth varmenna tunniste → kuka pelaaja on + saldo
POST {base}/getBalance lue saldo, ei siirrä mitään
POST {base}/bet veloita panos
POST {base}/win hyvitä maksu
POST {base}/rollback palauta panosContent-Type: application/jsonв обе стороны.- Всегда отвечайте HTTP 200, в том числе на отказ. Вердикт — это поле
codeв теле. Кошелёк, который говорит «недостаточно средств» четырёхсотым, неотличим от прокси, который говорит «плохой запрос», а нам эти два случая нужно различать: от них зависит, повторять операцию или нет. - Отвечайте быстро. Игра сдаётся по собственному вызову через 5 секунд и сообщает игроку, что ставка не прошла; мы ждём 6, прежде чем счесть запрос потерянным и повторить. То есть 5 с — ваш SLA, а 6 с — только наше терпение: кошелёк, который регулярно отвечает между ними, показывает игрокам ошибки на ставках, которые потом придётся возвращать (см. 12). Цель — меньше секунды.
Content-Type: application/json, both ways.- Always answer HTTP 200, including for a refusal. The verdict is the
codein the body. A wallet that says "insufficient funds" with a 400 is indistinguishable from a proxy saying "bad request", and we have to tell those apart to decide whether to retry. - Answer quickly. The game gives up on its own call after 5 seconds and tells the player the bet failed; we wait 6 before treating the request as lost and retrying it. So 5 s is your service level and 6 s is only our patience — a wallet that regularly answers in between shows players errors on bets that then have to be given back (see 12). Under one second is the target.
Content-Type: application/json, en ambos sentidos.- Responda siempre HTTP 200, también ante un rechazo. El veredicto es el
codedel cuerpo. Un monedero que dice «fondos insuficientes» con un 400 es indistinguible de un proxy diciendo «petición incorrecta», y tenemos que distinguirlos para decidir si reintentar. - Responda rápido. El juego abandona su propia llamada a los 5 segundos y le dice al jugador que la apuesta falló; nosotros esperamos 6 antes de dar la petición por perdida y reintentarla. Así que 5 s es su nivel de servicio y 6 s es solo nuestra paciencia — un monedero que responde regularmente en medio muestra a los jugadores errores en apuestas que luego hay que devolver (véase 12). Por debajo de un segundo es el objetivo.
Content-Type: application/json, in beide Richtungen.- Antworten Sie immer mit HTTP 200, auch bei einer Ablehnung. Das Urteil ist der
codeim Body. Ein Wallet, das „nicht genug Guthaben“ mit einem 400 sagt, ist von einem Proxy, der „bad request“ sagt, nicht zu unterscheiden — und wir müssen das auseinanderhalten, um über eine Wiederholung zu entscheiden. - Antworten Sie schnell. Das Spiel gibt seinen eigenen Aufruf nach 5 Sekunden auf und sagt dem Spieler, der Einsatz sei fehlgeschlagen; wir warten 6, bevor wir die Anfrage als verloren behandeln und wiederholen. 5 s sind also Ihr Service-Level und 6 s nur unsere Geduld — ein Wallet, das regelmäßig dazwischen antwortet, zeigt Spielern Fehler bei Einsätzen, die danach zurückgegeben werden müssen (siehe 12). Unter einer Sekunde ist das Ziel.
Content-Type: application/json, molempiin suuntiin.- Vastatkaa aina HTTP 200, myös hylkäykseen. Tuomio on rungon
code. Lompakko joka sanoo ”katteeton” 400-koodilla on erottamaton välityspalvelimesta joka sanoo ”virheellinen pyyntö”, ja meidän on erotettava nämä päättääksemme uudelleenlähetyksestä. - Vastatkaa nopeasti. Peli luovuttaa oman kutsunsa 5 sekunnissa ja kertoo pelaajalle että panos epäonnistui; me odotamme 6 ennen kuin pidämme pyyntöä kadonneena ja lähetämme uudelleen. Eli 5 s on teidän palvelutasonne ja 6 s on vain meidän kärsivällisyytemme — lompakko joka vastaa säännöllisesti näiden väliin näyttää pelaajille virheitä panoksista jotka sitten on palautettava (katso 12). Alle sekunti on tavoite.
5ПодписьSignatureFirmaSignaturAllekirjoitus
Каждый запрос несёт дайджест собственного тела, в заголовке с именем ровно Auth.Every request carries a digest of its own body, in a header named exactly Auth.Cada petición lleva un resumen de su propio cuerpo, en una cabecera llamada exactamente Auth.Jede Anfrage trägt einen Digest ihres eigenen Bodys, in einem Header, der genau Auth heißt.Jokainen pyyntö kantaa tiivistettä omasta rungostaan, otsakkeessa jonka nimi on täsmälleen Auth.
Auth: sha256(<сырые байты тела> + <общий ключ>) hex, нижний регистр
Auth: sha256(<raw request body bytes> + <shared key>) hex, lower case
Auth: sha256(<bytes crudos del cuerpo de la petición> + <clave compartida>) hex, minúsculas
Auth: sha256(<rohe Bytes des Anfrage-Bodys> + <gemeinsamer Schlüssel>) hex, klein
Auth: sha256(<pyynnön rungon raakatavut> + <jaettu avain>) heksa, pienin kirjaimin
Ни префикса, ни разделителя: ключ дописывается прямо к байтам тела, а значением идёт hex дайджеста в нижнем регистре. Проверить свою реализацию — одна строка: No prefix and no separator: the key is appended directly to the body bytes, and the value is the lower-case hex of the digest. Checking your implementation is one line: Sin prefijo y sin separador: la clave se añade directamente a los bytes del cuerpo, y el valor es el hex en minúsculas del resumen. Comprobar su implementación es una línea: Kein Präfix und kein Trennzeichen: der Schlüssel wird direkt an die Body-Bytes angehängt, und der Wert ist der Digest als Kleinbuchstaben-Hex. Ihre Implementierung zu prüfen ist eine Zeile: Ei etuliitettä eikä erotinta: avain liitetään suoraan rungon tavujen perään, ja arvo on tiivisteen heksa pienin kirjaimin. Toteutuksenne tarkistaminen on yksi rivi:
printf '%s' "$body$shared_key" | shasum -a 256
Общий ключ обменивается при интеграции и по проводу не ходит.The shared key is exchanged at integration and never travels on the wire.La clave compartida se intercambia en la integración y nunca viaja por el cable.Der gemeinsame Schlüssel wird bei der Integration ausgetauscht und geht nie über die Leitung.Jaettu avain vaihdetaan integraation yhteydessä eikä se koskaan kulje verkon yli.
Проверяйте по тем байтам, которые пришли.Verify against the bytes you received.Verifique contra los bytes que recibió.Prüfen Sie gegen die Bytes, die Sie empfangen haben.Varmentakaa niitä tavuja vasten jotka vastaanotitte.
Не по повторной сериализации разобранного тела. Пересборка меняет порядок ключей и пробелы, и расхождение выглядит как ошибка аутентификации — ровно до тех пор, пока кто-нибудь не заподозрит кодировщик. Прочитайте тело один раз, проверьте подпись, потом разбирайте. Not against a re-serialisation of the parsed body. Re-encoding reorders keys and changes spacing, and the resulting mismatch presents as an authentication failure for as long as nobody suspects the encoder. Read the body once, verify, then parse it. No contra una re-serialización del cuerpo ya parseado. Re-codificar reordena claves y cambia los espacios, y el desajuste resultante se presenta como un fallo de autenticación durante todo el tiempo que nadie sospeche del codificador. Lea el cuerpo una vez, verifique, y luego parséelo. Nicht gegen eine Neu-Serialisierung des geparsten Bodys. Ein erneutes Kodieren ordnet Schlüssel um und ändert Abstände, und die entstehende Abweichung zeigt sich so lange als Authentifizierungsfehler, wie niemand den Encoder verdächtigt. Lesen Sie den Body einmal, prüfen Sie, und parsen Sie ihn dann. Ei jäsennetyn rungon uudelleensarjallistusta vasten. Uudelleenkoodaus järjestää avaimet uusiksi ja muuttaa välistystä, ja syntyvä ristiriita näyttäytyy todennusvirheenä niin kauan kuin kukaan ei epäile koodainta. Lukekaa runko kerran, varmentakaa, ja jäsentäkää vasta sitten.
6Запросы и ответыRequests and responsesPeticiones y respuestasAnfragen und AntwortenPyynnöt ja vastaukset
В каждом запросе есть partnerId и token. Остальное зависит от операции.
Every request carries partnerId and token. The rest depends on the operation.
Cada petición lleva partnerId y token. El resto depende de la operación.
Jede Anfrage trägt partnerId und token. Der Rest hängt von der Operation ab.
Jokainen pyyntö kantaa kentät partnerId ja token. Loppu riippuu operaatiosta.
6.1Что присылаем мыWhat we sendQué enviamosWas wir sendenMitä me lähetämme
// POST /auth и POST /getBalance { "partnerId": "198", "operatorId": "brand-7", // только если бренд был в ссылке "token": "abc123", "currency": "USD" // только getBalance; в auth его нет } // POST /bet { "partnerId": "198", "token": "abc123", "transactionId": "bet:alice:1187:0", // наш; уникален навсегда "amount": 2.5, "currency": "USD", "gameId": "555", // ВАШ каталожный id "roundId": "crash:USD:1187" } // POST /win — то же плюс ставка, которую выплачивает { "partnerId": "198", "token": "abc123", // МОЖЕТ БЫТЬ ПРОСРОЧЕН — см. 8 "transactionId": "take:alice:1187:0", "betTransactionId": "bet:alice:1187:0", "amount": 7, "currency": "USD", "gameId": "555", "roundId": "crash:USD:1187" } // POST /rollback — вернуть ставку { "partnerId": "198", "token": "abc123", // МОЖЕТ БЫТЬ ПРОСРОЧЕН — см. 8 "transactionId": "cancel:alice:1187:0", "betTransactionId": "bet:alice:1187:0", "amount": 2.5, "currency": "USD", "roundId": "crash:USD:1187", "reason": "cancel" // cancel | void | rollback }
// POST /auth and POST /getBalance { "partnerId": "198", "operatorId": "brand-7", // only when the link named a brand "token": "abc123", "currency": "USD" // getBalance only; absent on auth } // POST /bet { "partnerId": "198", "token": "abc123", "transactionId": "bet:alice:1187:0", // ours; unique forever "amount": 2.5, "currency": "USD", "gameId": "555", // YOUR catalogue id "roundId": "crash:USD:1187" } // POST /win — the same, plus the bet it pays out { "partnerId": "198", "token": "abc123", // MAY BE EXPIRED — see 8 "transactionId": "take:alice:1187:0", "betTransactionId": "bet:alice:1187:0", "amount": 7, "currency": "USD", "gameId": "555", "roundId": "crash:USD:1187" } // POST /rollback — give a stake back { "partnerId": "198", "token": "abc123", // MAY BE EXPIRED — see 8 "transactionId": "cancel:alice:1187:0", "betTransactionId": "bet:alice:1187:0", "amount": 2.5, "currency": "USD", "roundId": "crash:USD:1187", "reason": "cancel" // cancel | void | rollback }
// POST /auth y POST /getBalance { "partnerId": "198", "operatorId": "brand-7", // solo cuando el enlace nombró una marca "token": "abc123", "currency": "USD" // solo getBalance; ausente en auth } // POST /bet { "partnerId": "198", "token": "abc123", "transactionId": "bet:alice:1187:0", // nuestro; único para siempre "amount": 2.5, "currency": "USD", "gameId": "555", // SU id de catálogo "roundId": "crash:USD:1187" } // POST /win — lo mismo, más la apuesta que paga { "partnerId": "198", "token": "abc123", // PUEDE ESTAR CADUCADO — véase 8 "transactionId": "take:alice:1187:0", "betTransactionId": "bet:alice:1187:0", "amount": 7, "currency": "USD", "gameId": "555", "roundId": "crash:USD:1187" } // POST /rollback — devolver una apuesta { "partnerId": "198", "token": "abc123", // PUEDE ESTAR CADUCADO — véase 8 "transactionId": "cancel:alice:1187:0", "betTransactionId": "bet:alice:1187:0", "amount": 2.5, "currency": "USD", "roundId": "crash:USD:1187", "reason": "cancel" // cancel | void | rollback }
// POST /auth und POST /getBalance { "partnerId": "198", "operatorId": "brand-7", // nur wenn der Link eine Marke genannt hat "token": "abc123", "currency": "USD" // nur getBalance; bei auth nicht vorhanden } // POST /bet { "partnerId": "198", "token": "abc123", "transactionId": "bet:alice:1187:0", // unsere; für immer eindeutig "amount": 2.5, "currency": "USD", "gameId": "555", // IHRE Katalogkennung "roundId": "crash:USD:1187" } // POST /win — dasselbe, plus der Einsatz, der ausgezahlt wird { "partnerId": "198", "token": "abc123", // KANN ABGELAUFEN SEIN — siehe 8 "transactionId": "take:alice:1187:0", "betTransactionId": "bet:alice:1187:0", "amount": 7, "currency": "USD", "gameId": "555", "roundId": "crash:USD:1187" } // POST /rollback — einen Einsatz zurückgeben { "partnerId": "198", "token": "abc123", // KANN ABGELAUFEN SEIN — siehe 8 "transactionId": "cancel:alice:1187:0", "betTransactionId": "bet:alice:1187:0", "amount": 2.5, "currency": "USD", "roundId": "crash:USD:1187", "reason": "cancel" // cancel | void | rollback }
// POST /auth ja POST /getBalance { "partnerId": "198", "operatorId": "brand-7", // vain kun linkki nimesi brändin "token": "abc123", "currency": "USD" // vain getBalance; puuttuu authista } // POST /bet { "partnerId": "198", "token": "abc123", "transactionId": "bet:alice:1187:0", // meidän; ikuisesti yksilöllinen "amount": 2.5, "currency": "USD", "gameId": "555", // TEIDÄN luettelotunnuksenne "roundId": "crash:USD:1187" } // POST /win — sama, plus panos jonka se maksaa { "partnerId": "198", "token": "abc123", // VOI OLLA VANHENTUNUT — katso 8 "transactionId": "take:alice:1187:0", "betTransactionId": "bet:alice:1187:0", "amount": 7, "currency": "USD", "gameId": "555", "roundId": "crash:USD:1187" } // POST /rollback — panoksen palautus { "partnerId": "198", "token": "abc123", // VOI OLLA VANHENTUNUT — katso 8 "transactionId": "cancel:alice:1187:0", "betTransactionId": "bet:alice:1187:0", "amount": 2.5, "currency": "USD", "roundId": "crash:USD:1187", "reason": "cancel" // cancel | void | rollback }
roundId собран из игры, валюты и номера раунда: каждая игра нумерует свои раунды сама, поэтому голый номер уникален только внутри одной игры — составной id не даёт пятому раунду двух разных игр слиться в ваших отчётах.
roundId is composed of the game, the currency and the round number. Each game numbers its own rounds, so the bare number is unique only within one game — a composed id keeps round 5 of two different games apart in your reports.
roundId se compone del juego, la moneda y el número de ronda. Cada juego numera sus propias rondas, así que el número a secas solo es único dentro de un juego — un id compuesto mantiene separadas la ronda 5 de dos juegos distintos en sus informes.
roundId setzt sich aus Spiel, Währung und Rundennummer zusammen. Jedes Spiel nummeriert seine eigenen Runden, die nackte Zahl ist also nur innerhalb eines Spiels eindeutig — eine zusammengesetzte Kennung hält Runde 5 zweier verschiedener Spiele in Ihren Berichten auseinander.
roundId koostuu pelistä, valuutasta ja kierrosnumerosta. Jokainen peli numeroi omat kierroksensa, joten paljas numero on yksilöllinen vain yhden pelin sisällä — yhdistetty tunnus pitää kahden eri pelin kierroksen 5 erillään raporteissanne.
Выплата называет ставку, которую закрывает.A payout names the bet it settles.Un pago nombra la apuesta que liquida.Eine Auszahlung nennt den Einsatz, den sie abrechnet.Maksu nimeää panoksen jonka se selvittää.
betTransactionId — единственный способ их сопоставить: у игрока может быть несколько ставок в одном раунде, а номер места по этому проводу не ходит. Начисление, которое не закрывает никакой ставки — джекпот, — его не несёт.
betTransactionId is the only way to match the two: a player can hold more than one bet in the same round, and the seat is not on this wire. A credit that settles no bet of its own — a jackpot — carries none.
betTransactionId es la única forma de emparejar los dos: un jugador puede tener más de una apuesta en la misma ronda, y el asiento no viaja por este cable. Un abono que no liquida ninguna apuesta propia — un bote — no lleva ninguno.
betTransactionId ist die einzige Möglichkeit, beide zuzuordnen: ein Spieler kann mehr als einen Einsatz in derselben Runde halten, und der Platz steht nicht auf dieser Leitung. Eine Gutschrift, die keinen eigenen Einsatz abrechnet — ein Jackpot — trägt keine.
betTransactionId on ainoa tapa yhdistää nämä kaksi: pelaajalla voi olla useampi panos samalla kierroksella, eikä paikka kulje tällä linjalla. Hyvitys joka ei selvitä omaa panostaan — jättipotti — ei kanna sitä lainkaan.
reason говорит, какой это откат.reason says which kind of rollback this is.reason dice de qué tipo de devolución se trata.reason sagt, um welche Art von Rückbuchung es sich handelt.reason kertoo mistä palautuksen lajista on kyse.
cancel — игрок сам отменил ставку до старта раунда. void — ваш кошелёк подтвердил ставку уже после того, как мы сказали игре, что она не прошла, и теперь мы возвращаем деньги (см. 12). rollback — всё остальное.
cancel — the player cancelled the stake before the round started. void — your wallet confirmed a bet after we had already told the game it failed, so we are giving the stake back (see 12). rollback — anything else.
cancel — el jugador canceló la apuesta antes de que empezara la ronda. void — su monedero confirmó una apuesta después de que ya le hubiéramos dicho al juego que había fallado, así que devolvemos el importe (véase 12). rollback — cualquier otra cosa.
cancel — der Spieler hat den Einsatz vor Rundenbeginn storniert. void — Ihr Wallet hat einen Einsatz bestätigt, nachdem wir dem Spiel bereits gemeldet hatten, er sei fehlgeschlagen; wir geben ihn also zurück (siehe 12). rollback — alles andere.
cancel — pelaaja peruutti panoksen ennen kierroksen alkua. void — lompakkonne vahvisti panoksen sen jälkeen kun olimme jo kertoneet pelille sen epäonnistuneen, joten palautamme panoksen (katso 12). rollback — kaikki muu.
partnerId и operatorId — не два имени одного.partnerId and operatorId are not two names for one thing.partnerId y operatorId no son dos nombres de una misma cosa.partnerId und operatorId sind nicht zwei Namen für dasselbe.partnerId ja operatorId eivät ole kaksi nimeä samalle asialle.
partnerId — это учётные данные: наш идентификатор в вашей системе, одно значение на всю интеграцию. operatorId приезжает с каждым запуском и говорит, к какому вашему бренду относится игрок. Он отсутствует целиком, если в ссылке бренда не было — так что при одном бренде про него можно забыть.
partnerId is a credential: our id in your system, one value for the whole integration. operatorId arrives with each launch and says which of your brands the player belongs to. It is absent entirely when the link named no brand, so with one brand you can ignore it.
partnerId es una credencial: nuestro identificador en su sistema, un único valor para toda la integración. operatorId llega con cada lanzamiento y dice a cuál de sus marcas pertenece el jugador. Está ausente por completo cuando el enlace no nombró ninguna marca, así que con una sola marca puede ignorarlo.
partnerId ist ein Zugangsmerkmal: unsere Kennung in Ihrem System, ein Wert für die gesamte Integration. operatorId kommt mit jedem Start und sagt, zu welcher Ihrer Marken der Spieler gehört. Er fehlt vollständig, wenn der Link keine Marke genannt hat — bei einer einzigen Marke können Sie ihn also ignorieren.
partnerId on tunnistetieto: meidän tunnuksemme teidän järjestelmässänne, yksi arvo koko integraatiolle. operatorId saapuu jokaisen käynnistyksen mukana ja kertoo mihin brändiinne pelaaja kuuluu. Se puuttuu kokonaan kun linkki ei nimennyt brändiä, joten yhdellä brändillä voitte jättää sen huomiotta.
Поля roundFinished больше нет. Раньше оно было в этих телах и всегда приходило false, потому что ни одна игра не могла заполнить его честно: у раунда нет закрывающего сообщения, проигранная ставка не шлёт ничего (см. 8), а /win закрывает ровно ту ставку, которую называет.
There is no roundFinished. It used to be in these bodies and was always false, because nothing in the games could set it truthfully: a round has no closing message, a losing bet sends nothing at all (see 8), and a /win settles exactly the bet it names.
No hay roundFinished. Antes estaba en estos cuerpos y siempre era false, porque nada en los juegos podía ponerlo con verdad: una ronda no tiene mensaje de cierre, una apuesta perdedora no envía nada en absoluto (véase 8), y un /win liquida exactamente la apuesta que nombra.
Es gibt kein roundFinished. Es stand früher in diesen Bodies und war immer false, weil nichts in den Spielen es wahrheitsgemäß setzen konnte: eine Runde hat keine Abschlussmeldung, ein verlorener Einsatz sendet überhaupt nichts (siehe 8), und ein /win rechnet genau den Einsatz ab, den es nennt.
roundFinished-kenttää ei ole. Se oli ennen näissä rungoissa ja oli aina false, koska mikään peleissä ei voinut asettaa sitä todenmukaisesti: kierroksella ei ole päätösviestiä, häviävä panos ei lähetä mitään (katso 8), ja /win selvittää täsmälleen sen panoksen jonka se nimeää.
6.2Что отвечаете выWhat you answerQué responde ustedWas Sie antwortenMitä te vastaatte
{
"code": 0,
"balance": 997.50, // ПОСЛЕ операции
"currency": "USD",
"transactionId": "bet:alice:1187:0", // эхо нашего
"message": "", // свободный текст, для человека в логах
// только /auth:
"playerId": "p-1001",
"username": "alice"
}{
"code": 0,
"balance": 997.50, // AFTER the operation
"currency": "USD",
"transactionId": "bet:alice:1187:0", // echo ours
"message": "", // free text, for humans reading logs
// /auth only:
"playerId": "p-1001",
"username": "alice"
}{
"code": 0,
"balance": 997.50, // DESPUÉS de la operación
"currency": "USD",
"transactionId": "bet:alice:1187:0", // eco del nuestro
"message": "", // texto libre, para humanos leyendo logs
// solo /auth:
"playerId": "p-1001",
"username": "alice"
}{
"code": 0,
"balance": 997.50, // NACH der Operation
"currency": "USD",
"transactionId": "bet:alice:1187:0", // unsere zurückgespiegelt
"message": "", // Freitext, für Menschen, die Logs lesen
// nur /auth:
"playerId": "p-1001",
"username": "alice"
}{
"code": 0,
"balance": 997.50, // operaation JÄLKEEN
"currency": "USD",
"transactionId": "bet:alice:1187:0", // meidän tunnuksemme kaikuna
"message": "", // vapaa teksti, lokeja lukeville ihmisille
// vain /auth:
"playerId": "p-1001",
"username": "alice"
}
balance — баланс после операции, в той валюте, о которой спрашивали. На отказе присылайте баланс как есть, если он у вас под рукой: вам это ничего не стоит, а нам экономит вызов.
balance is the balance after the operation, in the currency you were asked about. On a refusal send the unchanged balance if you have it: it costs you nothing and saves us a call.
balance es el saldo después de la operación, en la moneda por la que se le preguntó. Ante un rechazo envíe el saldo sin cambios si lo tiene: no le cuesta nada y nos ahorra una llamada.
balance ist der Saldo nach der Operation, in der Währung, nach der gefragt wurde. Bei einer Ablehnung senden Sie den unveränderten Saldo, wenn Sie ihn haben: es kostet Sie nichts und erspart uns einen Aufruf.
balance on saldo operaation jälkeen, siinä valuutassa jota kysyttiin. Hylkäyksessä lähettäkää muuttumaton saldo jos se on tiedossa: se ei maksa teille mitään ja säästää meiltä yhden kutsun.
7КодыCodesCódigosCodesKoodit
Одна таблица на все методы. Что мы сделаем с кодом, зависит от того, в какую сторону шли деньги: отказ по списанию не двигает ничего и окончателен, а начисление — это деньги игрока, и попросить их ещё раз за нас уже некому. One table for every endpoint. What we do with a code depends on which way the money was going: refusing a debit moves nothing and is final, while a credit is money that belongs to the player, and nothing upstream of us will ask for it a second time. Una sola tabla para todos los endpoints. Lo que hacemos con un código depende de hacia dónde iba el dinero: rechazar un cargo no mueve nada y es definitivo, mientras que un abono es dinero que pertenece al jugador, y nada aguas arriba de nosotros lo pedirá una segunda vez. Eine Tabelle für alle Endpunkte. Was wir mit einem Code tun, hängt davon ab, in welche Richtung das Geld ging: eine abgelehnte Abbuchung bewegt nichts und ist endgültig, während eine Gutschrift Geld ist, das dem Spieler gehört — und niemand vor uns wird es ein zweites Mal anfordern. Yksi taulukko kaikille päätepisteille. Se mitä teemme koodilla riippuu siitä kumpaan suuntaan raha oli menossa: veloituksen hylkääminen ei siirrä mitään ja on lopullinen, kun taas hyvitys on pelaajalle kuuluvaa rahaa, eikä mikään meitä ylempänä pyydä sitä toista kertaa.
| КодCodeCódigoCodeKoodi | ЗначениеMeaningSignificadoBedeutungMerkitys | /auth, /getBalance, /bet |
/win, /rollback |
|---|---|---|---|
| 0 | OK | примененоit took effectsurtió efectohat gewirkttuli voimaan | примененоit took effectsurtió efectohat gewirkttuli voimaan |
| 110 | Уже примененоAlready processedYa procesadoBereits verarbeitetJo käsitelty | прошло раньше; считаем один разit took effect earlier; counted oncesurtió efecto antes; se cuenta una vezhat früher gewirkt; zählt einmaltuli voimaan aiemmin; lasketaan kerran | прошло раньше; считаем один разit took effect earlier; counted oncesurtió efecto antes; se cuenta una vezhat früher gewirkt; zählt einmaltuli voimaan aiemmin; lasketaan kerran |
| 1 | Общая ошибкаGeneral errorError generalAllgemeiner FehlerYleinen virhe | окончательный отказ, игрок его видитfinal refusal; the player is toldrechazo definitivo; se le dice al jugadorendgültige Ablehnung; der Spieler wird informiertlopullinen hylkäys; pelaajalle kerrotaan | повторяемwe retryreintentamoswir wiederholenlähetämme uudelleen |
| 3 | Недостаточно средствInsufficient fundsFondos insuficientesNicht genug GuthabenKatteeton | окончательный отказ, игрок его видитfinal refusal; the player sees itrechazo definitivo; el jugador lo veendgültige Ablehnung; der Spieler sieht eslopullinen hylkäys; pelaaja näkee sen | повторяем (на начислении это бессмыслица)we retry (it means nothing on a credit)reintentamos (no significa nada en un abono)wir wiederholen (bei einer Gutschrift bedeutet es nichts)lähetämme uudelleen (hyvityksessä se ei merkitse mitään) |
| 4 | Токен не найден или просроченToken not found or expiredToken no encontrado o caducadoToken nicht gefunden oder abgelaufenTunnistetta ei löydy tai se on vanhentunut | окончательный отказ, сессия оконченаfinal refusal; the session is overrechazo definitivo; la sesión ha terminadoendgültige Ablehnung; die Sitzung ist vorbeilopullinen hylkäys; istunto on ohi | не используйтеdo not useno usarnicht verwendenälä käytä — см. 8; повторяем— see 8; we retry— véase 8; reintentamos— siehe 8; wir wiederholen— katso 8; lähetämme uudelleen |
| 5 | Превышен лимитLimit exceededLímite excedidoLimit überschrittenRaja ylittyi | окончательный отказ, игрок его видитfinal refusal; the player is toldrechazo definitivo; se le dice al jugadorendgültige Ablehnung; der Spieler wird informiertlopullinen hylkäys; pelaajalle kerrotaan | повторяемwe retryreintentamoswir wiederholenlähetämme uudelleen |
| 6 | Игрок заблокирован или самоисключёнPlayer blocked or self-excludedJugador bloqueado o autoexcluidoSpieler gesperrt oder selbstausgeschlossenPelaaja estetty tai itse sulkeutunut | окончательный отказfinal refusalrechazo definitivoendgültige Ablehnunglopullinen hylkäys | повторяемwe retryreintentamoswir wiederholenlähetämme uudelleen |
| 7 | Транзакция не найденаTransaction not foundTransacción no encontradaTransaktion nicht gefundenTapahtumaa ei löydy | — | /rollback: считаем закрытым. /win: повторяем — см. ниже/rollback: settled, we stop. /win: we retry — see below/rollback: liquidado, paramos. /win: reintentamos — véase abajo/rollback: erledigt, wir hören auf. /win: wir wiederholen — siehe unten/rollback: selvitetty, lopetamme. /win: lähetämme uudelleen — katso alta |
7 — единственный код, смысл которого зависит от направления. На /rollback он закрывает вопрос: если ставки у вас не было, деньги и так там, где должны быть. На /win он не закрывает ничего — игрок выиграл и не получил, — поэтому мы продолжаем слать, а если на горизонте всё ещё 7, выплату забирает человек на нашей стороне. Не отказывайте выплате кодом 7: кода, которым это можно сделать, нет вовсе, и это сделано намеренно.
7 is the one code whose meaning depends on the direction. On a /rollback it settles the matter: if you never had the stake, the money is already where it belongs. On a /win it settles nothing — the player won and has not been paid — so we keep re-sending, and if it is still 7 at the horizon a human on our side picks it up. Do not use 7 to decline a payout; there is no code that does that, by design.
7 es el único código cuyo significado depende de la dirección. En un /rollback zanja el asunto: si nunca tuvo la apuesta, el dinero ya está donde corresponde. En un /win no zanja nada — el jugador ganó y no ha cobrado — así que seguimos reenviando, y si sigue siendo 7 al llegar al horizonte, una persona de nuestro lado lo recoge. No use 7 para rechazar un pago; no hay ningún código que haga eso, por diseño.
7 ist der einzige Code, dessen Bedeutung von der Richtung abhängt. Bei einem /rollback erledigt er die Sache: wenn Sie den Einsatz nie hatten, liegt das Geld ohnehin dort, wo es hingehört. Bei einem /win erledigt er gar nichts — der Spieler hat gewonnen und ist nicht bezahlt worden — also senden wir weiter, und ist es am Horizont immer noch 7, nimmt sich ein Mensch auf unserer Seite der Sache an. Verwenden Sie 7 nicht, um eine Auszahlung abzulehnen; einen Code dafür gibt es absichtlich nicht.
7 on ainoa koodi jonka merkitys riippuu suunnasta. /rollback-kutsussa se päättää asian: jos panosta ei koskaan ollut, raha on jo siellä minne kuuluu. /win-kutsussa se ei päätä mitään — pelaaja voitti eikä ole saanut maksua — joten jatkamme lähettämistä, ja jos se on määräajan tullen yhä 7, meidän puolellamme ihminen ottaa sen käsiinsä. Älkää käyttäkö koodia 7 maksun torjumiseen; sellaista koodia ei ole, tarkoituksella.
Незнакомый код и тело вообще без кода читаются ровно как 1.
A code we do not know, and a body with no code at all, is read exactly like 1.
Un código que no conocemos, y un cuerpo sin código alguno, se leen exactamente como 1.
Ein Code, den wir nicht kennen, und ein Body ganz ohne Code werden genau wie 1 gelesen.
Koodi jota emme tunne, ja runko jossa ei ole koodia lainkaan, luetaan täsmälleen kuin 1.
110 стоит перечитать дважды.110 is worth reading twice.110 merece leerse dos veces.110 ist zweimal Lesen wert.110 kannattaa lukea kahdesti.
Это не синоним нуля. Он говорит, что деньги двинулись ровно один раз, а этот вызов был повтором — и именно он велит нам записать одну транзакцию вместо двух. На нём сходятся цифры оборота у вас и у нас. It is not a synonym for 0. It says the money moved exactly once and this call was a repeat — which is what tells us to record one transaction instead of two, and keeps the turnover figures on both sides agreeing. No es sinónimo de 0. Dice que el dinero se movió exactamente una vez y que esta llamada era una repetición — que es lo que nos dice que registremos una transacción y no dos, y lo que mantiene de acuerdo las cifras de volumen de ambos lados. Er ist kein Synonym für 0. Er sagt, dass das Geld sich genau einmal bewegt hat und dieser Aufruf eine Wiederholung war — und genau das sagt uns, eine Transaktion statt zwei zu verbuchen, und hält die Umsatzzahlen auf beiden Seiten in Übereinstimmung. Se ei ole synonyymi nollalle. Se kertoo että raha liikkui täsmälleen kerran ja tämä kutsu oli toisinto — juuri se kertoo meille kirjata yhden tapahtuman kahden sijaan, ja pitää vaihtoluvut molemmilla puolilla yhtäpitävinä.
8ПравилаThe rulesLas reglasDie RegelnSäännöt
1 · Идемпотентность: ключ — это transactionId.1 · Idempotency: transactionId is the key.1 · Idempotencia: transactionId es la clave.1 · Idempotenz: transactionId ist der Schlüssel.1 · Idempotenssi: transactionId on avain.
Повтор уже виденного не должен двигать деньги снова и должен отвечать 110 с текущим балансом. Мы повторяем: потерянный ответ не говорит нам, применили вы операцию или нет, — поэтому мы шлём тот же самый transactionId, пока не узнаем. Это самый важный пункт всего документа. Проверка должна быть атомарной — уникальный индекс, а не «прочитал-записал»: повтор может прийти к вам, пока первый запрос ещё в работе.
A repeat of one you have seen must not move money again, and must answer 110 with the balance as it stands. We retry: a lost response does not tell us whether you applied the operation, so we re-send the same transactionId until we know. This is the single most important clause in this document. Make the check atomic — a unique constraint, not read-then-write: a retry can reach you while the original request is still being processed.
Una repetición de uno que ya haya visto no debe mover dinero otra vez, y debe responder 110 con el saldo tal como está. Nosotros reintentamos: una respuesta perdida no nos dice si aplicó la operación, así que reenviamos el mismo transactionId hasta saberlo. Esta es la cláusula más importante de todo el documento. Haga la comprobación atómica — una restricción de unicidad, no leer-y-luego-escribir: un reintento puede llegarle mientras la petición original todavía se está procesando.
Eine Wiederholung einer bereits gesehenen darf kein Geld erneut bewegen und muss mit 110 und dem aktuellen Saldo antworten. Wir wiederholen: eine verlorene Antwort sagt uns nicht, ob Sie die Operation angewendet haben, also senden wir dieselbe transactionId erneut, bis wir es wissen. Das ist die wichtigste Klausel in diesem Dokument. Machen Sie die Prüfung atomar — ein Unique-Constraint, kein Lesen-dann-Schreiben: eine Wiederholung kann Sie erreichen, während die ursprüngliche Anfrage noch verarbeitet wird.
Jo nähdyn toisinto ei saa siirtää rahaa uudelleen, ja sen on vastattava 110 sekä sen hetkinen saldo. Me lähetämme uudelleen: kadonnut vastaus ei kerro meille sovelsitteko operaation, joten lähetämme saman transactionId:n kunnes tiedämme. Tämä on koko dokumentin tärkein kohta. Tehkää tarkistus atomisena — yksilöivä rajoite, ei lue-sitten-kirjoita: uudelleenlähetys voi saapua teille kun alkuperäistä pyyntöä vielä käsitellään.
1a · transactionId непрозрачен и длиннее, чем в примерах.1a · transactionId is opaque, and it is longer than the examples.1a · transactionId es opaco, y es más largo que los ejemplos.1a · transactionId ist undurchsichtig, und er ist länger als die Beispiele.1a · transactionId on läpinäkymätön, ja se on esimerkkejä pidempi.
Печатный ASCII, до 256 символов, его выпускает игровой сервер. Храните как пришло: не разбирайте его, не индексируйте по префиксу и не считайте, что это uuid. В боевой игре crash собирает его из раунда, места и токена сессии игрока — take:crash_d:b4cdc3f2…cfcda56:1695:2 — 84 символа при токене в 64 символа, и длина зависит от вашего токена, а не от нашего. Заложите в колонку 256. Этот пункт здесь потому, что мы заложили у себя 64: в первое же утро боевой игры у одного партнёра все до единого кэшауты падали ещё до того, как их кошелёк вызывался. Токен сессии внутри него идёт с префиксом оператора, по которому мы маршрутизируем (acme:b4cdc3f2…), поэтому идентификатор длиннее вашего токена и не совпадает с полем token символ в символ — храните как пришло и сравнивайте целиком.
Printable ASCII, up to 256 characters, minted by the game server. Store it as given: do not parse it, key on a prefix, or assume a uuid. In live play the crash game builds it from the round, the seat and the player's session token — take:crash_d:b4cdc3f2…cfcda56:1695:2 — 84 characters with a 64-character token, and the length follows your token, not ours. Size the column for 256. The clause is here because we sized ours for 64: every cash-out in one partner's first morning of live play failed before their wallet was ever called. The session token inside it is prefixed with the operator id we route by (acme:b4cdc3f2…), so the id is longer than your token alone and does not match the token field character for character — store it as given and compare it whole.
ASCII imprimible, hasta 256 caracteres, acuñado por el servidor del juego. Guárdelo tal cual: no lo parsee, no indexe por un prefijo, ni asuma que es un uuid. En juego real el juego crash lo construye a partir de la ronda, el asiento y el token de sesión del jugador — take:crash_d:b4cdc3f2…cfcda56:1695:2 — 84 caracteres con un token de 64, y la longitud sigue a su token, no al nuestro. Dimensione la columna para 256. Esta cláusula está aquí porque nosotros la dimensionamos para 64: todos los cobros de la primera mañana de juego real de un socio fallaron antes de que su monedero llegara a ser llamado. El token de sesión que contiene lleva como prefijo el id del operador por el que enrutamos (acme:b4cdc3f2…), por lo que el id es más largo que su token y no coincide carácter por carácter con el campo token — guárdelo tal cual y compárelo completo.
Druckbares ASCII, bis zu 256 Zeichen, vom Spielserver erzeugt. Speichern Sie ihn wie geliefert: parsen Sie ihn nicht, indizieren Sie nicht auf ein Präfix, und nehmen Sie keine uuid an. Im Echtbetrieb baut das Crash-Spiel ihn aus der Runde, dem Platz und dem Sitzungstoken des Spielers — take:crash_d:b4cdc3f2…cfcda56:1695:2 — 84 Zeichen bei einem 64-Zeichen-Token, und die Länge richtet sich nach Ihrem Token, nicht nach unserem. Dimensionieren Sie die Spalte auf 256. Die Klausel steht hier, weil wir unsere auf 64 dimensioniert hatten: jede Auszahlung am ersten Echtbetriebsmorgen eines Partners scheiterte, bevor sein Wallet überhaupt aufgerufen wurde. Das darin enthaltene Sitzungstoken trägt die Operator-Id als Präfix, über die wir routen (acme:b4cdc3f2…), daher ist die Id länger als Ihr Token und stimmt mit dem Feld token nicht zeichengenau überein — speichern Sie sie wie geliefert und vergleichen Sie sie als Ganzes.
Tulostuvaa ASCIIta, enintään 256 merkkiä, pelipalvelimen luoma. Tallentakaa se sellaisenaan: älkää jäsentäkö, älkää avaintako etuliitteeseen, älkääkä olettako uuid:ksi. Oikeassa pelissä crash-peli rakentaa sen kierroksesta, paikasta ja pelaajan istuntotunnisteesta — take:crash_d:b4cdc3f2…cfcda56:1695:2 — 84 merkkiä 64 merkin tunnisteella, ja pituus seuraa teidän tunnistettanne, ei meidän. Mitoittakaa sarake 256:lle. Tämä kohta on täällä koska me mitoitimme omamme 64:lle: erään kumppanin ensimmäisen oikean peliaamun jokainen kotiutus epäonnistui ennen kuin heidän lompakkoaan ehdittiin edes kutsua. Sen sisällä oleva istuntotunniste kantaa etuliitteenä operaattorin id:tä, jonka mukaan reititämme (acme:b4cdc3f2…), joten id on pidempi kuin teidän tunnisteenne eikä täsmää token-kentän kanssa merkilleen — tallentakaa se sellaisenaan ja vertailkaa kokonaisena.
2 · /win и /rollback работают на просроченном токене.2 · A /win and a /rollback work on an expired token.2 · Un /win y un /rollback funcionan con un token caducado.2 · Ein /win und ein /rollback funktionieren mit einem abgelaufenen Token.2 · /win ja /rollback toimivat vanhentuneella tunnisteella.
Конец сессии игрока — не причина оставить у себя ни его ставку, ни его выигрыш, а раунд может пережить сессию, в которой начался. Не проверяйте токен ни там, ни там. Код 4 — это про /auth, /getBalance и /bet.
A player's session ending is not a reason to keep their stake or their winnings, and a round can outlive the session it started in. Do not check the token on either. Code 4 belongs to /auth, /getBalance and /bet.
Que la sesión de un jugador termine no es razón para quedarse con su apuesta ni con sus ganancias, y una ronda puede sobrevivir a la sesión en la que empezó. No compruebe el token en ninguna de las dos. El código 4 pertenece a /auth, /getBalance y /bet.
Dass die Sitzung eines Spielers endet, ist kein Grund, seinen Einsatz oder seinen Gewinn zu behalten, und eine Runde kann die Sitzung überleben, in der sie begann. Prüfen Sie das Token bei keinem von beiden. Code 4 gehört zu /auth, /getBalance und /bet.
Pelaajan istunnon päättyminen ei ole syy pitää hänen panostaan tai voittoaan, ja kierros voi elää pidempään kuin istunto jossa se alkoi. Älkää tarkistako tunnistetta kummassakaan. Koodi 4 kuuluu päätepisteille /auth, /getBalance ja /bet.
Правильная форма — это асимметрия на одном токене, и её стоит проверить у себя токеном, которому вы дали протухнуть: /bet на нём отказывает кодом 4 (ставке нужна живая сессия — игрок сейчас за столом), а /win и /rollback на ТОМ ЖЕ токене отвечают 0 и двигают деньги. Решает направление денег, и поэтому это не противоречие: списание — действие, которое игрок совершает сейчас; начисление — результат уже состоявшегося раунда, и отказ его не отменяет, он лишь оставляет деньги там, где их никто не найдёт.
The shape to aim for is an asymmetry on one token, and it is worth testing yourself with a token you have let expire: /bet on it refuses with 4 (a stake needs a live session — the player is at the table now), while /win and /rollback on the SAME token answer 0 and move the money. The direction of the money is what decides it, which is why this is not an inconsistency: a debit is an action the player is taking; a credit is the result of a round that has already happened, and refusing it does not undo the round — it only strands the money where nobody will look for it.
La forma a la que hay que apuntar es una asimetría sobre un mismo token, y merece la pena probarla usted mismo con un token que haya dejado caducar: /bet con él rechaza con 4 (una apuesta necesita una sesión viva — el jugador está en la mesa ahora), mientras que /win y /rollback con el MISMO token responden 0 y mueven el dinero. Lo que lo decide es la dirección del dinero, y por eso esto no es una incoherencia: un cargo es una acción que el jugador está realizando; un abono es el resultado de una ronda que ya ocurrió, y rechazarlo no deshace la ronda — solo deja el dinero varado donde nadie lo buscará.
Die Form, die Sie anstreben, ist eine Asymmetrie auf einem Token, und es lohnt sich, sie selbst mit einem bewusst abgelaufenen Token zu testen: /bet damit lehnt mit 4 ab (ein Einsatz braucht eine lebende Sitzung — der Spieler sitzt jetzt am Tisch), während /win und /rollback mit DEMSELBEN Token 0 antworten und das Geld bewegen. Entscheidend ist die Richtung des Geldes, und deshalb ist das kein Widerspruch: eine Abbuchung ist eine Handlung des Spielers; eine Gutschrift ist das Ergebnis einer Runde, die bereits stattgefunden hat, und sie abzulehnen macht die Runde nicht rückgängig — es strandet nur das Geld dort, wo niemand danach sucht.
Tavoiteltava muoto on epäsymmetria yhdellä tunnisteella, ja sitä kannattaa testata itse tunnisteella jonka on antanut vanhentua: /bet sillä hylkää koodilla 4 (panos vaatii elävän istunnon — pelaaja on pöydässä juuri nyt), kun taas /win ja /rollback SAMALLA tunnisteella vastaavat 0 ja siirtävät rahan. Rahan suunta ratkaisee, ja siksi tämä ei ole epäjohdonmukaisuus: veloitus on toimi jonka pelaaja tekee; hyvitys on tulos kierroksesta joka on jo tapahtunut, eikä sen torjuminen peru kierrosta — se vain jättää rahan jumiin sinne mistä kukaan ei etsi sitä.
3 · /win и /rollback мы не бросаем.3 · A /win and a /rollback are never dropped by us.3 · Un /win y un /rollback nunca los descartamos.3 · Ein /win und ein /rollback werden von uns nie fallen gelassen.3 · /win- ja /rollback-kutsua emme koskaan pudota.
Всё, кроме 0 / 110 — и 7 на откате, — оставляет операцию неурегулированной, и она уйдёт снова под тем же transactionId, пока не пройдёт или пока не истечёт горизонт (см. 12). Так что не отказывайте в выплате из-за временной проблемы: увидите её снова.
Anything but 0 / 110 — and 7 on a rollback — leaves the operation unsettled, and it goes out again under the same transactionId until it lands or the horizon passes (see 12). So do not refuse a payout for something transient, and expect to see it again if you do.
Cualquier cosa que no sea 0 / 110 — y 7 en un rollback — deja la operación sin liquidar, y sale otra vez bajo el mismo transactionId hasta que aterrice o se pase el horizonte (véase 12). Así que no rechace un pago por algo transitorio, y espere volver a verlo si lo hace.
Alles außer 0 / 110 — und 7 bei einem Rollback — lässt die Operation unerledigt, und sie geht unter derselben transactionId wieder hinaus, bis sie ankommt oder der Horizont überschritten ist (siehe 12). Lehnen Sie eine Auszahlung also nicht wegen etwas Vorübergehendem ab — und rechnen Sie damit, sie wiederzusehen, wenn Sie es doch tun.
Kaikki muu kuin 0 / 110 — ja 7 palautuksessa — jättää operaation selvittämättä, ja se lähtee uudelleen samalla transactionId:llä kunnes se osuu perille tai määräaika umpeutuu (katso 12). Älkää siis torjuko maksua ohimenevän syyn takia, ja odottakaa näkevänne sen uudelleen jos teette niin.
4 · Rollback того, чего у вас нет, — это 7, а не 1.4 · A rollback of something you do not have is 7, not 1.4 · Un rollback de algo que no tiene es 7, no 1.4 · Ein Rollback von etwas, das Sie nicht haben, ist 7, nicht 1.4 · Sellaisen palautus jota teillä ei ole on 7, ei 1.
Семёрку мы считаем окончательным ответом: деньги в любом случае там, где должны быть, и мы останавливаемся. Но идентификатор всё равно запомните: /bet с этим id, который придёт следом — задержавшись где-то по дороге, — не должен забирать деньги. На него ответьте 110.
We treat 7 as settled — the money is where it should be either way — and stop. Record the id all the same: a /bet under it that turns up afterwards, held up somewhere on the way, must not take the money. Answer that one 110.
Tratamos el 7 como liquidado — el dinero está donde debe estar de todas formas — y paramos. Registre el id igualmente: un /bet con ese id que aparezca después, retenido en algún punto del camino, no debe llevarse el dinero. A ese respóndale 110.
Wir behandeln die 7 als erledigt — das Geld liegt so oder so, wo es hingehört — und hören auf. Verbuchen Sie die Kennung trotzdem: ein /bet unter ihr, das danach noch auftaucht, irgendwo unterwegs aufgehalten, darf das Geld nicht nehmen. Auf das antworten Sie 110.
Käsittelemme koodin 7 selvitettynä — raha on joka tapauksessa siellä minne kuuluu — ja lopetamme. Kirjatkaa tunnus silti: sen alla myöhemmin ilmestyvä /bet, jota on matkalla jossain pidätelty, ei saa viedä rahaa. Siihen vastatkaa 110.
5 · Суммы никогда не отрицательные, а ноль — не ошибка.5 · Amounts are never negative, and zero is not an error.5 · Los importes nunca son negativos, y el cero no es un error.5 · Beträge sind nie negativ, und null ist kein Fehler.5 · Summat eivät ole koskaan negatiivisia, eikä nolla ole virhe.
Направление задаёт эндпоинт: /bet списывает, /win начисляет, /rollback возвращает. Минуса не бывает никогда — исправление делается противоположным методом, а не суммой со знаком.
The direction is the endpoint: /bet debits, /win credits, /rollback returns. There is never a minus sign — a correction is the opposite endpoint, not a negative amount.
La dirección es el endpoint: /bet carga, /win abona, /rollback devuelve. Nunca hay un signo menos — una corrección es el endpoint contrario, no un importe negativo.
Die Richtung ist der Endpunkt: /bet bucht ab, /win schreibt gut, /rollback gibt zurück. Es gibt nie ein Minuszeichen — eine Korrektur ist der gegenteilige Endpunkt, kein negativer Betrag.
Suunta on päätepiste: /bet veloittaa, /win hyvittää, /rollback palauttaa. Miinusmerkkiä ei koskaan ole — korjaus on vastakkainen päätepiste, ei negatiivinen summa.
Ноль приходит ровно в двух случаях, и оба у части операторов выключены: счастливая ставка — /bet на 0, раунд за счёт заведения (не списывайте ничего, ответьте 0 и запомните transactionId: за ней может прийти /win); и проигранный раунд в тех модулях, которые о нём сообщают, — /win на 0 (правило 6). Не отказывайте ни в том, ни в другом: нулевая сумма, на которую ответили ошибкой, остаётся у нас нерассчитанной и вернётся повтором.
Zero reaches you in exactly two cases, and both are switched off for some operators: a lucky bet — a /bet of 0, a round the house is paying for (debit nothing, answer 0, and record the transactionId: a /win may follow it); and a lost round, in the modules that report one — a /win of 0 (rule 6). Refuse neither: a zero amount answered with an error leaves the round unsettled on our side and comes back as a retry.
El cero le llega en exactamente dos casos, y ambos están desactivados para algunos operadores: una apuesta de cortesía — un /bet de 0, una ronda que paga la casa (no cargue nada, responda 0, y registre el transactionId: puede venir un /win después); y una ronda perdida, en los módulos que la reportan — un /win de 0 (regla 6). No rechace ninguno: un importe cero contestado con un error deja la ronda sin liquidar de nuestro lado y vuelve como un reintento.
Die Null erreicht Sie in genau zwei Fällen, und beide sind für manche Betreiber abgeschaltet: ein Gratiseinsatz — ein /bet über 0, eine Runde, die das Haus bezahlt (buchen Sie nichts ab, antworten Sie 0, und verbuchen Sie die transactionId: ein /win kann folgen); und eine verlorene Runde, in den Modulen, die eine melden — ein /win über 0 (Regel 6). Lehnen Sie keinen von beiden ab: ein mit einem Fehler beantworteter Nullbetrag lässt die Runde auf unserer Seite unerledigt und kommt als Wiederholung zurück.
Nolla saapuu teille täsmälleen kahdessa tapauksessa, ja molemmat on joillakin operaattoreilla kytketty pois: ilmaispanos — /bet summalla 0, kierros jonka talo maksaa (älkää veloittako mitään, vastatkaa 0, ja kirjatkaa transactionId: /win voi seurata); ja hävitty kierros niissä moduuleissa jotka sellaisen raportoivat — /win summalla 0 (sääntö 6). Älkää torjuko kumpaakaan: virheellä vastattu nollasumma jättää kierroksen selvittämättä meidän puolellamme ja palaa uudelleenlähetyksenä.
6 · Проигранный раунд не шлёт ничего.6 · A losing round sends nothing.6 · Una ronda perdedora no envía nada.6 · Eine verlorene Runde sendet nichts.6 · Häviävä kierros ei lähetä mitään.
Ни /win, ни /rollback. Ставка, после которой ничего не пришло, а раунд закончился, — проиграна: не держите её открытой и не возвращайте. (Часть наших игр сообщает о проигранном раунде нулевым /win. Если он придёт — примите; но ждать его не надо.)
No /win, no /rollback. A bet with nothing after it once the round is over has lost: do not hold it open, and do not give it back. (Some of our games do report a lost round as a /win of zero. Accept one if it comes — never wait for it.)
Ni /win, ni /rollback. Una apuesta sin nada detrás una vez terminada la ronda ha perdido: no la deje abierta, y no la devuelva. (Algunos de nuestros juegos sí reportan una ronda perdida como un /win de cero. Acéptelo si llega — nunca lo espere.)
Kein /win, kein /rollback. Ein Einsatz, auf den nach Rundenende nichts mehr folgt, hat verloren: lassen Sie ihn nicht offen, und geben Sie ihn nicht zurück. (Manche unserer Spiele melden eine verlorene Runde doch als /win über null. Nehmen Sie eines an, wenn es kommt — warten Sie nie darauf.)
Ei /win, ei /rollback. Panos jonka perässä ei tule mitään kierroksen päätyttyä on hävinnyt: älkää pitäkö sitä auki, älkääkä palauttako sitä. (Osa peleistämme raportoi hävityn kierroksen nollan suuruisena /win-kutsuna. Hyväksykää sellainen jos se tulee — älkää koskaan jääkö odottamaan sitä.)
9ДеньгиMoneyDineroGeldRaha
Суммы — JSON-числа в мажорных единицах: 2.5 для 250 минорных единиц двухзначной валюты. JSON-число не хранит хвостовых нулей, поэтому 2.50 приходит как 2.5, а 10.00 — как 10. Разбирайте их как десятичные — не как float и не как строку заданного вида.
Amounts are JSON numbers in major units: 2.5 for 250 minor units of a two-decimal currency. A JSON number keeps no trailing zeros, so 2.50 arrives as 2.5 and 10.00 as 10. Parse them as decimals — not as floats, and not as text of a fixed shape.
Los importes son números JSON en unidades mayores: 2.5 para 250 unidades menores de una moneda de dos decimales. Un número JSON no conserva ceros finales, así que 2.50 llega como 2.5 y 10.00 como 10. Parséelos como decimales — no como floats, y no como texto de forma fija.
Beträge sind JSON-Zahlen in Haupteinheiten: 2.5 für 250 Untereinheiten einer Währung mit zwei Nachkommastellen. Eine JSON-Zahl behält keine nachlaufenden Nullen, 2.50 kommt also als 2.5 an und 10.00 als 10. Parsen Sie sie als Dezimalzahlen — nicht als Floats und nicht als Text fester Form.
Summat ovat JSON-lukuja pääyksiköissä: 2.5 tarkoittaa 250 alayksikköä kaksidesimaalisessa valuutassa. JSON-luku ei säilytä perässä olevia nollia, joten 2.50 saapuu muodossa 2.5 ja 10.00 muodossa 10. Jäsentäkää ne desimaalilukuina — ei liukulukuina eikä kiinteämuotoisena tekstinä.
У себя мы держим деньги целым числом минорных единиц и конвертируем один раз — здесь, на краю провода. Конвертация, которая потеряла бы долю минорной единицы, падает, а не округляет: мы не станем молча срезать часть выплаты и предпочтём, чтобы интеграция громко сломалась на тестах. We hold money as an integer count of minor units and convert once, here at the wire edge. A conversion that would lose a fraction of a minor unit fails rather than rounding — we will not silently shave value off a payout, and we would rather an integration break loudly during testing. Nosotros guardamos el dinero como un entero de unidades menores y convertimos una sola vez, aquí en el borde del cable. Una conversión que perdería una fracción de unidad menor falla en lugar de redondear — no vamos a recortar valor de un pago en silencio, y preferimos que una integración se rompa ruidosamente durante las pruebas. Wir halten Geld als ganzzahlige Anzahl von Untereinheiten und konvertieren genau einmal, hier am Rand der Leitung. Eine Konvertierung, die einen Bruchteil einer Untereinheit verlieren würde, schlägt fehl statt zu runden — wir werden von einer Auszahlung nicht stillschweigend Wert abschneiden, und uns ist eine Integration lieber, die im Test laut kaputtgeht. Me pidämme rahan kokonaislukuna alayksiköitä ja muunnamme vain kerran, tässä linjan reunalla. Muunnos joka menettäisi murto-osan alayksiköstä epäonnistuu sen sijaan että pyöristäisi — emme leikkaa arvoa maksusta äänettömästi, ja mieluummin integraatio hajoaa äänekkäästi testeissä.
Сделайте так же.Do the same on your side.Haga lo mismo de su lado.Machen Sie es auf Ihrer Seite genauso.Tehkää samoin omalla puolellanne.
amount * 100 через float — это то, как 2.50 превращается в 249.
amount * 100 through a float is how 2.50 becomes 249.
amount * 100 a través de un float es como 2.50 se convierte en 249.
amount * 100 über einen Float ist der Weg, auf dem aus 2.50 eine 249 wird.
amount * 100 liukuluvun kautta on juuri se tapa jolla 2.50 muuttuu luvuksi 249.
12Таймауты и повторыTiming and retriesTiempos y reintentosZeiten und WiederholungenAikarajat ja uudelleenlähetykset
| Ответить за 5 с — ваш SLAAnswer within 5 s — your service levelResponda en menos de 5 s — su nivel de servicioAntworten Sie binnen 5 s — Ihr Service-LevelVastatkaa 5 sekunnissa — teidän palvelutasonne | игра сдаётся по собственному вызову на 5 секунде и сообщает игроку, что ставка не прошла. Всё, что придёт позже, до игрока как удачная ставка уже не дойдёт.the game gives up on its own call at 5 seconds and tells the player the bet failed. Nothing you send after that reaches the player as a bet that worked.el juego abandona su propia llamada a los 5 segundos y le dice al jugador que la apuesta falló. Nada de lo que envíe después de eso le llega al jugador como una apuesta que funcionó.das Spiel gibt seinen eigenen Aufruf nach 5 Sekunden auf und sagt dem Spieler, der Einsatz sei fehlgeschlagen. Nichts, was Sie danach senden, erreicht den Spieler als Einsatz, der funktioniert hat.peli luovuttaa oman kutsunsa 5 sekunnissa ja kertoo pelaajalle että panos epäonnistui. Mikään minkä lähetätte sen jälkeen ei tavoita pelaajaa onnistuneena panoksena. |
| Мы ждём 6 с — наш таймаутWe wait 6 s — our timeoutEsperamos 6 s — nuestro tiempo de esperaWir warten 6 s — unser TimeoutMe odotamme 6 s — meidän aikakatkaisumme | после этого считаем запрос потерянным и повторяем. Лишняя секунда — на переходы между игрой, нашим шлюзом и вашим кошельком: ответ на 5,5 с для игрока уже опоздал, но закрывает транзакцию и экономит повтор. Реальная цель — меньше секунды.past it we treat the request as lost and retry it. The extra second is for the hop between the game, our gateway and your wallet — an answer at 5.5 s is too late for the player and still worth having, because it settles the transaction and saves a retry. Under one second is the real target.pasado ese punto damos la petición por perdida y la reintentamos. El segundo extra es para el salto entre el juego, nuestra pasarela y su monedero — una respuesta a los 5,5 s llega tarde para el jugador y aun así vale la pena, porque liquida la transacción y ahorra un reintento. Por debajo de un segundo es el objetivo real.danach behandeln wir die Anfrage als verloren und wiederholen sie. Die zusätzliche Sekunde ist für den Weg zwischen Spiel, unserem Gateway und Ihrem Wallet — eine Antwort nach 5,5 s ist für den Spieler zu spät und trotzdem wertvoll, weil sie die Transaktion erledigt und eine Wiederholung erspart. Unter einer Sekunde ist das eigentliche Ziel.sen jälkeen pidämme pyyntöä kadonneena ja lähetämme sen uudelleen. Ylimääräinen sekunti on pelin, yhdyskäytävämme ja lompakkonne välistä hyppyä varten — vastaus 5,5 sekunnissa on pelaajalle liian myöhään ja silti arvokas, koska se selvittää tapahtuman ja säästää uudelleenlähetyksen. Alle sekunti on todellinen tavoite. |
| ПовторяемWe re-sendReenviamosWir senden erneutLähetämme uudelleen | тот же transactionId, то же тело: если ответа нет вообще (таймаут, обрыв соединения), если HTTP 5xx, если тело не-JSON; а на /win и /rollback — при любом коде, кроме 0 и 110, плюс 7, который закрывает только /rollback.the same transactionId and the same body: when there is no answer at all (timeout, connection error), on HTTP 5xx, on a body that is not JSON; and on /win and /rollback, for any code but 0 and 110 — plus 7, which settles a /rollback only.el mismo transactionId y el mismo cuerpo: cuando no hay respuesta en absoluto (tiempo agotado, error de conexión), ante un HTTP 5xx, ante un cuerpo que no es JSON; y en /win y /rollback, ante cualquier código que no sea 0 ni 110 — más el 7, que liquida solo un /rollback.dieselbe transactionId und denselben Body: wenn gar keine Antwort kommt (Timeout, Verbindungsfehler), bei HTTP 5xx, bei einem Body, der kein JSON ist; und bei /win und /rollback bei jedem Code außer 0 und 110 — plus 7, das nur ein /rollback erledigt.saman transactionId:n ja saman rungon: kun vastausta ei tule lainkaan (aikakatkaisu, yhteysvirhe), HTTP 5xx -vastaukseen, runkoon joka ei ole JSONia; ja kutsuissa /win ja /rollback mihin tahansa koodiin paitsi 0 ja 110 — sekä koodiin 7, joka selvittää vain /rollback-kutsun. |
| Не повторяемWe do not re-sendNo reenviamosWir senden nicht erneutEmme lähetä uudelleen | /bet, на который вы ответили кодом. Этот код и есть вердикт, каким бы ни был HTTP-статус.a /bet you answered with a code. That code is the verdict, whatever the HTTP status.un /bet que respondió con un código. Ese código es el veredicto, sea cual sea el estado HTTP.ein /bet, das Sie mit einem Code beantwortet haben. Dieser Code ist das Urteil, egal welcher HTTP-Status./bet-kutsua johon vastasitte koodilla. Se koodi on tuomio, oli HTTP-tila mikä tahansa. |
| РасписаниеScheduleCalendarioZeitplanAikataulu | первый повтор — через несколько секунд, дальше интервал удваивается, до одного раза в минутуthe first re-send within a few seconds, then the interval doubles, up to once a minuteel primer reenvío en unos pocos segundos, luego el intervalo se duplica, hasta una vez por minutodie erste Wiederholung binnen weniger Sekunden, dann verdoppelt sich der Abstand, bis zu einmal pro Minuteensimmäinen uudelleenlähetys muutamassa sekunnissa, sitten väli kaksinkertaistuu, enintään kerran minuutissa |
| ГоризонтHorizonHorizonteHorizontMääräaika | столько, сколько вы держите transactionId. Назовите число — мы подстроимся; после этого операция уходит на разбор человеку у нас.as long as you keep a transactionId. Tell us the number and we match it; after that the operation is flagged for a human on our side.tanto tiempo como usted conserve un transactionId. Díganos el número y lo igualamos; pasado eso, la operación se marca para que la mire una persona de nuestro lado.so lange, wie Sie eine transactionId aufbewahren. Nennen Sie uns die Zahl, und wir gleichen uns an; danach wird die Operation für einen Menschen auf unserer Seite markiert.niin kauan kuin te säilytätte transactionId:n. Kertokaa luku, niin sovitamme sen; sen jälkeen operaatio merkitään meidän puolellamme ihmisen tarkasteltavaksi. |
Один счёт — один запрос за раз, с нашей стороны. Пока /bet, /win или /rollback по игроку не получил ответа, мы придерживаем /getBalance и /auth по тому же игроку до его завершения. Баланс, прочитанный в середине записи, — это число, которое вот-вот перестанет быть правдой, а попадёт оно на экран игрока как текущее состояние. Ставки с разных мест в одном раунде по-прежнему приходят одновременно, каждая со своим transactionId, — поэтому проверка идемпотентности должна быть атомарной (8, правило 1), и именно она делает параллельные записи безопасными.
One account, one request at a time — from us. While a /bet, /win or /rollback for a player is still unanswered, we hold back any /getBalance or /auth for that same player until it settles. A balance read taken mid-write is a number that is about to stop being true, and it would reach the player's screen as though it were the state. Bets at different seats in one round still arrive together, each under its own transactionId — so your idempotency check must be atomic (8, rule 1), and it is the thing that makes overlapping writes safe.
Una cuenta, una petición a la vez — por nuestra parte. Mientras un /bet, /win o /rollback de un jugador siga sin respuesta, retenemos cualquier /getBalance o /auth de ese mismo jugador hasta que se liquide. Un saldo leído en mitad de una escritura es un número que está a punto de dejar de ser cierto, y llegaría a la pantalla del jugador como si fuera el estado. Las apuestas en asientos distintos de una misma ronda siguen llegando juntas, cada una bajo su propio transactionId — de ahí que su comprobación de idempotencia deba ser atómica (8, regla 1), y es lo que hace seguras las escrituras solapadas.
Ein Konto, eine Anfrage zur Zeit — von uns aus. Solange ein /bet, /win oder /rollback für einen Spieler noch unbeantwortet ist, halten wir jedes /getBalance und /auth für denselben Spieler zurück, bis es erledigt ist. Ein mitten im Schreiben gelesener Saldo ist eine Zahl, die gleich aufhört zu stimmen, und sie erreichte den Bildschirm des Spielers, als wäre sie der Stand. Einsätze auf verschiedenen Plätzen einer Runde kommen weiterhin gemeinsam an, jeder unter eigener transactionId — deshalb muss Ihre Idempotenzprüfung atomar sein (8, Regel 1), und genau das macht überlappende Schreibvorgänge sicher.
Yksi tili, yksi pyyntö kerrallaan — meidän puoleltamme. Niin kauan kuin pelaajan /bet, /win tai /rollback on vastaamatta, pidättelemme saman pelaajan /getBalance- ja /auth-kutsuja kunnes se selviää. Kesken kirjoituksen luettu saldo on luku joka on juuri lakkaamassa olemasta totta, ja se päätyisi pelaajan ruudulle ikään kuin se olisi tila. Saman kierroksen eri paikkojen panokset saapuvat yhä yhdessä, kukin omalla transactionId:llään — siksi idempotenssitarkistuksenne on oltava atominen (8, sääntö 1), ja juuri se tekee päällekkäisistä kirjoituksista turvallisia.
Ставку, которую мы не смогли подтвердить, мы возвращаем, а не оставляем.A bet we could not confirm is given back, not kept.Una apuesta que no pudimos confirmar se devuelve, no se queda.Ein Einsatz, den wir nicht bestätigen konnten, wird zurückgegeben, nicht behalten.Panos jota emme voineet vahvistaa palautetaan, ei jätetä.
Игра выбрасывает ставку, вызов по которой не удался: место не зафиксировано, окно приёма ставок закрылось. Мы продолжаем слать эту ставку, пока вы не ответите, — и если ответ окажется «применено», игрок заплатил за раунд, которого у него не было. Поэтому мы возвращаем деньги откатом с reason: "void". Он уходит только после вашего вердикта по ставке, так что обогнать саму ставку он не может.
The game drops a bet whose call failed: no seat is recorded and the betting window closes behind it. We keep re-sending that bet until you answer — and if the answer turns out to be "applied", the player has paid for a round their game never had. So we give the stake back with a /rollback carrying reason: "void". It is sent only after your verdict on the bet, so it can never race the bet itself.
El juego descarta una apuesta cuya llamada falló: no se registra asiento y la ventana de apuestas se cierra tras ella. Nosotros seguimos reenviando esa apuesta hasta que usted responda — y si la respuesta resulta ser «aplicada», el jugador ha pagado por una ronda que su juego nunca tuvo. Así que devolvemos el importe con un /rollback que lleva reason: "void". Se envía solo después de su veredicto sobre la apuesta, de modo que nunca puede adelantarse a la apuesta misma.
Das Spiel verwirft einen Einsatz, dessen Aufruf fehlschlug: kein Platz wird verbucht, und das Einsatzfenster schließt sich dahinter. Wir senden diesen Einsatz weiter, bis Sie antworten — und stellt sich die Antwort als „angewendet“ heraus, hat der Spieler für eine Runde bezahlt, die sein Spiel nie hatte. Also geben wir den Einsatz mit einem /rollback mit reason: "void" zurück. Es wird erst nach Ihrem Urteil über den Einsatz gesendet und kann dem Einsatz selbst daher nie zuvorkommen.
Peli hylkää panoksen jonka kutsu epäonnistui: paikkaa ei kirjata ja panostusikkuna sulkeutuu sen perään. Me jatkamme tuon panoksen lähettämistä kunnes vastaatte — ja jos vastaus osoittautuu ”sovelletuksi”, pelaaja on maksanut kierroksesta jota hänen pelissään ei koskaan ollut. Siksi palautamme panoksen /rollback-kutsulla jossa on reason: "void". Se lähetetään vasta panosta koskevan tuomionne jälkeen, joten se ei voi koskaan ohittaa itse panosta.
/bet никогда не приходит после своего же /rollback.A /bet never arrives after its own /rollback.Un /bet nunca llega después de su propio /rollback.Ein /bet kommt nie nach seinem eigenen /rollback an./bet ei koskaan saavu oman /rollback-kutsunsa jälkeen.
Мы не откатываем ставку, исход которой нам неизвестен: неотвеченная ставка уходит повторно как та же самая ставка. Правило 4 в разделе 8 — это страховка на случай, если запрос задержало что-то между нами. We do not roll back a bet whose outcome we do not know; an unanswered bet is re-sent as the same bet. Rule 4 in section 8 is the belt for the case where something between us holds a request up anyway. No revertimos una apuesta cuyo desenlace no conocemos; una apuesta sin respuesta se reenvía como la misma apuesta. La regla 4 de la sección 8 es el cinturón para el caso en que algo entre nosotros retenga una petición de todos modos. Wir buchen keinen Einsatz zurück, dessen Ausgang wir nicht kennen; ein unbeantworteter Einsatz wird als derselbe Einsatz erneut gesendet. Regel 4 in Abschnitt 8 ist der Gürtel für den Fall, dass etwas zwischen uns eine Anfrage doch aufhält. Emme palauta panosta jonka lopputulosta emme tiedä; vastaamaton panos lähetetään uudelleen samana panoksena. Osion 8 sääntö 4 on varmistus sen varalle että jokin välillämme kuitenkin pidättelee pyyntöä.
13Лимиты и лестница ставокLimits and the stake ladderLímites y la escala de apuestasLimits und die EinsatzleiterRajat ja panosportaikko
Лимиты обеспечиваем мы, по числам, которые выбираете вы. По каждой валюте и каждой игре у нас лежат: Limits are ours to enforce, from values you choose. Per currency and per game we hold: Los límites los aplicamos nosotros, a partir de valores que elige usted. Por moneda y por juego guardamos: Die Limits durchzusetzen ist unsere Sache, mit Werten, die Sie wählen. Pro Währung und pro Spiel halten wir: Rajojen valvonta on meidän tehtävämme, teidän valitsemistanne arvoista. Valuutta- ja pelikohtaisesti säilytämme:
- лестница ставок — суммы, которые может выбрать игрок. Она же задаёт минимальную и максимальную ставку: всё, что вне её, отклоняется ещё до вашего кошелька;
- максимальный выигрыш на ставку — максимум, который может вернуть одна ставка. Именно на ставку, а не на раунд, и применяется он ограничением РАУНДА, а не урезанием выплаты — см. примечание ниже.
- a stake ladder — the amounts a player can pick. It is also the minimum and the maximum stake: anything outside it is refused before it reaches your wallet;
- a maximum win per bet — the most a single bet can return. Per bet, not per round, and applied by capping the ROUND rather than by trimming a payout — see the note below.
- una escala de apuestas — los importes que un jugador puede elegir. Es también la apuesta mínima y la máxima: cualquier cosa fuera de ella se rechaza antes de llegar a su monedero;
- una ganancia máxima por apuesta — lo máximo que puede devolver una sola apuesta. Por apuesta, no por ronda, y aplicada limitando la RONDA en lugar de recortar un pago — véase la nota de abajo.
- eine Einsatzleiter — die Beträge, die ein Spieler wählen kann. Sie ist zugleich Mindest- und Höchsteinsatz: alles außerhalb wird abgelehnt, bevor es Ihr Wallet erreicht;
- einen Höchstgewinn pro Einsatz — das Meiste, was ein einzelner Einsatz zurückgeben kann. Pro Einsatz, nicht pro Runde, und umgesetzt, indem die RUNDE begrenzt wird statt eine Auszahlung zu beschneiden — siehe die Anmerkung unten.
- panosportaikko — summat joista pelaaja voi valita. Se on myös pienin ja suurin panos: kaikki sen ulkopuolinen hylätään ennen kuin se saapuu lompakkoonne;
- enimmäisvoitto panosta kohden — eniten mitä yksi panos voi palauttaa. Panosta, ei kierrosta kohden, ja toteutettu rajoittamalla KIERROSTA eikä leikkaamalla maksua — katso alla oleva huomautus.
Пришлите нужные числа по каждой валюте — мы их выставим; поменять потом это конфигурация у нас, а не релиз. Отказать в ставке вы, разумеется, можете и сами — кодом 5.
Send us the numbers you want, per currency, and we set them; changing them later is configuration on our side, not a release. You may of course refuse a stake yourself with code 5.
Envíenos los números que quiera, por moneda, y los fijamos; cambiarlos después es configuración de nuestro lado, no una entrega. Por supuesto, usted puede rechazar una apuesta por su cuenta con el código 5.
Schicken Sie uns die gewünschten Zahlen, je Währung, und wir setzen sie; sie später zu ändern ist Konfiguration auf unserer Seite, kein Release. Sie können einen Einsatz natürlich auch selbst mit Code 5 ablehnen.
Lähettäkää meille haluamanne luvut valuutoittain, niin asetamme ne; niiden muuttaminen myöhemmin on konfiguraatio meidän puolellamme, ei julkaisu. Voitte tietysti torjua panoksen itsekin koodilla 5.
Как именно применяется максимальный выигрыш — ответ не тот, который напрашивается.How the maximum win is applied, because the answer is not the obvious one.Cómo se aplica la ganancia máxima, porque la respuesta no es la obvia.Wie der Höchstgewinn angewendet wird — denn die Antwort ist nicht die naheliegende.Miten enimmäisvoittoa sovelletaan, koska vastaus ei ole se ilmeinen.
Это не урезанная выплата и не принудительный автокэшаут. В момент постановки ставки точка краша раунда для этого игрока ограничивается значением max_win / ставка, и ракета просто разбивается там. Игрок видит обычный проигранный раунд на этом коэффициенте; ваш кошелёк получает обычный /win не выше кэпа — или не получает ничего. Нет выплаты, которую надо сверять с лимитом, и нет сообщения о том, что выигрыш урезали.
It is not a trimmed payout and not a forced cash-out. When a bet is placed, the round's crash point is capped for that player at max_win / stake, and the rocket simply crashes there. The player sees an ordinary losing round at that multiplier; your wallet receives an ordinary /win at or below the cap, or nothing at all. There is no payout to reconcile against a limit, and no message saying a win was reduced.
No es un pago recortado ni un cobro forzoso. Cuando se coloca una apuesta, el punto de crash de la ronda se limita para ese jugador a max_win / apuesta, y el cohete simplemente revienta ahí. El jugador ve una ronda perdedora corriente en ese multiplicador; su monedero recibe un /win corriente igual o inferior al tope, o nada en absoluto. No hay ningún pago que conciliar contra un límite, ni ningún mensaje diciendo que una ganancia se redujo.
Es ist keine beschnittene Auszahlung und kein erzwungener Cash-out. Wenn ein Einsatz platziert wird, wird der Crash-Punkt der Runde für diesen Spieler auf max_win / Einsatz begrenzt, und die Rakete stürzt dort einfach ab. Der Spieler sieht eine gewöhnliche verlorene Runde bei diesem Multiplikator; Ihr Wallet erhält ein gewöhnliches /win auf oder unter der Grenze, oder gar nichts. Es gibt keine Auszahlung, die gegen ein Limit abzugleichen wäre, und keine Meldung, dass ein Gewinn gekürzt wurde.
Se ei ole leikattu maksu eikä pakotettu kotiutus. Kun panos asetetaan, kierroksen kraatauspiste rajataan tälle pelaajalle arvoon max_win / panos, ja raketti yksinkertaisesti kraatta siihen. Pelaaja näkee tavallisen häviävän kierroksen tuolla kertoimella; lompakkonne saa tavallisen /win-kutsun rajalla tai sen alle, tai ei mitään. Mitään maksua ei tarvitse täsmäyttää rajaa vasten, eikä ole viestiä joka kertoisi voiton pienentyneen.
Потолок полёта может сработать раньше. Полёт в этой игре ограничен 1001×. Ставка, для которой ставка × 1001 меньше вашего максимального выигрыша, до кэпа не доходит вовсе. Несколько ставок в одном раунде делят самый строгий кэп: раунд держит НАИМЕНЬШИЙ кэп среди своих ставок. А если ставка равна максимальному выигрышу или больше, кэп упирается в 1.00× и раунд разбивается сразу — игрок проигрывает ставку, и это задуманное поведение.
The flight cap can bind first. This game's flight is capped at 1001×, so a stake small enough that stake × 1001 is below your maximum win never reaches the cap at all. Several bets in one round share the strictest cap: the round keeps the LOWEST cap among its bets. And if a stake is at or above the maximum win, the cap floors at 1.00× and the round crashes immediately — the player loses the stake, which is the intended behaviour.
El tope de vuelo puede llegar antes. El vuelo de este juego está limitado a 1001×, así que una apuesta lo bastante pequeña como para que apuesta × 1001 quede por debajo de su ganancia máxima nunca llega al tope. Varias apuestas en una misma ronda comparten el tope más estricto: la ronda se queda con el tope MÁS BAJO de entre sus apuestas. Y si una apuesta iguala o supera la ganancia máxima, el tope se hunde a 1,00× y la ronda revienta de inmediato — el jugador pierde la apuesta, que es el comportamiento buscado.
Die Flughöhengrenze kann zuerst greifen. Der Flug dieses Spiels ist auf 1001× begrenzt, ein Einsatz, der klein genug ist, dass Einsatz × 1001 unter Ihrem Höchstgewinn liegt, erreicht die Grenze also nie. Mehrere Einsätze in einer Runde teilen sich die strengste Grenze: die Runde behält die NIEDRIGSTE Grenze unter ihren Einsätzen. Und erreicht oder übersteigt ein Einsatz den Höchstgewinn, fällt die Grenze auf 1,00×, und die Runde stürzt sofort ab — der Spieler verliert den Einsatz, und das ist so beabsichtigt.
Lentokatto voi osua ensin. Tämän pelin lento on rajattu kertoimeen 1001×, joten niin pieni panos että panos × 1001 jää enimmäisvoittonne alle ei koskaan saavuta kattoa. Saman kierroksen useat panokset jakavat tiukimman katon: kierros pitää panostensa MATALIMMAN katon. Ja jos panos on enimmäisvoiton suuruinen tai suurempi, katto putoaa arvoon 1,00× ja kierros kraattaa heti — pelaaja menettää panoksen, ja se on tarkoitettu käytös.
10Чек-листChecklistLista de comprobaciónChecklisteTarkistuslista
Интеграция готова, когда выполняется всё перечисленное.Your integration is done when all of these hold.Su integración está terminada cuando se cumplen todos estos puntos.Ihre Integration ist fertig, wenn alle diese Punkte zutreffen.Integraationne on valmis kun kaikki nämä pitävät paikkansa.
/authс валидным токеном возвращает игрока, валюту и баланс./authwith a valid token returns the player, the currency and a balance./authcon un token válido devuelve el jugador, la moneda y un saldo./authmit einem gültigen Token liefert den Spieler, die Währung und einen Saldo./authkelvollisella tunnisteella palauttaa pelaajan, valuutan ja saldon./betуменьшает баланс ровно на сумму./betdecreases the balance by exactly the amount./betreduce el saldo exactamente en el importe./betverringert den Saldo genau um den Betrag./betvähentää saldoa täsmälleen summan verran./winувеличивает его ровно на сумму./winincreases it by exactly the amount./winlo aumenta exactamente en el importe./winerhöht ihn genau um den Betrag./winkasvattaa sitä täsmälleen summan verran.- Один и тот же
transactionIdдважды не двигает деньги дважды, и второй ответ — 110.The sametransactionIdtwice does not move money twice, and the second answer is 110.El mismotransactionIddos veces no mueve dinero dos veces, y la segunda respuesta es 110.DieselbetransactionIdzweimal bewegt kein Geld zweimal, und die zweite Antwort ist 110.SamatransactionIdkahdesti ei siirrä rahaa kahdesti, ja toinen vastaus on 110. /rollbackвосстанавливает баланс, а его повтор отвечает 110./rollbackrestores the balance, and a repeat of it answers 110./rollbackrestaura el saldo, y una repetición responde 110./rollbackstellt den Saldo wieder her, und eine Wiederholung antwortet 110./rollbackpalauttaa saldon, ja sen toisinto vastaa 110./winи/rollbackработают на просроченном токене./winand/rollbackwork with an expired token./winy/rollbackfuncionan con un token caducado./winund/rollbackfunktionieren mit einem abgelaufenen Token./winja/rollbacktoimivat vanhentuneella tunnisteella./rollbackнеизвестногоbetTransactionIdотвечает 7./rollbackof an unknownbetTransactionIdanswers 7./rollbackde unbetTransactionIddesconocido responde 7./rollbackeiner unbekanntenbetTransactionIdantwortet 7.TuntemattomanbetTransactionId:n/rollbackvastaa 7.- Ставка больше баланса отвечает 3, и баланс не меняется.A bet larger than the balance answers 3, and the balance is unchanged.Una apuesta mayor que el saldo responde 3, y el saldo no cambia.Ein Einsatz größer als der Saldo antwortet 3, und der Saldo bleibt unverändert.Saldoa suurempi panos vastaa 3, eikä saldo muutu.
/winс нулевой суммой принят.A zero-amount/winis accepted.Un/winde importe cero se acepta.Ein/winmit Betrag null wird angenommen.Nollan suuruinen/winhyväksytään.2.5на проводе — это 250 минорных единиц в вашем реестре, в обе стороны.2.5on the wire is 250 minor units in your ledger, both ways.2.5en el cable son 250 unidades menores en su libro mayor, en ambos sentidos.2.5auf der Leitung sind 250 Untereinheiten in Ihrem Hauptbuch, in beide Richtungen.2.5linjalla on 250 alayksikköä kirjanpidossanne, molempiin suuntiin./betс идентификатором, который вы уже откатили, не двигает денег и отвечает 110.A/betwhose id you have already rolled back moves nothing and answers 110.Un/betcuyo id ya ha revertido no mueve nada y responde 110.Ein/bet, dessen Kennung Sie bereits zurückgebucht haben, bewegt nichts und antwortet 110./betjonka tunnuksen olette jo palauttaneet ei siirrä mitään ja vastaa 110.- Запрос с неверным дайджестом в
Authотвергается.A request with a wrongAuthdigest is refused.Una petición con un resumenAuthincorrecto se rechaza.Eine Anfrage mit falschemAuth-Digest wird abgelehnt.Pyyntö jossa on vääräAuth-tiiviste hylätään.
Четвёртый и шестой — те, что падают в проде. Проверить их дёшево, а обнаружить дорого. Numbers 4 and 6 are the ones that fail in production. They are cheap to test and expensive to discover. Los números 4 y 6 son los que fallan en producción. Son baratos de probar y caros de descubrir. Die Nummern 4 und 6 sind die, die in Produktion scheitern. Sie sind billig zu testen und teuer zu entdecken. Kohdat 4 ja 6 ovat ne jotka pettävät tuotannossa. Niiden testaaminen on halpaa ja löytäminen kallista.
У нас есть эталонная реализация — попросите, если нужна.There is a reference implementation — ask if you want one.Hay una implementación de referencia — pídala si la quiere.Es gibt eine Referenzimplementierung — fragen Sie, wenn Sie eine möchten.Viitetoteutus on olemassa — pyytäkää jos haluatte sellaisen.
Это кошелёк, который реализует этот документ буквально и работает строго: неверный дайджест тела он отвергает, а не терпит, — так что ошибка в подписи всплывает сейчас, а не на боевом запуске. Он же умеет ронять ответ после того, как деньги двинулись: это тот случай, который решает, спишется у игрока один раз или два, и его не даст на заказ ни одна песочница. Скачиваемой сборки мы не раздаём: скажите, что она вам нужна, и мы поднимем такой кошелёк для вас и пришлём адрес с ключом. Но для проверки ВАШЕЙ стороны полезнее следующий пункт. It is a wallet that implements this document exactly and is strict: a wrong body digest is refused rather than tolerated, so a signature mistake shows up now instead of at go-live. It also drops the response after the money has moved — the case that decides whether a player is charged once or twice, and the one no sandbox gives you on demand. We do not hand out a download: say you want one and we will stand it up for you and send the address and a key. For checking YOUR side, though, the next item is the better tool. Es un monedero que implementa este documento al pie de la letra y es estricto: un resumen de cuerpo incorrecto se rechaza en lugar de tolerarse, así que un error de firma aparece ahora y no en la puesta en marcha. También descarta la respuesta después de que el dinero se haya movido — el caso que decide si a un jugador se le cobra una vez o dos, y el que ningún entorno de pruebas le da a demanda. No entregamos una descarga: diga que quiere uno y se lo levantamos, y le enviamos la dirección y una clave. Para comprobar SU lado, en cambio, el punto siguiente es mejor herramienta. Es ist ein Wallet, das dieses Dokument exakt umsetzt und streng ist: ein falscher Body-Digest wird abgelehnt statt toleriert, ein Signaturfehler zeigt sich also jetzt und nicht beim Go-live. Es verwirft außerdem die Antwort, nachdem das Geld bewegt wurde — der Fall, der entscheidet, ob ein Spieler einmal oder zweimal belastet wird, und der, den Ihnen keine Sandbox auf Zuruf liefert. Wir geben keinen Download heraus: sagen Sie, dass Sie eines wollen, und wir stellen es für Sie hin und schicken Adresse und Schlüssel. Um IHRE Seite zu prüfen, ist allerdings der nächste Punkt das bessere Werkzeug. Se on lompakko joka toteuttaa tämän dokumentin täsmälleen ja on tiukka: väärä rungon tiiviste hylätään eikä siedetä, joten allekirjoitusvirhe paljastuu nyt eikä käyttöönotossa. Se myös pudottaa vastauksen sen jälkeen kun raha on liikkunut — tapaus joka ratkaisee veloitetaanko pelaajalta kerran vai kahdesti, ja jota mikään hiekkalaatikko ei anna pyynnöstä. Emme jaa ladattavaa versiota: sanokaa että haluatte sellaisen, niin pystytämme sen teille ja lähetämme osoitteen ja avaimen. TEIDÄN puolenne tarkistamiseen seuraava kohta on kuitenkin parempi työkalu.
И мы прогоняем чек-лист по ВАШЕМУ кошельку.And we run the checklist against YOUR wallet.Y pasamos la lista de comprobación contra SU monedero.Und wir fahren die Checkliste gegen IHR Wallet.Ja me ajamme tarkistuslistan TEIDÄN lompakkoanne vasten.
Пришлите адрес тестового кошелька, тестовый токен и один просроченный — мы пройдём все двенадцать пунктов по вашему эндпоинту тем же кодом, который ходит к вам в проде. Он двигает одну ставку и возвращает её на место, а мы присылаем вам запрос и ответ по каждому шагу. Send us a test wallet URL, a test token and one expired token, and we walk all twelve items against your endpoint with the same code that talks to you in production. It moves a stake and puts it back, and we send you the request and the answer for every step. Envíenos una URL de monedero de pruebas, un token de prueba y un token caducado, y recorremos los doce puntos contra su endpoint con el mismo código que habla con usted en producción. Mueve una apuesta y la devuelve, y le enviamos la petición y la respuesta de cada paso. Schicken Sie uns eine Test-Wallet-URL, ein Testtoken und ein abgelaufenes Token, und wir gehen alle zwölf Punkte gegen Ihren Endpunkt durch, mit demselben Code, der in Produktion mit Ihnen spricht. Es bewegt einen Einsatz und gibt ihn zurück, und wir schicken Ihnen Anfrage und Antwort zu jedem Schritt. Lähettäkää meille testilompakon URL, testitunniste ja yksi vanhentunut tunniste, niin käymme kaikki kaksitoista kohtaa läpi päätepistettänne vasten samalla koodilla joka puhuu teille tuotannossa. Se siirtää panoksen ja palauttaa sen, ja lähetämme teille jokaisen vaiheen pyynnön ja vastauksen.
11Что прислать намWhat to send usQué enviarnosWas Sie uns schickenMitä lähetätte meille
| Базовый URL кошелькаWallet base URLURL base del monederoWallet-Basis-URLLompakon perus-URL | один; пути /auth, /bet, … допишем самиone; we append /auth, /bet, …una; nosotros añadimos /auth, /bet, …eine; wir hängen /auth, /bet, … anyksi; me lisäämme /auth, /bet, … |
| Общий ключShared keyClave compartidaGemeinsamer SchlüsselJaettu avain | для дайджеста телаfor the body digestpara el resumen del cuerpofür den Body-Digestrungon tiivistettä varten |
| Ваш идентификаторYour operator idSu identificador de operadorIhre BetreiberkennungOperaattoritunnuksenne | ляжет в partnerIdgoes in partnerIdva en partnerIdsteht in partnerIdmenee kenttään partnerId |
| Несколько ли брендов на одном кошелькеWhether you run several brands off one walletSi opera varias marcas desde un solo monederoOb Sie mehrere Marken über ein Wallet betreibenAjatteko useaa brändiä yhdellä lompakolla | если да — кладите бренд в ссылку и ждите его обратно как operatorIdif so, put the brand on the link and expect it back as operatorIdsi es así, ponga la marca en el enlace y espérela de vuelta como operatorIdwenn ja, setzen Sie die Marke in den Link und erwarten Sie sie als operatorId zurückjos kyllä, laittakaa brändi linkkiin ja odottakaa se takaisin kenttänä operatorId |
| ВалютыCurrenciesMonedasWährungenValuutat | какие обслуживает эта интеграцияwhich ones this integration servescuáles sirve esta integraciónwelche diese Integration bedientmitkä tämä integraatio palvelee |
| Каталожные id игрGame idsIds de juegoSpielkennungenPelitunnukset | ваш id для каждой нашей игры, если пользуетесь своимиyour catalogue id for each of our games, if you use your ownsu identificador de catálogo para cada uno de nuestros juegos, si usa los suyosIhre Katalogkennung für jedes unserer Spiele, falls Sie eigene verwendenluettelotunnuksenne kullekin pelillemme, jos käytätte omianne |
| Горизонт повторовRetry horizonHorizonte de reintentosWiederholungshorizontUudelleenlähetysten määräaika | сколько вы держите transactionId, прежде чем считаете операцию окончательной — мы подстроимся, чтобы не сдаться раньше васhow long you keep a transactionId before you consider it settled — we match it, so that we never give up before you docuánto tiempo conserva un transactionId antes de darlo por liquidado — lo igualamos, para no rendirnos nunca antes que ustedwie lange Sie eine transactionId aufbewahren, bevor Sie sie als erledigt ansehen — wir gleichen uns an, damit wir nie vor Ihnen aufgebenkuinka kauan säilytätte transactionId:n ennen kuin pidätte sitä selvitettynä — sovitamme sen, jotta emme koskaan luovuta ennen teitä |
| Тестовый кошелёкA test walletUn monedero de pruebasEin Test-WalletTestilompakko | его адрес и ключ, тестовый токен и один просроченный: это то, что нужно для прогона чек-листаits URL and key, a test token and one expired token: that is what the checklist run needssu URL y clave, un token de prueba y un token caducado: eso es lo que necesita la pasada de la lista de comprobaciónseine URL und sein Schlüssel, ein Testtoken und ein abgelaufenes Token: das braucht der Checklistenlaufsen URL ja avain, testitunniste ja yksi vanhentunut tunniste: sitä tarkistuslistan ajo tarvitsee |
| Лимиты ставокStake limitsLímites de apuestaEinsatzlimitsPanosrajat | лестница и максимальный выигрыш на ставку, по каждой валюте — см. 13the ladder and the maximum win per bet, per currency — see 13la escala y la ganancia máxima por apuesta, por moneda — véase 13die Leiter und der Höchstgewinn pro Einsatz, je Währung — siehe 13portaikko ja enimmäisvoitto panosta kohden, valuutoittain — katso 13 |
Если что-то из этого потом поменяется — всё это конфигурация на нашей стороне. Ни один пункт не требует деплоя. If any of it changes later, all of it is configuration on our side. None of it is a deploy. Si algo de esto cambia más adelante, todo ello es configuración de nuestro lado. Nada de ello es un despliegue. Wenn sich später etwas davon ändert, ist alles davon Konfiguration auf unserer Seite. Nichts davon ist ein Deployment. Jos jokin näistä muuttuu myöhemmin, kaikki se on konfiguraatiota meidän puolellamme. Mikään siitä ei ole julkaisu.