# 環球給方舟呼叫的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)設定值