{ "shell": { "title": "彩票接入文档", "admin": "管理后台", "adminLogin": "管理后台" }, "nav": { "overview": "概览", "api": "接口", "ship": "发布", "home": "总览", "delivery": "接入交付", "quickstart": "快速开始", "fundamentals": "资金模型", "setup": "接入配置", "sso": "单点登录", "iframe": "iframe 协议", "wallet": "钱包网关", "transfer": "划转(参考)", "errors": "错误码", "troubleshooting": "联调排错", "golive": "上线清单", "operations": "运营手册", "adminGuide": "后台管理手册", "apiReference": "API 对接参考" }, "headers": { "component": ["组件", "职责", "实现方"], "convention": ["项", "规则"], "claim": ["字段", "类型", "必填", "说明"], "param": ["参数", "用途"], "methodPath": ["方法", "路径", ""], "query": ["参数", "类型", ""], "field": ["字段", "类型", "说明"], "code": ["错误码", "说明"], "http": ["状态码", "message", "原因"], "message": ["方向", "消息类型", "载荷"], "balance": ["字段", "账户", "说明"], "call": ["方向", "接口", "鉴权"], "sequence": ["步骤", "发起方", "说明"], "envMap": ["项", "后台接入站点", "主站配置项", "说明"], "account": ["账号", "密码", "site_player_id"], "contract": ["场景", "HTTP", "响应体"], "adminField": ["字段", "说明", "示例"], "handoffTable": ["项", "说明", "负责方"], "env": ["环境", "地址示例", "说明"], "envelopeTable": ["方向", "消息字段", "说明"], "faq": ["现象", "排查方向"] }, "pages": { "overview": { "title": "接入总览", "description": "面向主站开发/集成工程师。您需实现:JWT 签发 + 钱包网关;彩票提供 H5 与 API。", "roles": "职责划分", "flow": "业务链路", "e2eSequence": "端到端时序", "conventions": "通用约定", "readingOrder": "建议阅读顺序", "matrix": [ ["主站(客户)", "用户登录;服务端签发 JWT;实现钱包网关", "客户"], ["彩票 API(我方)", "验签 JWT、划转、下注、开奖、结算", "我方"], ["彩票 H5(我方)", "玩家界面;iframe 或 URL 跳转入场", "我方"] ], "flowItems": [ "用户在主站登录 → 主站服务端签发短效 JWT", "进入彩票 H5(iframe 嵌入或 URL ?token= 跳转)", "玩家在 H5 内「转入」→ 彩票回调主站扣款 → 彩票内加款", "玩家在 H5 内下注 / 派奖(使用彩票内余额)", "(可选)玩家在 H5 内「转出」→ 彩票回调主站加款" ], "e2eRows": [ ["1", "主站", "用户登录;服务端签发 JWT(含 site_code、site_player_id)"], ["2", "主站", "iframe 嵌入彩票 H5,或跳转 lottery_h5_base_url/?token="], ["3", "彩票 H5", "收到 JWT;调用 GET /api/v1/player/me 验签并自动建档"], ["4", "玩家", "在 H5 内点击「转入」"], ["5", "彩票 API", "服务端回调主站 POST /wallet/debit-for-lottery"], ["6", "主站钱包", "扣减 main_balance;返回 success: true"], ["7", "彩票 API", "彩票内余额增加"], ["8", "玩家", "在 H5 内下注 / 等待派奖"], ["9", "玩家", "(可选)在 H5 内点击「转出」"], ["10", "彩票 API", "回调主站 POST /wallet/credit-from-lottery"] ], "conventionRows": [ ["金额", "最小货币单位整数(minor),如 2000 = 20.00 NPR"], ["编码", "UTF-8 JSON"], ["时间", "JWT 使用 Unix 秒(iat / exp),建议 exp - iat ≤ 300 秒"], ["玩家 API 鉴权", "Authorization: Bearer {JWT}(主站签发,彩票验签)"], ["钱包网关鉴权", "Authorization: Bearer {wallet_api_key}(彩票回调时携带)"] ], "readingItems": [ "接入交付 — 确认双方交付物与环境地址", "快速开始 — 按步骤完成首次联调", "接入配置 — 后台建站与密钥映射", "单点登录 → iframe 协议 → 钱包网关", "联调排错 — 常见问题", "上线清单 — 生产发布检查" ] }, "delivery": { "title": "接入交付", "description": "联调开始前,请与商务/技术支持确认以下交付物。测试与生产环境须完全隔离。", "handoffScope": "接入范围(您需要做什么)", "weProvide": "我方提供", "youProvide": "客户需提供", "environment": "环境地址", "process": "典型接入流程", "note": "密钥(sso_jwt_secret、wallet_api_key)创建后仅展示一次,请立即安全保存。密钥仅保存在主站服务端,禁止写入前端或移动端。下列地址为 Tanumo 当前默认环境;客户独立部署时以商务交付为准。", "handoffRows": [ ["JWT 签发", "主站登录后由服务端签发 HS256 JWT,无「登录换票」接口", "客户"], ["钱包网关", "实现 balance / debit / credit 三个 HTTPS 接口", "客户"], ["iframe 或 URL 入场", "嵌入彩票 H5 或跳转并携带 JWT", "客户"], ["彩票 H5 + API", "玩法、划转、下注、开奖", "我方"], ["接入站点与密钥", "创建 site_code 并下发密钥", "我方(超管)"] ], "provideRows": [ ["site_code", "站点编码,写入 JWT"], ["sso_jwt_secret", "JWT 签名密钥(主站持有并签发)"], ["wallet_api_key", "彩票回调钱包网关时的 Bearer 密钥"], ["lottery_h5_base_url", "彩票 H5 入口(iframe src 或跳转地址);当前默认 https://front.tanumo.com"], ["lottery_api_base_url", "彩票 API 根地址(联调 curl);当前默认 https://lotterylaravel.tanumo.com"] ], "submitRows": [ ["wallet_api_url", "客户钱包网关 HTTPS 根地址(公网可达)"], ["iframe_allowed_origins", "主站 origin 白名单(iframe 模式必填,每行一个)"], ["测试账号", "若干 site_player_id 及初始 main_balance(联调用)"], ["出口 IP(如需)", "若网关有 IP 白名单,请索取彩票服务端出口 IP"] ], "environmentRows": [ ["彩票 API", "https://lotterylaravel.tanumo.com", "联调 curl:GET /api/v1/player/me"], ["彩票 H5 入口", "https://front.tanumo.com", "iframe / URL ?token= 跳转;钱包页示例 /wallet"], ["接入文档", "https://lotteryadmin.tanumo.com/docs/integration", "本文档(公开,无需登录)"], ["管理后台", "https://lotteryadmin.tanumo.com/admin", "超管登录;接入站点:配置 → 接入站点"], ["生产环境", "独立域名与密钥", "site_code、密钥、域名均不与联调共用"] ], "processSteps": [ "商务开通接入 → 我方超管创建「接入站点」并交付密钥与 H5 地址", "客户实现钱包三接口并部署到公网 HTTPS(联调可先内网穿透)", "客户在后台填入 wallet_api_url、iframe_allowed_origins,执行连通性测试", "客户实现 JWT 签发与 iframe postMessage(或 URL 跳转)", "按「快速开始」验收清单完成联调", "生产环境重新建站、换密钥、全链路复测后上线" ] }, "quickstart": { "title": "快速开始", "description": "假设已完成「接入交付」并拿到 site_code、密钥与 H5 地址。按下列步骤完成首次联调。", "prereq": "前置条件", "steps": "联调步骤", "acceptance": "验收清单", "note": "JWT 必须在主站服务端签发,禁止在前端硬编码 sso_jwt_secret。生产环境 wallet_api_url 须为公网 HTTPS。", "prereqItems": [ "已收到 site_code、sso_jwt_secret、wallet_api_key、lottery_h5_base_url", "主站已实现 GET /wallet/balance、POST /wallet/debit-for-lottery、POST /wallet/credit-from-lottery", "后台「接入站点」已填入 wallet_api_url 与 iframe_allowed_origins,连通性测试通过", "已准备至少一个测试 site_player_id 及足够 main_balance" ], "stepItems": [ "主站服务端实现 JWT 签发(见「单点登录」jsonwebtoken 示例)", "用 curl 自测:Bearer JWT 调用 GET https://lotterylaravel.tanumo.com/api/v1/player/me,应返回 code=0", "主站页面嵌入