如何通過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),您可以加快集成,避免發生金錢事件並獲得可預測的發布-對玩家,監管機構和企業來說沒有驚喜。
