如何通过API连接提供商:handshake、认证、sandbox
文章全文
1)集成卡: 从申请到生产
阶段:1.Presale和Due Diligence:Jurprovers,Geo/许可证,内容兼容性和RG策略。
2.Handshake and security: sandbox access,密钥交换(mTLS/HMAC),注册于Schema Registry。
3.Tehdizain:确认域模型(sessions/bets/settlements/events),等效性,错误代码。
4.Sandbox集成:钱包仿真器/PSP/RG,测试玩家,"雨"场景和拍摄。
5.认证:强制性测试运行,协议签名,负载和混乱案例。
6.Staging/UAT:没有真钱的战斗混战,金丝雀交通。
7.Go-Live: rota key,包括幻灯片,SLO监控,事后准备。
2)Handshake: 身份验证,授权,跟踪
2.1共享秘密和漏洞
mTLS (per brand/region证书)和/或Client Credentials OAuth2。
HMAC/EdDSA请求主体签名(添加非重复)。
Скоупы: `sessions:write`, `bets:write`, `settlements:write`, `events:publish`.
2.2强制性标题
"X-Trace-Id"是端到端跟踪。
`X-Brand-Id`, `X-Region`, `X-Provider-Id`.
"X-Idempotency-Key"-适用于所有写作操作。
2.3健康检查(代码前)
GET /health
→ 200 {"status":"ok","version":"1.7.2","time":"2025-10-23T10:00:00Z"}3)Sandbox: 那里有什么以及如何使用它
随行人员的组成: 与现实和谐相处:- 与销售中的电路和等级限制相似。
- 超时,交付双打,订单外部-嵌入仿真按钮。
p_demo_1 (EUR), p_demo_2 (USD), p_blocked_rg (denied), p_low_balance4)资源模型和最低合同
4.1会议的设立
POST /v1/sessions
{
"player_id":"p_demo_1",  "game_id":"studio:slot_forge_02",  "currency":"EUR",  "locale":"de-DE"
}
→ 201 {"session_id":"s_456","expires_at":"2025-10-23T19:10:00Z"}4.2费率授权(hold)
POST /v1/bets/authorize
Headers: X-Idempotency-Key: bet_r_8c12_1
{
"session_id":"s_456",  "bet_id":"b_001",  "round_id":"r_8c12",  "amount":{"amount":2.00,"currency":"EUR"}
}
→ 200 {"status":"authorized","hold_id":"h_zz1"}4.3个设置(回合结果)
POST /v1/bets/settle
Headers: X-Idempotency-Key: settle_r_8c12_1
{
"bet_id":"b_001",  "round_id":"r_8c12",  "win":{"amount":14.60,"currency":"EUR"},  "bonus_state":{"in_bonus":true,"freespins_left":7}
}
→ 200 {"status":"credited","settlement_id":"st_77"}4.4错误(单一方桉)
409
{"code":"DUPLICATE","message":"Bet already authorized","retryable":false,"trace_id":"tr_a1b2"}5)事件和计划: 没有它,认证就不会通过
基本拓扑:Avro/JSON Schema示例(片段'bet。settled`):
json
{
"event_type":"bet.settled",  "schema_version":"1.2.0",  "event_id":"uuid",  "occurred_at":"2025-10-23T16:21:05Z",  "tenant_id":"brand-7",  "region":"EU",  "player_id":"p_demo_1",  "trace_id":"tr_a1b2",  "payload":{
"round_id":"r_8c12",   "bet":{"amount":1.00,"currency":"EUR"},   "win":{"amount":14.60,"currency":"EUR"},   "in_bonus":true
},  "idempotency_key":"bet_r_8c12_1"
}规则:反向兼容的演变,"重复和后期事件"测试,通过"tenant_id/player_id"进行分期。
6)集成认证: 确切验证的内容
6.1个功能脚本(最小值)
使用相同的"X-Idempotency-Key"重复请求"authorize/settle" →相同的响应。
令状:"设置"到达时没有"authorize" →正确故障。
钱包/网络下降时滚回链。
RG脚:自我排斥/损失/时间限制→禁止出价。
奖金/vager:按游戏类型,max bet,截止日期进行贡献。
6.2载荷
预算中的p95'bet/settle'(例如:'<200-300 ms'),没有"风暴"。
事件流达到BI ≤ 5分钟。
6.3溷沌桉例
交付双打,outbox/CDC延迟,"拉开"该地区,部分设置。
6.4成果文件
带有timcods/trace-id的测试协议。
SLO报告(latency/error/lag)。
安全摘要(按键、旋转、访问、Vault/HSM)。
7)恢复和迁移
HTTP:"/v1/……"在路上,事件:主体中的"schema_version"。
SemVer: minor-添加可选字段;大调-仅通过新前缀"/v2/"。
Deprecation头条:"Deprecation","Sunset",dashboard中使用的镜子。
信息标志:过渡时期事件的"双重写作"("v1"和"v2")。
8)安全性和合规性
mTLS+签名S2S,短寿命令牌,限量购买。
零信任:网络策略,按品牌/区域密钥。
数据驻留和PII:该地区的存储和记录;RLS/掩码。
WORM审核:更改限值、RTP配置文件、大奖。
RG/AML:利率/支付同步停止信号;SAR/STR报告。
9)入门: 发射清单
在启用流量之前
Sandbox秘密的旋转→ prod密钥。
包括p95/p99 dashbords,error-rate,queue-lag,settle-lag。
Alerta SLO:突破latency/error/lag,爆发"DUPLICATE/IDEMPOTENCY_MISMATCH"。
DR计划:RPO ≤ 5分钟,RTO ≤ 30分钟;"红色按钮"-停止新会话。
加那利群岛
1-5%的观众/游戏/地理;违反SLO时自动回滚。
24-72小时后监控,leder/报告对账。
10)反模式(红旗)
发布绕过outbox/CDC的事件。
在写作操作上缺乏"X-Idempotency-Key"。
在DB中手动编辑平衡/设置。
单键到多个品牌/地区。
BI和OLTP战斗数据库之上的监管报告。
零降解:供应商的倒闭使钱包/平台陷入困境。
11)支票单
对于提供商
- 始终发送"X-Trace-Id"和"X-Idempotency-Key"。
- 我支持使用相同的密钥进行重复,没有副作用。
- 根据Registry的计划发布事件;保存"schema_version"。
- 实现了backoff和重复数据消除回程。
- RG脚和奖金限制在实时时执行。
- 可用性和秘密-按品牌/地区,轮换设置。
对于平台
- 所有现金路径上的Outbox/CDC;端到端跟踪。
- SLO-dashbords: p95/99, error-rate, queue-lag, settle-lag.
- Deprecation/Sunset过程,迁移事件的双字母。
- DR/xaoc演习,事件管理和验尸。
- 降级模式:"no new sessions",禁用促销/头奖。
12)集成的"最小"花花公子(TL;DR)
1.签署NDA/合同 →签发sandbox访问和计划。
2.交换mTLS/HMAC证书;开始"provider_id"。
3.商定最低限度的终点:"sessions"、"bets/authorize"、"bets/settle"、"rollback"。
4.连接到Sandbox总线和Registry;赶走功能/溷乱桉例。
5.交出认证协议:logi, trace-id, SLO报告。
6.将钥匙切换到prod,打开金丝雀,观察SLO。
7.将发布后的指标和"课程"提交到changelog。
提供商的成功连接不仅是API,而且是一个受控的过程:安全的handshake,现实的sandbox,严格的认证,可观察性和清晰的兼容性规则。遵循所描述的不变性(等效性,outbox/CDC,RG/AML脚本,SLO和DR),您可以加快集成,避免发生金钱事件并获得可预测的发布-对玩家,监管机构和企业来说没有惊喜。
