API de Produtos Carteira única vs carteira de transferência
Carteira única vs carteira de transferência
Uma comparação técnica dos dois modelos de carteira usados para conectar o saldo do jogador de um operador a uma API de jogos de cassino: quem guarda o dinheiro, quais chamadas cruzam a rede durante uma aposta, como as falhas são recuperadas e o que você precisa construir do seu lado.
Em resumo
| Aspecto | Carteira única | Carteira de transferência |
|---|---|---|
| Custódia do saldo | O seu banco de dados guarda o único saldo. O provedor nunca guarda fundos de jogadores. | O provedor mantém um saldo de jogo separado. Os fundos entram e saem com chamadas de transferência. |
| Chamadas durante uma aposta | Cada aposta e prêmio dispara um callback servidor a servidor para você (saldo, débito, crédito, rollback). | Nenhuma. O jogo roda contra o saldo do lado do provedor. As chamadas acontecem apenas na transferência de entrada e de saída. |
| Disponibilidade necessária | Os seus endpoints da carteira devem responder a cada callback, normalmente em poucas centenas de milissegundos. Se estiverem fora do ar, o jogo para. | Necessária apenas para as transferências. As rodadas continuam se o seu sistema ficar offline por pouco tempo. |
| Modelo de consistência | O seu livro-razão é a fonte da verdade em tempo real. Apenas as rodadas de jogo precisam de conciliação, não os saldos. | Dois livros-razão que só concordam nos limites das transferências. Exige conciliação no nível das transferências. |
| Recuperação de falhas | Os timeouts são resolvidos com novas tentativas idempotentes e chamadas de rollback identificadas pelo ID da transação. | As transferências têm duas fases: pendente e depois sucesso ou falha. Uma consulta de status resolve resultados desconhecidos. |
| Esforço de integração | Maior. Você constrói e opera um serviço de callbacks de baixa latência com idempotência e um livro-razão. | Menor. Você chama três ou quatro endpoints REST, sem tráfego de entrada para proteger ou escalar. |
| Experiência do jogador | Um saldo, sem etapa de transferência. Serve para bônus, jogo entre produtos e exibição do saldo ao vivo. | Os fundos entram antes de jogar e saem depois. Adiciona um pequeno atraso e o risco de saldo preso se o jogador sair no meio da sessão. |
| Adequação típica | Operadores com carteira ou plataforma próprias e controle rigoroso de fundos e promoções. | Operadores que querem um lançamento rápido ou que não têm um serviço de carteira em tempo real. |
Carteira única (seamless)
No modelo de carteira única (seamless), o seu sistema é a carteira. Quando um jogador faz uma aposta, a API da SSG chama o seu endpoint de callback, você altera o saldo no seu próprio livro-razão e responde com o novo saldo. Nenhum fundo sai do seu banco de dados.
Fluxo de chamadas
- Lançamento: o seu backend pede à SSG uma URL de jogo com um ID de jogador e um token de sessão.
- Aposta: a cada rodada a SSG chama debit com um txId único. Você verifica os fundos, grava a linha no livro-razão e retorna o novo saldo.
- Prêmio: a SSG chama credit com o pagamento (que pode ser zero) da mesma rodada.
- Falha: se uma chamada expirar, a SSG tenta de novo com o mesmo txId e, após o limite de tentativas, envia rollback.
Métodos de callback (ilustrativos)
| Método | Finalidade | Campos principais | Idempotente |
|---|---|---|---|
balance | Retorna o saldo atual do jogador. | playerId, currency | Sim (somente leitura) |
debit | Registra uma aposta: subtrai o valor. | playerId, txId, roundId, gameId, amount, currency | Por txId |
credit | Liquida um prêmio: soma o valor. | playerId, txId, roundId, amount, currency | Por txId |
rollback | Cancela um débito ou crédito anterior após um erro. | txId, refTxId | Por txId |
Exemplo de requisição de débito
{
"method": "debit",
"playerId": "p_839201",
"txId": "tx_20261007_000184",
"roundId": "r_77f3a1",
"gameId": "slots_fruit_01",
"currency": "MYR",
"amount": "2.50",
"ts": 1791338577,
"sign": "hex(HMAC-SHA256(secret, canonical))"
}Exemplo de resposta
{
"status": "OK",
"txId": "tx_20261007_000184",
"balance": "97.50",
"currency": "MYR"
}
// errors: INSUFFICIENT_FUNDS, PLAYER_NOT_FOUND,
// DUPLICATE_TX (return original result), INTERNAL_ERRORRegras que o seu serviço de carteira deve seguir
- Idempotência
- Um débito ou crédito repetido com o mesmo txId deve retornar o resultado original e não deve movimentar dinheiro de novo. Garanta isso com um índice único em txId.
- Gravação atômica no livro-razão
- Verifique o saldo, insira a linha no livro-razão e atualize o saldo em uma única transação de banco de dados, para que duas apostas simultâneas nunca estourem o saldo.
- Rollback antes do débito
- Um rollback pode chegar para um txId que você nunca viu porque o débito original expirou. Guarde um registro marcador para que um débito tardio com esse txId seja rejeitado.
- Orçamento de latência
- Mire um p99 abaixo de 500 ms, incluindo a rede. Mantenha o caminho do callback em uma leitura indexada e uma gravação, e deixe consultas de relatórios fora dele.
- Formato de valores
- Trate os valores como strings decimais ou unidades menores inteiras. Nunca use ponto flutuante e valide a moeda contra a conta do jogador.
- Bônus e rodadas grátis
- Uma rodada grátis é um débito de 0 seguido de um crédito do prêmio. Mantenha os saldos promocionais separados do saldo em dinheiro no seu livro-razão.
- Segurança
- Verifique uma assinatura HMAC-SHA256 sobre a requisição canônica, rejeite carimbos de data/hora antigos, libere apenas os IPs de origem da SSG e exija TLS 1.2 ou superior.
- Conciliação
- Compare os relatórios diários de rodadas da SSG com o seu livro-razão por roundId. As diferenças apontam callbacks ou rollbacks perdidos.
Carteira de transferência
No modelo de carteira de transferência, o provedor mantém um saldo de jogo para cada jogador. O seu backend move fundos para dentro antes de jogar e para fora depois. Durante o jogo não há callbacks para o seu sistema, então você só precisa de chamadas REST de saída.
Fluxo de chamadas
- Transferência de entrada: o seu backend chama transferIn com um txId único e o valor. O resultado é PENDING ou SUCCESS.
- Jogo: inicie o jogo. Todas as apostas e prêmios alteram o saldo do lado do provedor, sem callbacks para você.
- Transferência de saída: quando o jogador sair, chame transferOut para o saldo total e credite-o de volta no seu próprio livro-razão em caso de SUCCESS.
- Resultado desconhecido: se uma chamada de transferência expirar, consulte getTransferStatus com o mesmo txId antes de fazer qualquer outra coisa.
Métodos da API (ilustrativos)
| Método | Finalidade | Campos principais | Idempotente |
|---|---|---|---|
transferIn | Move fundos da sua carteira para o saldo de jogo do jogador. | playerId, txId, amount, currency | Por txId |
transferOut | Move fundos do saldo de jogo de volta para a sua carteira. | playerId, txId, amount | all | Por txId |
getBalance | Lê o saldo de jogo do jogador. | playerId | Sim (somente leitura) |
getTransferStatus | Retorna PENDING, SUCCESS ou FAILED para um txId. | txId | Sim (somente leitura) |
Regras que o seu backend deve seguir
- Um txId por intenção
- Gere o txId antes da primeira chamada e reutilize-o em cada nova tentativa. Nunca crie um novo txId até que o status do anterior seja conhecido.
- Debite primeiro o seu livro-razão
- Na transferência de entrada, reserve o valor no seu livro-razão antes de chamar a SSG e depois confirme ou libere quando o status for final.
- Varra os saldos presos
- Execute uma tarefa que encontre jogadores com saldo de jogo e sem sessão ativa e transfira esse saldo para fora. Isso cobre jogadores que fecham o navegador no meio da sessão.
- Apostas acumuladas e relatórios
- Como você não vê as apostas ao vivo, calcule o giro, o rollover de bônus e os limites de risco a partir dos relatórios de rodadas obtidos da SSG, não dos callbacks.
- Conciliação
- Confira cada transferência de entrada e saída com os registros da SSG por txId e dispare um alerta para qualquer PENDING mais antigo que o seu timeout.
- Segurança
- Assine as requisições com HMAC-SHA256, chame apenas por TLS 1.2 ou superior, guarde as chaves de API em um cofre de segredos e restrinja quais dos seus servidores podem chamar a SSG.
Cenários de falha
| Cenário | Carteira única | Carteira de transferência |
|---|---|---|
| Timeout de rede | Durante uma aposta, a SSG tenta de novo o mesmo txId e depois envia rollback após o limite de tentativas. Você precisa ser idempotente. | Apenas as transferências são afetadas. Consulte getTransferStatus com o mesmo txId e depois aja. |
| O seu sistema está fora do ar | Os jogadores não conseguem iniciar nem continuar rodadas. As rodadas abertas sofrem rollback. | Os jogadores continuam jogando com o saldo de jogo que já têm. Novas transferências ficam bloqueadas. |
| Requisição duplicada | Retorne a resposta guardada para esse txId e não altere nada. | Retorne o resultado guardado para esse txId e não altere nada. |
| O jogador se desconecta no meio da rodada | A rodada termina no provedor e o crédito é enviado normalmente. | A rodada termina e os fundos ficam no saldo de jogo até uma transferência de saída ou a tarefa de varredura. |
| Divergência de saldo | Geralmente um callback ou rollback perdido. Encontrada comparando os relatórios de rodadas por roundId. | Geralmente uma transferência presa ou pendente. Encontrada comparando as transferências por txId. |
Qual escolher
Escolha a carteira única se
- Você já opera um serviço de carteira ou livro-razão em tempo real.
- Você precisa de um saldo único entre sportsbook, cassino e promoções.
- Você precisa de dados de apostas ao vivo para risco, rollover de bônus ou limites de jogo responsável.
- A sua equipe consegue operar um serviço de baixa latência com alta disponibilidade.
Escolha a carteira de transferência se
- Você quer lançar rápido com o mínimo de engenharia.
- Você ainda não tem um serviço de carteira em tempo real.
- Você prefere apenas chamadas de saída, sem um callback público para proteger.
- Janelas curtas de saldo preso são aceitáveis e você consegue executar uma tarefa de varredura.
Muitos operadores começam na carteira de transferência para entrar no ar e depois passam para a carteira única quando o seu próprio serviço de carteira estiver pronto. Pergunte-nos como a troca é feita em etapas.
Checklist de integração
- Índice único em txId e handlers idempotentes para toda chamada que movimenta dinheiro
- Verificação de assinatura HMAC, tolerância de carimbo de data/hora e lista de IPs permitidos
- Valores seguros para decimais e validação de moeda
- Testes de timeout, nova tentativa e rollback no sandbox, incluindo uma nova tentativa tardia
- Tarefa diária de conciliação por roundId (única) ou txId (transferência)
- Monitoramento e alertas: latência dos callbacks, taxa de erros, transferências pendentes, saldos presos
Fale com um engenheiro de integração
Podemos guiar os seus engenheiros pelo sandbox e ajudar a escolher o modelo que serve para a sua plataforma. A integração é garantida em menos de sete dias.
Falar com vendas por e-mail Conversar no Telegram Voltar à API de Produtos
sales@ssggaming.com