# 環球給方舟呼叫的API --- ```javascript= /* [PROD]API範例:http://5f.six.local/ArkWebApi/CheckAndGetBetOdds [STG]API範例:http://5f.presix.local/ArkWebApi/CheckAndGetBetOdds [DEV/QAT]API範例:http://192.168.51.70:64121/ArkWebApi/CheckAndGetBetOdds */ ``` --- ## API 清單 1. AddOrUpdateSellMember:[添加/更新遠程補貨公司的補貨會員](##1.-AddSellMember:添加遠程補貨公司的補貨會員) 2. Bet:[到遠程補貨公司下注](##2.-Bet:到遠程補貨公司下注) 3. CheckAndGetBetOdds:[取得遠程補貨公司會員賠率](##3.-CheckAndGetBetOdds:取得遠程補貨公司會員賠率(用於多補/多賠率玩法,在收付統計右邊)) 4. CheckAndGetMemberBetsParam:[取得遠程補貨公司會員賠率(用於多補/多賠率玩法,在收付統計右邊)](##4.-CheckAndGetMemberBetsParam:取得遠程補貨公司會員賠率) 5. CheckBetsConfirmed:[在遠程補貨公司,查詢此注單是否已經下注成功](##5.-CheckBetsConfirmed:在遠程補貨公司,查詢此注單是否已經下注成功) 6. DeleteSellMember:[刪除遠程補貨公司的補貨會員](##6.-DeleteSellMember:刪除遠程補貨公司的補貨會員) 7. GetSellMemberInfo:[取得遠程補貨公司補貨會員資訊](##7.-GetSellMemberInfo:取得遠程補貨公司補貨會員資訊) --- ## 1. AddSellMember:添加遠程補貨公司的補貨會員 > POST: 前台/ArkWebApi/AddSellMember 呼叫時攜帶參數: | 參數 | 類型 | 說明 | 範例 | | ---------------- | ---- | ------------ | -------------------------- | | SystemCode | STRING | 添加公司身分KEY k11_{topmanageId}_{companyId} | `K11_3_52` | | Account | STRING | 補貨會員帳號 | `"test01"` | | Password | STRING | 補貨會員密碼 | `"123fff"` | 資料結果內容: | 參數 | 類型 | 說明 | 範例 | | ---------------- | ---- | ------------ | -------------------------- | | SystemName | STRING | 系統名稱 | `環球公司1` | | Account | STRING | 帳號 | `abc123` | | AccountStatus | STRING | 帳號狀態 | `啟用` | | Handicaps | ARRAY | 會員盤口 | {"1":"A","2":"B","3":"C"} | IsLocked | INT | 是否被鎖定 | `true` | | IsPaused | INT | 是否被停押 | `true` | | IsDisabled | INT | 是否被停用 | `true` | | url | STRING | 域名 |`"http://192.168.51.68:10400"`| | Balance | DECIMAL | 餘額 | 984524.11| | Status | INT | 狀態 | 1:`成功` | | Token | STRING | Token, 此為資料取得識別Key | `"A9A9EAB6EBED909C9C9F4C19"` | 成功範例: ```json= { "Status":1, "Data":{ "SystemName":"環球公司1", "Account": "abc123", "AccountStatus": "啟用", "Handicaps": {"1":"A","2":"B","3":"C"}, "IsLocked": false, "IsDeleted": false, "IsPaused": false, "IsDisabled": false, "url": "http://192.168.51.68:10400", "Balance": 984524.11, "Status": 1, "Token": "A9A9EAB6EBED909C9C9F4C191" } } ``` 失敗範例: ```json= { "Status":2, "Data":"用户名或密码不正确!" } } ``` ## 2. Bet:到遠程補貨公司下注 > POST: 前台/ArkWebApi/Bet 呼叫時攜帶參數: | 參數 | 類型 | 說明 | 範例 | | ---------------- | --------| ---------------| ---------| | PeriodCode | string | 期號 | `"22098"`| | FromCompanyBetId | int | 來源補貨公司注單ID| `2001` | | BetData | object[]| 注單列表 | `備註1` | | HandicapId | int | 盤口ID | `1` | | ApiToken | string | 補貨Token,建立時產生 | `"A9A9EAB6EBED909C9C9F4C19"`| #### 備註1(無子注單玩法) ```json= [ { "BetTypeId": 11, "BetName": "正码-12", "BetItems": [ 12 ], "BetMoney": 60.0, "Odds": "7.22", "SubBet": null } ] ``` #### 備註1(有子注單玩法) ```json= [ { "BetTypeId": 53, "BetName": "二肖连不中-牛,兔", "BetItems": [ 61, 63 ], "BetMoney": 100.0, "Odds": "3.75", "SubBet": [ { "BetItems": [ 61, 63 ], "BetMoney": 100.0, "Odds": "3.75" } ] } ] ``` | 回傳 | 類型 | 說明 | 範例 | | ------------------ | ------- | ------------------- | ---------- | | Status | int | 狀態(成功:1, 失敗:0) | `1` | | Message | string | 市場類型名稱 | `"下注成功"` | | BetData | object[]| 注單列表 | | #### 回傳結果: ```json= { "Status": 1, "Message": "下注成功", "BetData": [ { "HandicapId": 1, "BetId": 4291, "BetName": "正码-01", "BetItemOddsStr": "7.22", "OddsStr": "7.22", "MaxWin": 633.3, "BetMoney": 100.0, "WaterRate": 0.113 } ] } ``` ## 3. CheckAndGetBetOdds:取得遠程補貨公司會員賠率(用於多補/多賠率玩法,在收付統計右邊) > POST: 前台/ArkWebApi/CheckAndGetBetOdds URL範例: http://5f.six.local/ArkWebApi/CheckAndGetBetOdds 對應:【環球】[收付統計] <=>【方舟】[盈虧統計]頁面 目的:获取盘口赔率 (收付統計右側、取多賠率顯示時) - Call API Request 時攜帶參數: | 參數 | 類型 | 說明 | 範例 | | ------------- | -------- | ---------------------------------------------- | -------------------------------------- | | | BetInfo | object[] | 環球的下注資訊,陣列、多筆。參考`備註1` | | | ApiToken | string | 補貨Token,建立時產生 | `5DB80B` | | GuidSignature | string | GUID碼,Log比對用。請用`備註2`代碼 ) | `8a7a15fd-0066-4893-86fd-acc734486d2d` | | PostTime | string | 執行時間,環球六有設定超時4秒。請用`備註3`代碼 | `2022-12-01 14:52:59.315` | - API Response 如下: | 回傳參數 | 類型 | 說明 | 範例 | | -------- | -------- | --------------------------- | ---- | | Status | int | 返回的消息格式。參考`備註4` | 1 | | Data | object[] | 返回賠率格式。參考`備註5` | | - API Response json 如下(過長,進行縮排) ```json= { "Status":1, "Data":[ {"BetTypeId":1,"BetItemId":32,"HandicapId":1,"Odds":40.48,"SellCompanyId":0,"Status":1,"Message":null}, {"BetTypeId":1,"BetItemId":29,"HandicapId":1,"Odds":40.48,"SellCompanyId":0,"Status":1,"Message":null}, {"BetTypeId":1,"BetItemId":2,"HandicapId":1,"Odds":40.48,"SellCompanyId":0,"Status":1,"Message":null}, {"BetTypeId":1,"BetItemId":11,"HandicapId":1,"Odds":40.48,"SellCompanyId":0,"Status":1,"Message":null} ] } ``` #### 備註1 - 以下是BetInfo Json參數說明 | 參數 | 類型 | 說明 | 範例 | | ---------- | ---- | ------------ | ---- | | BetTypeId | int | 玩法類型ID | 1 | | BetItemId | int | 投注項目ID | 32 | | HandicapId | int | 盤口ID (0~9) | 0 | - BetInfo Json範例 ```json= [ { "BetTypeId": 11, "BetItemId": 6, "HandicapId": 0 }, { "BetTypeId": 11, "BetItemId": 5, "HandicapId": 0 }, { "BetTypeId": 11, "BetItemId": 4, "HandicapId": 0 }, { "BetTypeId": 11, "BetItemId": 3, "HandicapId": 0 }, { "BetTypeId": 11, "BetItemId": 2, "HandicapId": 0 }, { "BetTypeId": 11, "BetItemId": 1, "HandicapId": 0 } ] ``` #### 備註2 ```csharp= Guid.NewGuid().ToString(); ``` #### 備註3 ```csharp= DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") ``` #### 備註4 ```csharp= /// <summary> /// 返回的消息格式: /// Status:0=保留,1=成功 /// </summary> public enum APIReturnStatus { Reserved = 0, Success = 1, PeriodClosed = 2, PeriodError = 3, HandicapError = 4, SellCompanyError = 5, InputDataError = 6, SellSubCompanyError = 7, Unknown = 500 } ``` #### 備註5 - 以下是Data 賠率返還的 Json參數說明 | 參數 | 類型 | 說明 | 範例 | | ------------- | ------- | ----------------------------- | ---------------- | | BetTypeId | int | 玩法類型ID | 1 | | BetItemId | int | 投注項目ID | 32 | | HandicapId | int | 盤口ID (0~9) | 0 | | Odds | decimal | 賠率 | 40.48 | | SellCompanyId | int | 補貨公司Id | 0 | | Status | int | API狀態碼。同`備註4` | 2 | | Message | string | 當Status不為1時,提供錯誤資訊 | `当前期数未开盘` | ## 4. CheckAndGetMemberBetsParam:取得遠程補貨公司會員賠率 > POST: 前台/ArkWebApi/CheckAndGetMemberBetsParam URL範例: http://5f.six.local/ArkWebApi/CheckAndGetMemberBetsParam 對應:【環球】[收付統計][即時注單] <=>【方舟】[盈虧統計][即時注單]頁面 目的:點擊單一補貨、多補按鈕時,呼叫Web API獲取公司該玩法投項的賠率 - Call API Request 時攜帶參數: | 參數 | 類型 | 說明 | 範例 | | ------------- | -------- | ------------------------ | ------------- | | HandicapId | int | 盤口ID (0~9) | 0 | | BetItemGroup | object[] | 投項群,參考`備註6` | | | ApiToken | string | 補貨Token,建立時產生 | `5DB80B` | - API Response 如下: | 回傳參數 | 類型 | 說明 | 範例 | | -------- | -------- | --------------------------- | ---- | | Status | int | 返回的消息格式。參考`備註4` | 2 | | Data | object[] | 返回賠率格式。參考`備註7` | | - API Response json 如下( 正碼-11 ~ 15 範例) ```json 正碼-11 ~ 15 範例 { "Status": 1, "Data": [ { "SellCompanyId": 100, "SellSubCompanyId": 0, "SellCompanyName": "100", "SellMemberId": 123, "SellAccount": "test02", "HandicapId": 1, "HandicapName": "A", "BetTypeId": 11, "BetItemIds": [ 11 ], "OddsStr": "7.22", "WaterRate": 0.113, "Odds1": 7.22, "MinBetMoney": 1.0, "MaxBetMoney": 30000.0, "SortNumber": 24, "Status": 1, "Message": null }, { "SellCompanyId": 100, "SellSubCompanyId": 0, "SellCompanyName": "100", "SellMemberId": 123, "SellAccount": "test02", "HandicapId": 1, "HandicapName": "A", "BetTypeId": 11, "BetItemIds": [ 12 ], "OddsStr": "7.22", "WaterRate": 0.113, "Odds1": 7.22, "MinBetMoney": 1.0, "MaxBetMoney": 30000.0, "SortNumber": 24, "Status": 1, "Message": null }, { "SellCompanyId": 100, "SellSubCompanyId": 0, "SellCompanyName": "100", "SellMemberId": 123, "SellAccount": "test02", "HandicapId": 1, "HandicapName": "A", "BetTypeId": 11, "BetItemIds": [ 13 ], "OddsStr": "7.22", "WaterRate": 0.113, "Odds1": 7.22, "MinBetMoney": 1.0, "MaxBetMoney": 30000.0, "SortNumber": 24, "Status": 1, "Message": null }, { "SellCompanyId": 100, "SellSubCompanyId": 0, "SellCompanyName": "100", "SellMemberId": 123, "SellAccount": "test02", "HandicapId": 1, "HandicapName": "A", "BetTypeId": 11, "BetItemIds": [ 14 ], "OddsStr": "7.22", "WaterRate": 0.113, "Odds1": 7.22, "MinBetMoney": 1.0, "MaxBetMoney": 30000.0, "SortNumber": 24, "Status": 1, "Message": null }, { "SellCompanyId": 100, "SellSubCompanyId": 0, "SellCompanyName": "100", "SellMemberId": 123, "SellAccount": "test02", "HandicapId": 1, "HandicapName": "A", "BetTypeId": 11, "BetItemIds": [ 15 ], "OddsStr": "7.22", "WaterRate": 0.113, "Odds1": 7.22, "MinBetMoney": 1.0, "MaxBetMoney": 30000.0, "SortNumber": 24, "Status": 1, "Message": null } ] } ``` - API Response json 如下( 三中二-12,13,14 與 三中二-12,22,23 與 三中二-35,36,37 範例 ) ```json 三中二-12,13,14 與 三中二-12,22,23 與 三中二-35,36,37 範例 { "Status": 1, "Data": [ { "SellCompanyId": 500, "SellSubCompanyId": 0, "SellCompanyName": "A10", "SellMemberId": 539, "SellAccount": "test004", "HandicapId": 1, "HandicapName": "A", "BetTypeId": 51, "BetItemIds": [ 12, 13, 14 ], "OddsStr": "20.02,123", "WaterRate": 0.15300, "Odds1": 20.02000, "MinBetMoney": 2.00000, "MaxBetMoney": 10000.00000, "MinItemCount": 1, "MaxItemCount": 1, "PeriodNo": "20221130335", "IsOpen": "true", "SortNumber": 1, "Status": 1, "Message": null }, { "SellCompanyId": 500, "SellSubCompanyId": 0, "SellCompanyName": "A10", "SellMemberId": 539, "SellAccount": "test004", "HandicapId": 1, "HandicapName": "A", "BetTypeId": 51, "BetItemIds": [ 12, 22, 23 ], "OddsStr": "20.02,123", "WaterRate": 0.15300, "Odds1": 20.02000, "MinBetMoney": 2.00000, "MaxBetMoney": 10000.00000, "MinItemCount": 1, "MaxItemCount": 1, "PeriodNo": "20221130335", "IsOpen": "true", "SortNumber": 1, "Status": 1, "Message": null }, { "SellCompanyId": 500, "SellSubCompanyId": 0, "SellCompanyName": "A10", "SellMemberId": 539, "SellAccount": "test004", "HandicapId": 1, "HandicapName": "A", "BetTypeId": 51, "BetItemIds": [ 35, 36, 37 ], "OddsStr": "20.02,123", "WaterRate": 0.15300, "Odds1": 20.02000, "MinBetMoney": 2.00000, "MaxBetMoney": 10000.00000, "MinItemCount": 1, "MaxItemCount": 1, "PeriodNo": "20221130335", "IsOpen": "true", "SortNumber": 1, "Status": 1, "Message": null } ] } ``` #### 備註6 - 以下是BetItemGroup Json參數說明 | 參數 | 類型 | 說明 | 範例 | | ---------- | ----- | ----------- | ---- | | BetTypeId | int | 玩法類型ID | 1 | | BetItemIds | int[] | 投注項目IDs | [12] | ```json { "BetTypeId": 11, "BetItemIds": [11] }, { "BetTypeId": 11, "BetItemIds": [12] }, { "BetTypeId": 11, "BetItemIds": [13] }, { "BetTypeId": 11, "BetItemIds": [14] }, { "BetTypeId": 11, "BetItemIds": [15] } ``` #### 備註7 - 以下是Data 賠率返還的 Json參數說明 | 參數 | 類型 | 說明 | 範例 | | ---------------- | ------- | ----------------------------- | ---------------- | | SellCompanyId | int | 補貨公司Id | 100 | | SellSubCompanyId | int | 補貨的分公司ID ※給K11永久為0 | 0 | | SellCompanyName | string | 補貨公司設定名稱 | `100` | | SellMemberId | int | 補貨會員Id | 123 | | SellAccount | string | 補貨會員帳號 | `test02` | | HandicapId | int | 盤口ID (0~9) | 1 | | HandicapName | string | 盤口ID 對應的盤口英文 | `A` | | BetTypeId | int | 玩法類型ID | 11 | | BetItemIds | int[] | 投注項目IDs | [11] | | OddsStr | string | 賠率字符串 | 7.22 | | WaterRate | decimal | 退水 | 0.113 | | Odds1 | string | 赔率1 | 7.22 | | MinBetMoney | string | 投注限額-單注最小 | 1.0 | | MaxBetMoney | string | 投注限額-單注最大 | 30000.0 | | MinItemCount | int | 最小投注項 | 1 | | MaxItemCount | int | 最大投注項 | 1 | | SortNumber | string | 公司間補貨設定的排序順序 | 24 | | Status | int | API狀態碼。同`備註4` | 2 | | Message | string | 當Status不為1時,提供錯誤資訊 | `当前期数未开盘` | | PeriodNo | string | 期数 | `20221130335` | | IsOpen | bool | 是否開盘 | `true` | ## 5. CheckBetsConfirmed:在遠程補貨公司,查詢此注單是否已經下注成功 > POST: 前台/ArkWebApi/CheckBetsConfirmed > 呼叫時攜帶參數: | 參數 | 類型 | 說明 | 範例 | | ------------- | -------- | ---------------------------------------------- | -------------------------------------- | | PeriodCode | string | 期號     | `"22098"` | | BetCompanySellIds | string | 補貨注單IDs | `"1001,1002,1003"` | ApiToken | string | 補貨Token,建立時產生 | `"A9A9EAB6EBED909C9C9F4C19"`| #### 回傳結果: ```javascript= // 備註:Item1:失敗的補貨注單,Item2:已確認的補貨注單 ``` ```json= { "Status": 1, "Data": { "Item1": [], "Item2": [ { "BetCompanySellId": 5, "HandicapId": 1, "BetTypeId": 11, "BetItemIds": "1", "BetName": "正码-01", "BetMoney": 100.0, "MemberWaterRate": 0.113, "OddsStr": "7.22", "BetItemOddsStr": "7.22" }, { "BetCompanySellId": 6, "HandicapId": 1, "BetTypeId": 11, "BetItemIds": "1", "BetName": "正码-01", "BetMoney": 100.0, "MemberWaterRate": 0.113, "OddsStr": "7.22", "BetItemOddsStr": "7.22" }, { "BetCompanySellId": 7, "HandicapId": 1, "BetTypeId": 11, "BetItemIds": "11", "BetName": "正码-11", "BetMoney": 100.0, "MemberWaterRate": 0.113, "OddsStr": "7.22", "BetItemOddsStr": "7.22" } ] } } ``` ## 6. DeleteSellMember:刪除遠程補貨公司的補貨會員 > POST: 前台/ArkWebApi/DeleteSellMember 呼叫時攜帶參數: | 參數 | 類型 | 說明 | 範例 | | ---------------- | ---- | ------------ | -------------------------- | | Token | STRING | Token | A9A9EAB6EBED909C9C9F4C19 | 回傳內容: 此只有成功或失敗 成功範例: ```json= { "Status":1 } ``` 失敗範例: ```json= { "Status":2, "Data":"补货会员不存在!" } } ``` ## 7. GetSellMemberInfo:取得遠程補貨公司補貨會員資訊 > GET: 前台/ArkWebApi/GetSellMemberInfo 呼叫時攜帶參數: | 參數 | 類型 | 說明 | 範例 | | -----------------| ------| ---------------| -------------------------- | | Token | STRING | Token | `A9A9EAB6EBED909C9C9F4C19` | | 回傳參數 | 類型 | 說明 | 範例 | | --------------| ------- | ------------ | ---------------------------| | SystemCode | STRING | 添加公司身分KEY | `K11_3_52`| | SystemName | STRING | 系統名稱 | `環球公司1` | | Account | STRING | 帳號 | `abc123` | | AccountStatus | STRING | 帳號狀態 | `啟用` | | Handicaps | ARRAY | 會員盤口 | {"1":"A","2":"B","3":"C"} | IsLocked | BOOL | 是否被鎖定 | `true` | | IsDeleted | BOOL | 是否被刪除 | `true` | | IsPaused | BOOL | 是否被停押 | `true` | | IsDisabled | BOOL | 是否被停用 | `true` | | url | STRING | 域名 |`"http://192.168.51.68:10400"`| | Balance | DECIMAL | 餘額 | 984524.11| | Status | INT | 狀態 | 1:`成功`;其他為錯誤 | 成功範例: ```json= { "Status":1, "Data":{ "SystemCode":"K11_3_52", "SystemName":"環球公司1", "Account": "abc123", "AccountStatus": "啟用", "Handicaps": {"1":"A","2":"B","3":"C"}, "IsLocked": false, "IsDeleted": false, "IsPaused": false, "IsDisabled": false, "url": "http://192.168.51.68:10400", "Balance": 984524.11, "Status": 1 } } ``` 失敗範例: ```json= { "Status":2, "Data":"补货会员不存在!" } } ``` #### 討論事項及反饋 【2022/12/02 跨系統公司間補貨 API,token討論】 1.GetSellMemberInfo 多回傳 餘額? 2.api3, api4 回傳限額資訊 3.api3, api4 考慮回傳玩法停壓狀態 4.apis 期號部分,不由呼叫者傳入,改由返回參數帶上期號 5.api3,api4 回傳多盤口 6.api4 SortNumber 不需要此參數 7.api1,輸入參數 companyid => system_code => "k11_{topmanageId}_{companyId}" 8.api1 return apitoken 9.api3,api4 取賠時,針對四全中回傳 min/max , other bettype set 0 10.CheckBetsConfirmed 可能會多傳 RefBetId --- #### 討論事項反饋結果 - 2022/12/07 2.api3, api4 回傳限額資訊 => 好的,會增加該玩法限額 3.api3, api4 考慮回傳玩法停壓狀態 => 直接下注不用傳玩法停押(符合當前兩邊的做法) 5.api3,api4 回傳多盤口 => 要多盤口請用api4,api4已是回傳多盤口賠率,最佳賠率要自己再從返回的值呈現 6.api4 SortNumber 不需要此參數 => 可以,K11不用帶過來,我們會調整API自動帶上(文件已調整) 8.統一叫ApiToken 9.api3,api4 取賠時,針對四全中回傳 min/max , other bettype set 0 => 不可以寫在一起,應該有一支API直接告訴你這間公司當前4全中玩法的限制範圍,而非耦合在取賠率API,系統設定與取賠率是兩件事情 因此會在增加一隻API回傳四全中(min/max)設定值