活動、洗碼 ============ [TOC] ## 系統架構 以舊皇為核心,整合異質技術子系統`.NET` + `PHP` + `Java` + `NodeJS` ...互相以API聯繫擴充,構成系統的子系統群。 ```mermaid erDiagram H1 ||--|| External : ext H1 ||--|| Internal : int External ||--o{ Finance : external External ||--|{ Campaign : external Internal ||--|{ Member : internal Internal ||--|{ Report : internal Internal ||--|{ GameProvider : internal H1 { subsys Hierarchy subsys Member subsys GameProvider api Campaign api Finance } Member { member Player member Agent member Affiliate } Campaign { subsys Campaign subsys Rolling } Finance{ api Deposit api Withdraw } Report{ service Finance service Winlose service Commission } GameProvider{ service W1 service RG } ``` ## 活動流程 前提 活動種類分為先贈分、後贈分 不能同時參加活動,減少套利風險。 規則 1. 流水型 > 活動期間的流水達到門檻為通過 2. 過招型 > 活動餘額達到門檻即為通過 主動參舉型 被動參與型 > 充值 n 倍碼量 後贈分用途為: > 1. 舊帶新,推薦人需達成 n位下線達成門檻後才贈 > 2. 抽獎券 > 3. 隔日贈 (返水、隔日 隔週 隔月) > api 要加贈金類 不用算rolling,舊帶新類 > 4. 龍虎榜 (日榜 週榜(7個日榜最高) 月榜(日冠次數最多,必滿28天,平手平分獎金)) H1可能因匯總帳無法抓出最高分 > 5. 累積贏分榜 先贈分用途為: > 1. 註冊贈 > 2. 首儲贈 > 3. 全平台、特定種類、特定遊戲的流水、贏分、輸分 通過門檻: > 1. 活動點數(報名點 + 活動點)歸零 > 2. 達成指定目標 重點事項 會員儲值被動參加充值過流水 1. 會員能參加幾次,有上限,無上限 (例,一天參加一次 最多參加五次) 2. 參加前需要綁卡選項 3. 可下分上限 (玩家要出資的 建議不設上限,玩家沒出資的 建議設上限) 4. 參加流程,提示本金、贈金、通過條件 5. 儲n送m,老帶新、限遊戲(電子) 6. 登記制或查詢制都可做到,查詢制要加限制避免被衝爆(ex: 回覆30min內有變化的會員) ### 活動參加流程 ```mermaid sequenceDiagram actor pl as 會員 participant h1 as 官網 participant cpf as 活動前台 participant cp as 活動API pl->>+h1 : 進入活動頁面 h1->>cp : 取得活動列表跳轉連結 cp-->>h1 : 返回活動連結 包含JWT h1-->>pl : 跳轉嵌入頁面 alt 瀏覽活動列表 pl->>cpf : 瀏覽活動列表 cpf->>+cp : 檢查參加資格 cp->>+h1 : 查詢參加資格需要的資料 h1-->>-cp : 返回參考資料 cp-->>-cpf : 返回活動列表 cpf-->>pl : 顯示活動列表 end alt 參加活動 pl->>cpf : 選定參加活動 cpf->>cp : 登記活動 cp-->>cpf : resp cpf-->>pl : resp cp->>h1 : 活動優惠上分 end ``` ### 站長設定活動 ```mermaid sequenceDiagram actor ag as 代理 participant h1 as 代理後台 participant cpb as 活動後台 participant cp as 活動API ag ->> h1 : 進入活動管理系統 h1 ->> cp : 取得管理系統跳轉連結 cp -->> h1 : 返回活動管理系統連結 包含JWT h1 -->> ag : 跳轉活動管理系統 ag ->> cpb : 跳轉 ``` ### 更新流程 * 查詢型 ```mermaid sequenceDiagram participant h1 as 官網 participant cp as 活動 cp ->> h1 : 詢問會員活動必要資料 h1 -->>+ cp : 返回資料 cp ->>- cp : 更新狀態 ``` * 登記型 ```mermaid sequenceDiagram actor pl as 會員 participant h1 as 官網 participant gs as 遊戲 participant cp as 活動 pl->>h1 : 進入遊戲 pl->>gs : 下單 pl->>h1 : 離開遊戲 h1->>gs : 拉注單排程 gs-->>h1 : resp h1->>cp : 登記流水贏分輸分充值 note over h1, cp: {memberID, reportDatetime,<br/> turnovers: [{gameID, turnover}, ...],<br/> winnings: [{gameType, gameID, win}, ...],<br/> loses: [{gameID, lose}, ...]} cp-->>h1 : 通過/未通過 ``` ### 充值流程 ```mermaid sequenceDiagram participant fp as 代收系統 actor pl as 會員 participant h1 as 官網 participant h1s as Server pl ->> h1 : 使用充值功能 h1 -->> pl : 渠道選擇頁面 alt 人工處理 pl ->> h1 : 選擇人工處理 h1 -->> pl : 回應匯款資訊 pl ->> h1 : 提交資訊 else 代收系統 pl ->> h1 : 選擇代收系統 h1 -->> pl : 跳轉地址 alt 支付流程 pl ->> fp : 跳轉處理 fp ->> h1s : 成功回調 end end h1s ->>+ h1s : 開立洗碼單 h1s ->>- h1s : 會員上分 ``` ### 提款流程 ```mermaid sequenceDiagram actor pl as 會員 participant h1 as 官網 participant cp as 活動 participant h1b as 後台 actor ag as 代理/客服/會計/Robot participant nb as 網銀 pl ->> h1 : 提款 h1 ->> cp : 查詢活動保留點數 cp -->> h1 : 保留點數 h1 -->> pl : 可提款餘額 pl ->> h1 : 提交提款單 h1 ->> h1b : 提示提款單請求 h1 -->> pl : 提交成功等待審核 alt 客服作業 ag ->> h1b : 客服審核(處理中) end alt 會計作業 ag ->> h1b : 會計處理 ag ->> nb : 轉帳 ag ->> h1b : 設置為完成 end ``` ## API 從舊皇發生的視角 ### 進入 Incoming #### /api/promotion/records/:playerID/:begin 從`begin`起始時間,取得`PlayerID`資料,匯總有效壓分、匯總贏分、匯總輸分、匯總充值 #### /api/:provider/rewards 參與活動時贈金回調 Method: **POST** Header: **content-type: application/json** Request: ```json { payload: { "@state", state: 0, out_trade_no: "AA6BF5D0-FD4B-4E78-A2E4-6DA712C4A692", // 交易代號 trade_no: "3E5C3FFA-146D-4660-A601-7B265256175A", // 支付系統服務單據號 ts: 1657497660000, // 交易時間戳(ms) amount: 500, // 金額 正數為充值 負數為提取 request_amount: 500, ip: "123.45.67.89" // 使用者 IP }, signature: "7807f21c7bae619bca329d9944900458" } ``` ### 外出 Outcoming #### /passports/agent 取得跳轉到活動管理界面的連結或api使用的token ```json { payload: { agent_id: "20CCA0D9-5C45-45AA-A6AD-4EEB89B97079", agent_name: "Agent name", lang: "th-TH", ts: 1657497660000 }, signature: "80752c3932f430102b14dfb7d9a4eb5e" } ``` #### /passports/player 取得玩家用的token, `agentID` `playerID` ```json { payload: { agent_id: "0CCA0D9-5C45-45AA-A6AD-4EEB89B97079", agent_name: "Agent name", user_id: "014A5FE4-ED31-4020-A929-51FE9D4EFAD6", user_name: "User name", out_trade_no: "AA6BF5D0-FD4B-4E78-A2E4-6DA712C4A692", callback_url: "https://api.myhost.com/api/WireTransferRespond/<provider>", lang: "th-TH", ts: 1657497660000 }, signature: "77521395828ff826401214ebf98c1161" } ``` #### /promotions/ 取得`agentId`底下的活動列表,並附帶`playerId`的參與狀況與進度 相關資訊由jwt提供 #### /promotions/:ID 參加活動,系統對當前jwt的會員生成一筆對這個活動的參加記錄 需帶入資料 `agentId` `playerId` `rewardUrl` #### /records 由平台主動登錄玩家記錄,含`有效投注` `總贏分` `總輸分` ```json { payload: { user_id: "014A5FE4-ED31-4020-A929-51FE9D4EFAD6", user_name: "User name", meta: { date_registered: "2022-10-19 10:23:45", first_deposit: 1000, descendants: 9, }, records: [ {genre: "summary", provider: "platform", type: "all", game: "all", turnover: 100000, netWin: 5000, win: 5500, lose: -500}, {genre: "specific", provider: "jdb", type: "slot", ...values}, {genre: "specific", provider: "jdb", type: "casino", ... ] } } ``` ## 洗碼模組 目的在開發成子系統,提供主系統附屬功能,並適當分擔主系統資料庫負擔。 資料取得模式希望可用登記式 ### DB(選項) 資料庫版本: Postgress 用途: 這個DB(查詢式) ```mermaid erDiagram t_member ||--o{ t_rolling_accumulated : extends t_rolling_accumulated }|--|{ t_configurations : use t_rolling_accumulated { string member_id string agent_id string rolling_id number rolling_target number rolling_accumulated int status datetime begin_at datetime update_at datetime finish_at } t_configurations { string key string value string comment } ``` #### 洗碼狀態 | status | 資料表 | key | 說明 |---- |---- |---- |---- | | t_configurations | rolling_status.rolling | 洗碼中 | | t_configurations | rolling_status.completed | 已完成 | | t_configurations | rolling_status.canceled | 已取消 #### 洗碼類型 | status | 資料表 | key | 說明 |---- |---- |---- |---- | | t_configurations | rolling_type.deposit | 洗碼中 | | t_configurations | rolling_type.withdraw | 已完成 | | t_configurations | rolling_type.reward | 贈金 | | t_configurations | rolling_type.rolling | 洗碼 ### API ### /rollings/agent/:agent_id/setting `post` 設定代理參數,多一層加權值(預設1倍),對充值要產生的洗碼目標 只對後續的洗碼生效, 可以用於洗碼加倍限期活動 ```json { payload: { agent_id, ts, }, signature, } ``` #### /rollings/member `get` 取得所有會員 ```json { records: [ {status, member_id, target, rolled}, {status, member_id, target, rolled}, //... ], pagination: { total_rows, limits, page, pages } } ``` #### /rollings/member/:member_id `get` 取得會員洗碼狀態 > response > [status: 洗碼狀態](#洗碼狀態) ```json { status, member_id, target, rolled, } ``` #### /rollings/member/:member_id `post` 調整會員洗碼量(充值、提取、贈金、有效壓分) ```json { payload: { type, amount, ts, }, signature, } ``` > [type: 洗碼類型](#洗碼類型) #### /rollings/member/:member_id/force_cancel `post` 強制取消當前洗碼單 ```json { payload: { reason: "string", ts: 1234567890, }, signature: "string", } ```