# 充值系統 - SP Define
# 發送充值物品
## SP_SendIAPItem
1. 發送的同時寫交易紀錄, 周/月卡紀錄, 限購紀錄
- 資料庫: `RYRechargeDB`
### 輸入參數
| 參數 | 型別 | 必填 | 註解 |
|:----------------- |:------------- |:---- |:----------------------------------------------------------------- |
| @UserID | INTEGER | Y | 玩家ID |
| @IAPOrderID | NVARCHAR(50) | Y | 平台那邊的訂單ID |
| @IAPProductID | NVARCHAR(200) | Y | 產品ID |
| @IAPPurchaseToken | NVARCHAR(200) | Y | 平台那邊的購買憑證 |
| @IsTestOrder | BIT | Y | 是否為測試購買, 0: 否(真實購買), 1: 是(測試購買) |
### 輸出參數
| 參數 | 型別 | 註解 |
| -------------------- | ------------- | ------------ |
| @OutputResultMessage | NVARCHAR(255) | 執行結果訊息 |
| @OutputRedDotNotify | TINYINT | 是否需要紅點通知, 0:否, 1:是 |
---
# 領取周/月卡物品
## SP_ClaimSubscribeItem
- 資料庫: `RYRechargeDB`
### 輸入參數
| 參數 | 型別 | 必填 | 註解 |
|:---------- |:------- | ---- |:------------ |
| @UserID | INTEGER | Y | 玩家ID |
| @ProductID | BIGINT | Y | 商品的流水號 |
### 輸出參數
| 參數 | 型別 | 註解 |
| -------------------- | ------------- | ------------ |
| @OutputResultMessage | NVARCHAR(255) | 執行結果訊息 |
---
# 充值商城 - 兌換代幣商品
## SP_ExchangeTokenProduct
- 資料庫: `RYTreasureDB`
### 輸入參數
| 參數 | 型別 | 必填 | 註解 |
|:--------------- |:------- | ---- |:-------------------------------------------------------------------------------------------------------------------------------------------------- |
| @UserID | INTEGER | Y | 玩家ID |
| @OsType | TINYINT | Y | 平台資訊1:Android, 2:IOS |
| @TokenProductID | INTEGER | Y | 商品ID(RYTreasureDB.GameStoreTokenProduct) |
| @ExchageUnits | INTEGER | N | 要兌換的單位, 預設1, 假設TokenProductID的商品代表 5鑽換1票, 那這就是一個單位, 兩個單位的意思就是 10鑽換2票, 三個單位的意思就是 15鑽換3票, 依此類推 |
### 輸出參數
| 參數 | 型別 | 註解 |
| -------------------- | ------------- | ------------ |
| @OutputResultMessage | NVARCHAR(255) | 執行結果訊息 |
---
# 根據代幣匯率表兌換
## SP_ExchangeToken
- 資料庫: `RYTreasureDB`
### 輸入參數
| 參數 | 型別 | 必填 | 註解 |
|:------------------ |:------- | ---- |:------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| @UserID | INTEGER | Y | 玩家ID |
| @SourceTokenTypeID | INTEGER | Y | 來源的類型, 1:獎券/2:鑽石/3:初級門票/4:中級門票/5:高級門票/99:金幣, 對應RYTreatureDB -> GameStoreTokenType |
| @TargetTokenTypeID | INTEGER | Y | 目標的類型, 1:獎券/2:鑽石/3:初級門票/4:中級門票/5:高級門票/99:金幣, 對應RYTreatureDB -> GameStoreTokenType |
| @ExchageUnits | INTEGER | N | 要兌換的單位, 預設1, 假設現在兌換匯率為 1鑽換100金幣, 一個單位的意思就是 5鑽換50金, 兩個單位的意思就是 10鑽換100金, 三個單位的意思就是 15鑽換150金, 依此類推 |
---
# 查詢玩家限購紀錄
## SP_CheckUserLimitBuyRecord
- 資料庫: `RYTreasureDB`
### 輸入參數
| 參數 | 型別 | 必填 | 註解 |
|:---------- |:------- | ---- |:------ |
| @UserID | INTEGER | Y | 玩家ID |
| @ProductID | INTEGER | Y | 產品ID (IAPProduct/IAPSubscribeProduct/TokenProduct 的 流水號ID) |
| @ProductType | SMALLINT | Y | 商品類型 1:一般充值商品/2:訂閱型商品/3:代幣商品|
### 輸出參數
| 參數 | 型別 | 註解 |
|:-------------------- | ------------- |:-------------- |
| @OutputResultMessage | NVARCHAR(255) | 執行結果訊息 |
| @OutputRemainBuyTimes | INTEGER | 剩餘可購買次數 |
---
# 錯誤訊息列表
| 參數 | 型別 |
| ---- | --------------------------- |
| 0 | 成功 |
| 3000 | SP程式錯誤 |
| 3001 | 找不到用戶 |
| 3002 | 用戶已被停用 |
| 3013 | 操作權限錯誤 |
| 3014 | 請求參數錯誤 |
| 3018 | 沒任何符合的獎勵/獎勵已領取 |
| 3019 | REPEAT_REQUEST, 重複請求 |
| 3020 | 促銷商品 - 不在促銷時段 |
| 3021 | 周/月卡 - 已經買過了 |
| 3022 | 已達限購次數上限 |
| 3023 | 發送請求失敗 |
| 3024 | DB Query Fail. |
| 3025 | Get AccessToken Fail |