diff --git a/.gitignore b/.gitignore index ce1ebbd..6d425c2 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ migrate_working_dir/ pubspec.lock # Android +**/android/key.properties **/android/**/gradle-wrapper.jar **/android/.gradle **/android/captures/ diff --git a/README.md b/README.md index a934e7d..c2131b3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# MagiEvery AI - Flutter 应用 +# PetsHero - Flutter 应用 基于 `design/MagiEveryAI-AB` 设计图实现的 AI 图像/视频生成应用。 diff --git a/android/app/build.gradle b/android/app/build.gradle index 7af8182..9e36992 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -12,6 +12,12 @@ if (localPropertiesFile.exists()) { } } +def keystoreProperties = new Properties() +def keystorePropertiesFile = rootProject.file('key.properties') +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) +} + def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' @@ -48,13 +54,22 @@ android { versionName flutterVersionName } + signingConfigs { + release { + keyAlias keystoreProperties['keyAlias'] + keyPassword keystoreProperties['keyPassword'] + storeFile file(keystoreProperties['storeFile']) + storePassword keystoreProperties['storePassword'] + } + } + buildTypes { debug { // 允许 HTTP 连接本地代理(手机无法直连域名时) manifestPlaceholders = [usesCleartextTraffic: "true"] } release { - signingConfig signingConfigs.debug + signingConfig signingConfigs.release manifestPlaceholders = [usesCleartextTraffic: "false"] } } @@ -63,6 +78,7 @@ android { dependencies { implementation 'com.google.android.gms:play-services-ads-identifier:18.1.0' implementation 'com.android.installreferrer:installreferrer:2.2' + implementation 'androidx.appcompat:appcompat:1.7.0' } flutter { diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 4369cb2..6452503 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -4,9 +4,9 @@ + android:icon="@mipmap/ic_launcher"> ", // AES(原始path) → Base64 "power_level": "", // AES("POST"或"GET") → Base64 - "quest_rank": "", // AES(映射后的Header字段名JSON) → Base64 - "battle_score": "", // AES(映射后的参数名JSON) → Base64 + "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 + "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 - "billing_addr": "<每次请求随机 Base64>", // 噪音 - "utm_term": "<每次请求随机 Base64>", // 噪音 - "cluster_id": "<每次请求随机 Base64>", // 噪音 - "lsn_value": "<每次请求随机 Base64>", // 噪音 - "accuracy_val": "<每次请求随机 Base64>", // 噪音 - "dir_path": "<每次请求随机 Base64>" // 噪音 + "billing_addr": "<随机4-8位字母数字,AES加密→Base64>", // 噪音 + "utm_term": "<随机4-8位字母数字,AES加密→Base64>", // 噪音 + "cluster_id": "<随机4-8位字母数字,AES加密→Base64>", // 噪音 + "lsn_value": "<随机4-8位字母数字,AES加密→Base64>", // 噪音 + "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>", // 噪音 + "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 } ``` > 注意: 即使原始接口为 GET(无请求体),走代理后也统一使用 POST,b 参数仍需传入 V2 包装后的空业务体。 -> 噪音 key 的值为每次请求随机生成的 Base64 字符串(模拟 AES 密文外观),服务端会忽略。 +> 噪音 key 的值为随机 4-8 位字母数字,AES 加密后 Base64 编码,每次请求重新生成,服务端会忽略。 ## V2 包装结构 @@ -77,12 +77,12 @@ } } }, - "roar": "<每次请求随机生成8位字母数字组合>", - "clash": "<每次请求随机生成8位字母数字组合>", - "thunder": "<每次请求随机生成8位字母数字组合>", - "rumble": "<每次请求随机生成8位字母数字组合>", - "howl": "<每次请求随机生成8位字母数字组合>", - "growl": "<每次请求随机生成8位字母数字组合>" + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" } ``` @@ -126,6 +126,83 @@ } ``` +V2 完整请求体: + +``` +// recomends — 获取推荐提示词 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "htc17rrCpG+d9Lj6Lh5iy3BmR/52yLIsJdjM7/IFXgo=", // AES(/v1/image/prompt/recomends) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": [ + { + "constrain": "", // tag + "ledger": "" // prompt + } + ] // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + ### 2. 设备登录(快速登录) `POST /v1/user/fast_login` | 鉴权: 需要 @@ -166,7 +243,10 @@ "sidekick": { // data "surge": "", // extConfig (string) 客户端界面配置下发 "accolade": "", // type (string) 类型 - "evolve": {}, // appFbConfig (object) 应用FB配置 + "evolve": { // appFbConfig (object) 应用FB配置 + "fbClientId": "", // fbClientId (string) Facebook应用ID + "fbClientToken": "" // fbClientToken (string) Facebook客户端Token + }, "retrospect": "", // usign (string) 用户签名 "navigate": "", // countryCode (string) 国家代码 "conquer": "", // creditsRecordUrl (string) 积分记录URL @@ -176,8 +256,19 @@ "galaxy": "", // email (string) 邮箱 "nexus": {}, // ext (object) 扩展信息 "upgrade": false, // forcePayCenter (boolean) 是否强制跳转支付中心 - "regulate": {}, // t2IConfig (object) T2I配置 - "pursue": {}, // h5UrlConfig (object) H5 URL配置 + "regulate": { // t2IConfig (object) T2I配置 + "greaves": {}, // credits (object) 积分配置(key为任务类型,value为积分数) + "templates": [ // templates (array) 提示词模板列表 + { + "revenue": "", // img (string) 示例图片URL + "ledger": "" // prompt (string) 提示词内容 + } + ] + }, + "pursue": { // h5UrlConfig (object) H5 URL配置 + "digitize": "", // url (string) H5页面URL + "launchImgUrl": "" // launchImgUrl (string) 启动图URL + }, "switch": "", // payCenterUrl (string) 支付中心URL "vow": 0, // freeBlurTimes (int) 免费去模糊次数 "realm": "", // avatar (string) 头像URL @@ -194,7 +285,581 @@ } ``` -### 3. 注销账户 +V2 完整请求体: + +``` +// fast_login — 设备登录(快速登录) +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "JBK3hR8hMGmPYYcbg7jqs9qf6SWWQG3IGHQLbwst7TA=", // AES(/v1/user/fast_login) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "digest": "", // referer (string) 归因信息,如 utm_source=googleplay + "resolution": "", // sign (string) 签名,MD5(deviceId)大写32位 + "origin": "" // deviceId (string) 设备ID + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "surge": "", // extConfig + "accolade": "", // type + "evolve": { + "fbClientId": "", + "fbClientToken": "" + }, // appFbConfig + "retrospect": "", // usign + "navigate": "", // countryCode + "conquer": "", // creditsRecordUrl + "concession": "", // tgId + "reveal": 0, // credit + "defer": "", // tgName + "galaxy": "", // email + "nexus": { + }, // ext + "upgrade": false, // forcePayCenter + "regulate": { + "greaves": { + }, // credits + "templates": [ + { + "revenue": "", // img + "ledger": "" // prompt + } + ] + }, // t2IConfig + "pursue": { + "digitize": "", // url + "launchImgUrl": "" + }, // h5UrlConfig + "switch": "", // payCenterUrl + "vow": 0, // freeBlurTimes + "realm": "", // avatar + "terminal": "", // userName + "equip": false, // firstRegister + "asset": "", // userId + "generate": false, // isVip + "rally": [ + ], // tags + "decree": 0, // freeTimes + "reevaluate": "", // userToken + "tokenize": 0, // subScribeValidTime + "line": 0 // status + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 3. Google登录 + +`POST /v1/user/login/google` | 鉴权: 需要 + +请求头 (字段映射后): + +``` + portal 应用包名(必填) (原始: pkg) + knight 用户登录token (原始: User_token) +``` + +查询参数 (字段映射后): + +```json +{ + "sentinel": "" // app — 应用标识(必填) +} +``` + +请求体 (字段映射后): + +```json +{ + "sentinel": "", // app (string) 应用标识(必填) + "digest": "", // referer (string) 归因信息,如 utm_source=googleplay + "item": "", // inviteBy (string) 邀请人 + "helm": "", // code (string) OAuth授权码 + "supplier": "", // verifyCode (string) 验证码 + "crest": "", // ch (string) 渠道号 + "realm": "", // avatar (string) 头像URL + "accolade": "", // type (string) 类型 + "terminal": "", // userName (string) 用户名 + "asset": "", // userId (string) 用户ID + "origin": "", // deviceId (string) 设备ID + "block": "", // phone (string) 手机号 + "totem": "", // domain (string) 域名 + "series": "", // keepUserId (string) 保留用户ID + "relic": "", // campaignInfo (string) 活动信息 + "listing": "", // state (string) OAuth state + "campaign": "", // refererType (string) 归因类型 + "galaxy": "" // email (string) 邮箱 +} +``` + +响应 (解密后, 字段映射后): + +```json +{ + "rampart": "", // msg (string) 消息 + "helm": 0, // code (int) 状态码,0=成功 + "sidekick": { // data + "surge": "", // extConfig (string) 客户端界面配置下发 + "accolade": "", // type (string) 类型 + "evolve": { // appFbConfig (object) 应用FB配置 + "fbClientId": "", // fbClientId (string) Facebook应用ID + "fbClientToken": "" // fbClientToken (string) Facebook客户端Token + }, + "retrospect": "", // usign (string) 用户签名 + "navigate": "", // countryCode (string) 国家代码 + "conquer": "", // creditsRecordUrl (string) 积分记录URL + "concession": "", // tgId (string) Telegram ID + "reveal": 0, // credit (int) 积分余额 + "defer": "", // tgName (string) Telegram 用户名 + "galaxy": "", // email (string) 邮箱 + "nexus": {}, // ext (object) 扩展信息 + "upgrade": false, // forcePayCenter (boolean) 是否强制跳转支付中心 + "regulate": { // t2IConfig (object) T2I配置 + "greaves": {}, // credits (object) 积分配置(key为任务类型,value为积分数) + "templates": [ // templates (array) 提示词模板列表 + { + "revenue": "", // img (string) 示例图片URL + "ledger": "" // prompt (string) 提示词内容 + } + ] + }, + "pursue": { // h5UrlConfig (object) H5 URL配置 + "digitize": "", // url (string) H5页面URL + "launchImgUrl": "" // launchImgUrl (string) 启动图URL + }, + "switch": "", // payCenterUrl (string) 支付中心URL + "vow": 0, // freeBlurTimes (int) 免费去模糊次数 + "realm": "", // avatar (string) 头像URL + "terminal": "", // userName (string) 用户名 + "equip": false, // firstRegister (boolean) 是否首次注册 + "asset": "", // userId (string) 用户ID + "generate": false, // isVip (boolean) 是否VIP + "rally": [], // tags (array) 用户标签 + "decree": 0, // freeTimes (int) 免费次数 + "reevaluate": "", // userToken (string) 用户登录token + "tokenize": 0, // subScribeValidTime (int) 订阅有效时间戳 + "line": 0 // status (int) 用户状态 + } +} +``` + +V2 完整请求体: + +``` +// google — Google登录 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "IzM+23jOVdgfyuowLiRGMZFrfjMGtMAsbnQ9v720NxU=", // AES(/v1/user/login/google) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "sentinel": "", // app (string) 应用标识(必填) + "digest": "", // referer (string) 归因信息,如 utm_source=googleplay + "item": "", // inviteBy (string) 邀请人 + "helm": "", // code (string) OAuth授权码 + "supplier": "", // verifyCode (string) 验证码 + "crest": "", // ch (string) 渠道号 + "realm": "", // avatar (string) 头像URL + "accolade": "", // type (string) 类型 + "terminal": "", // userName (string) 用户名 + "asset": "", // userId (string) 用户ID + "origin": "", // deviceId (string) 设备ID + "block": "", // phone (string) 手机号 + "totem": "", // domain (string) 域名 + "series": "", // keepUserId (string) 保留用户ID + "relic": "", // campaignInfo (string) 活动信息 + "listing": "", // state (string) OAuth state + "campaign": "", // refererType (string) 归因类型 + "galaxy": "" // email (string) 邮箱 + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "surge": "", // extConfig + "accolade": "", // type + "evolve": { + "fbClientId": "", + "fbClientToken": "" + }, // appFbConfig + "retrospect": "", // usign + "navigate": "", // countryCode + "conquer": "", // creditsRecordUrl + "concession": "", // tgId + "reveal": 0, // credit + "defer": "", // tgName + "galaxy": "", // email + "nexus": { + }, // ext + "upgrade": false, // forcePayCenter + "regulate": { + "greaves": { + }, // credits + "templates": [ + { + "revenue": "", // img + "ledger": "" // prompt + } + ] + }, // t2IConfig + "pursue": { + "digitize": "", // url + "launchImgUrl": "" + }, // h5UrlConfig + "switch": "", // payCenterUrl + "vow": 0, // freeBlurTimes + "realm": "", // avatar + "terminal": "", // userName + "equip": false, // firstRegister + "asset": "", // userId + "generate": false, // isVip + "rally": [ + ], // tags + "decree": 0, // freeTimes + "reevaluate": "", // userToken + "tokenize": 0, // subScribeValidTime + "line": 0 // status + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 4. Apple登录 + +`POST /v1/user/login/apple` | 鉴权: 需要 + +请求头 (字段映射后): + +``` + portal 应用包名(必填) (原始: pkg) + knight 用户登录token (原始: User_token) +``` + +查询参数 (字段映射后): + +```json +{ + "sentinel": "" // app — 应用标识(必填) +} +``` + +请求体 (字段映射后): + +```json +{ + "sentinel": "", // app (string) 应用标识(必填) + "digest": "", // referer (string) 归因信息,如 utm_source=googleplay + "item": "", // inviteBy (string) 邀请人 + "helm": "", // code (string) OAuth授权码 + "supplier": "", // verifyCode (string) 验证码 + "crest": "", // ch (string) 渠道号 + "realm": "", // avatar (string) 头像URL + "accolade": "", // type (string) 类型 + "terminal": "", // userName (string) 用户名 + "asset": "", // userId (string) 用户ID + "origin": "", // deviceId (string) 设备ID + "block": "", // phone (string) 手机号 + "totem": "", // domain (string) 域名 + "series": "", // keepUserId (string) 保留用户ID + "relic": "", // campaignInfo (string) 活动信息 + "listing": "", // state (string) OAuth state + "campaign": "", // refererType (string) 归因类型 + "galaxy": "" // email (string) 邮箱 +} +``` + +响应 (解密后, 字段映射后): + +```json +{ + "rampart": "", // msg (string) 消息 + "helm": 0, // code (int) 状态码,0=成功 + "sidekick": { // data + "surge": "", // extConfig (string) 客户端界面配置下发 + "accolade": "", // type (string) 类型 + "evolve": { // appFbConfig (object) 应用FB配置 + "fbClientId": "", // fbClientId (string) Facebook应用ID + "fbClientToken": "" // fbClientToken (string) Facebook客户端Token + }, + "retrospect": "", // usign (string) 用户签名 + "navigate": "", // countryCode (string) 国家代码 + "conquer": "", // creditsRecordUrl (string) 积分记录URL + "concession": "", // tgId (string) Telegram ID + "reveal": 0, // credit (int) 积分余额 + "defer": "", // tgName (string) Telegram 用户名 + "galaxy": "", // email (string) 邮箱 + "nexus": {}, // ext (object) 扩展信息 + "upgrade": false, // forcePayCenter (boolean) 是否强制跳转支付中心 + "regulate": { // t2IConfig (object) T2I配置 + "greaves": {}, // credits (object) 积分配置(key为任务类型,value为积分数) + "templates": [ // templates (array) 提示词模板列表 + { + "revenue": "", // img (string) 示例图片URL + "ledger": "" // prompt (string) 提示词内容 + } + ] + }, + "pursue": { // h5UrlConfig (object) H5 URL配置 + "digitize": "", // url (string) H5页面URL + "launchImgUrl": "" // launchImgUrl (string) 启动图URL + }, + "switch": "", // payCenterUrl (string) 支付中心URL + "vow": 0, // freeBlurTimes (int) 免费去模糊次数 + "realm": "", // avatar (string) 头像URL + "terminal": "", // userName (string) 用户名 + "equip": false, // firstRegister (boolean) 是否首次注册 + "asset": "", // userId (string) 用户ID + "generate": false, // isVip (boolean) 是否VIP + "rally": [], // tags (array) 用户标签 + "decree": 0, // freeTimes (int) 免费次数 + "reevaluate": "", // userToken (string) 用户登录token + "tokenize": 0, // subScribeValidTime (int) 订阅有效时间戳 + "line": 0 // status (int) 用户状态 + } +} +``` + +V2 完整请求体: + +``` +// apple — Apple登录 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "w0u04gY31QXp9b1HcPwgUFAzHZWr51nx5OqDHb/C9vY=", // AES(/v1/user/login/apple) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "sentinel": "", // app (string) 应用标识(必填) + "digest": "", // referer (string) 归因信息,如 utm_source=googleplay + "item": "", // inviteBy (string) 邀请人 + "helm": "", // code (string) OAuth授权码 + "supplier": "", // verifyCode (string) 验证码 + "crest": "", // ch (string) 渠道号 + "realm": "", // avatar (string) 头像URL + "accolade": "", // type (string) 类型 + "terminal": "", // userName (string) 用户名 + "asset": "", // userId (string) 用户ID + "origin": "", // deviceId (string) 设备ID + "block": "", // phone (string) 手机号 + "totem": "", // domain (string) 域名 + "series": "", // keepUserId (string) 保留用户ID + "relic": "", // campaignInfo (string) 活动信息 + "listing": "", // state (string) OAuth state + "campaign": "", // refererType (string) 归因类型 + "galaxy": "" // email (string) 邮箱 + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "surge": "", // extConfig + "accolade": "", // type + "evolve": { + "fbClientId": "", + "fbClientToken": "" + }, // appFbConfig + "retrospect": "", // usign + "navigate": "", // countryCode + "conquer": "", // creditsRecordUrl + "concession": "", // tgId + "reveal": 0, // credit + "defer": "", // tgName + "galaxy": "", // email + "nexus": { + }, // ext + "upgrade": false, // forcePayCenter + "regulate": { + "greaves": { + }, // credits + "templates": [ + { + "revenue": "", // img + "ledger": "" // prompt + } + ] + }, // t2IConfig + "pursue": { + "digitize": "", // url + "launchImgUrl": "" + }, // h5UrlConfig + "switch": "", // payCenterUrl + "vow": 0, // freeBlurTimes + "realm": "", // avatar + "terminal": "", // userName + "equip": false, // firstRegister + "asset": "", // userId + "generate": false, // isVip + "rally": [ + ], // tags + "decree": 0, // freeTimes + "reevaluate": "", // userToken + "tokenize": 0, // subScribeValidTime + "line": 0 // status + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 5. 注销账户 `GET /v1/user/delete` | 鉴权: 需要 @@ -227,7 +892,80 @@ } ``` -### 4. 获取换衣模板 +V2 完整请求体: + +``` +// delete — 注销账户 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "+My5Dm1nYfQTvljGJsOV6g==", // AES(/v1/user/delete) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 6. 获取换衣模板 `GET /v1/image/clothes_template` | 鉴权: 需要 @@ -268,7 +1006,88 @@ } ``` -### 5. 获取用户通用信息 +V2 完整请求体: + +``` +// clothes_template — 获取换衣模板 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "+RfrZmGD8Uzkm6hmMNG5mzF0IljYMv/hrsAWRkUHixU=", // AES(/v1/image/clothes_template) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": [ + { + "congregation": "", // templateName + "greaves": 0, // credits + "realm": "", // avatar + "accolade": 0, // type + "rebalance": "", // user + "inject": "" // templateUrl + } + ] // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 7. 获取用户通用信息 `GET /v1/user/common_info` | 鉴权: 需要 @@ -303,7 +1122,10 @@ "sidekick": { // data "surge": "", // extConfig (string) 客户端界面配置下发 "accolade": "", // type (string) 类型 - "evolve": {}, // appFbConfig (object) 应用FB配置 + "evolve": { // appFbConfig (object) 应用FB配置 + "fbClientId": "", // fbClientId (string) Facebook应用ID + "fbClientToken": "" // fbClientToken (string) Facebook客户端Token + }, "retrospect": "", // usign (string) 用户签名 "navigate": "", // countryCode (string) 国家代码 "conquer": "", // creditsRecordUrl (string) 积分记录URL @@ -313,8 +1135,19 @@ "galaxy": "", // email (string) 邮箱 "nexus": {}, // ext (object) 扩展信息 "upgrade": false, // forcePayCenter (boolean) 是否强制跳转支付中心 - "regulate": {}, // t2IConfig (object) T2I配置 - "pursue": {}, // h5UrlConfig (object) H5 URL配置 + "regulate": { // t2IConfig (object) T2I配置 + "greaves": {}, // credits (object) 积分配置(key为任务类型,value为积分数) + "templates": [ // templates (array) 提示词模板列表 + { + "revenue": "", // img (string) 示例图片URL + "ledger": "" // prompt (string) 提示词内容 + } + ] + }, + "pursue": { // h5UrlConfig (object) H5 URL配置 + "digitize": "", // url (string) H5页面URL + "launchImgUrl": "" // launchImgUrl (string) 启动图URL + }, "switch": "", // payCenterUrl (string) 支付中心URL "vow": 0, // freeBlurTimes (int) 免费去模糊次数 "realm": "", // avatar (string) 头像URL @@ -331,7 +1164,123 @@ } ``` -### 6. 归因上报 +V2 完整请求体: + +``` +// common_info — 获取用户通用信息 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "/gPDnflXdn59gbWvtfU+uhFqI7OJK9pUgbdP1FOPuH8=", // AES(/v1/user/common_info) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "surge": "", // extConfig + "accolade": "", // type + "evolve": { + "fbClientId": "", + "fbClientToken": "" + }, // appFbConfig + "retrospect": "", // usign + "navigate": "", // countryCode + "conquer": "", // creditsRecordUrl + "concession": "", // tgId + "reveal": 0, // credit + "defer": "", // tgName + "galaxy": "", // email + "nexus": { + }, // ext + "upgrade": false, // forcePayCenter + "regulate": { + "greaves": { + }, // credits + "templates": [ + { + "revenue": "", // img + "ledger": "" // prompt + } + ] + }, // t2IConfig + "pursue": { + "digitize": "", // url + "launchImgUrl": "" + }, // h5UrlConfig + "switch": "", // payCenterUrl + "vow": 0, // freeBlurTimes + "realm": "", // avatar + "terminal": "", // userName + "equip": false, // firstRegister + "asset": "", // userId + "generate": false, // isVip + "rally": [ + ], // tags + "decree": 0, // freeTimes + "reevaluate": "", // userToken + "tokenize": 0, // subScribeValidTime + "line": 0 // status + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 8. 归因上报 `POST /v1/user/referrer` | 鉴权: 需要 @@ -375,7 +1324,81 @@ } ``` -### 7. 获取用户账户信息 +V2 完整请求体: + +``` +// referrer — 归因上报 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "d5p1sgWrVsTbMLkRSh+g5Atr10nt1WaD1C4W2Jw4T1E=", // AES(/v1/user/referrer) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "digest": "", // referer (string) 归因信息,如 utm_source=googleplay + "origin": "" // deviceId (string) 设备ID + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 9. 获取用户账户信息 `GET /v1/user/account` | 鉴权: 需要 @@ -404,7 +1427,10 @@ "sidekick": { // data "surge": "", // extConfig (string) 客户端界面配置下发 "accolade": "", // type (string) 类型 - "evolve": {}, // appFbConfig (object) 应用FB配置 + "evolve": { // appFbConfig (object) 应用FB配置 + "fbClientId": "", // fbClientId (string) Facebook应用ID + "fbClientToken": "" // fbClientToken (string) Facebook客户端Token + }, "retrospect": "", // usign (string) 用户签名 "navigate": "", // countryCode (string) 国家代码 "conquer": "", // creditsRecordUrl (string) 积分记录URL @@ -414,8 +1440,19 @@ "galaxy": "", // email (string) 邮箱 "nexus": {}, // ext (object) 扩展信息 "upgrade": false, // forcePayCenter (boolean) 是否强制跳转支付中心 - "regulate": {}, // t2IConfig (object) T2I配置 - "pursue": {}, // h5UrlConfig (object) H5 URL配置 + "regulate": { // t2IConfig (object) T2I配置 + "greaves": {}, // credits (object) 积分配置(key为任务类型,value为积分数) + "templates": [ // templates (array) 提示词模板列表 + { + "revenue": "", // img (string) 示例图片URL + "ledger": "" // prompt (string) 提示词内容 + } + ] + }, + "pursue": { // h5UrlConfig (object) H5 URL配置 + "digitize": "", // url (string) H5页面URL + "launchImgUrl": "" // launchImgUrl (string) 启动图URL + }, "switch": "", // payCenterUrl (string) 支付中心URL "vow": 0, // freeBlurTimes (int) 免费去模糊次数 "realm": "", // avatar (string) 头像URL @@ -432,7 +1469,123 @@ } ``` -### 8. 获取Google商品列表 +V2 完整请求体: + +``` +// account — 获取用户账户信息 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "ko82/Ko5QTQvyGwXblxoTfLS28kvYwcqsG/Z8eunjaY=", // AES(/v1/user/account) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "surge": "", // extConfig + "accolade": "", // type + "evolve": { + "fbClientId": "", + "fbClientToken": "" + }, // appFbConfig + "retrospect": "", // usign + "navigate": "", // countryCode + "conquer": "", // creditsRecordUrl + "concession": "", // tgId + "reveal": 0, // credit + "defer": "", // tgName + "galaxy": "", // email + "nexus": { + }, // ext + "upgrade": false, // forcePayCenter + "regulate": { + "greaves": { + }, // credits + "templates": [ + { + "revenue": "", // img + "ledger": "" // prompt + } + ] + }, // t2IConfig + "pursue": { + "digitize": "", // url + "launchImgUrl": "" + }, // h5UrlConfig + "switch": "", // payCenterUrl + "vow": 0, // freeBlurTimes + "realm": "", // avatar + "terminal": "", // userName + "equip": false, // firstRegister + "asset": "", // userId + "generate": false, // isVip + "rally": [ + ], // tags + "decree": 0, // freeTimes + "reevaluate": "", // userToken + "tokenize": 0, // subScribeValidTime + "line": 0 // status + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 10. 获取Google商品列表 `GET /v1/payment/getGooglePayActivities` | 鉴权: 需要 @@ -501,7 +1654,116 @@ } ``` -### 9. 获取Apple商品列表 +V2 完整请求体: + +``` +// getGooglePayActivities — 获取Google商品列表 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "ASwRlxDbjvdAMp6ZmjijjC9j+MNvLSw+6NdeznTDyGTNuAWVloT8VcE+HQns0oZX", // AES(/v1/payment/getGooglePayActivities) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "cleanse": [ + { + "extrapolate": "", // note + "helm": "", // code + "forge": 0, // bonus + "guardian": "", // actualAmount + "lead": "", // discountOff + "glossary": "", // title + "curriculum": "", // originAmount + "warrior": "", // activityId + "distribute": "", // subscriptionPeriod + "greaves": 0, // credits + "shield": "", // client + "species": 0, // days + "familiar": "", // currency + "subtract": 0 // productType + } + ], // subscriptionActivitys + "summon": [ + { + "extrapolate": "", // note + "helm": "", // code + "forge": 0, // bonus + "guardian": "", // actualAmount + "lead": "", // discountOff + "glossary": "", // title + "curriculum": "", // originAmount + "warrior": "", // activityId + "distribute": "", // subscriptionPeriod + "greaves": 0, // credits + "shield": "", // client + "species": 0, // days + "familiar": "", // currency + "subtract": 0 // productType + } + ] // activitys + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 11. 获取Apple商品列表 `GET /v1/payment/getApplePayActivities` | 鉴权: 需要 @@ -570,7 +1832,116 @@ } ``` -### 10. 创建支付订单 +V2 完整请求体: + +``` +// getApplePayActivities — 获取Apple商品列表 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "7cFXs1gnsOusTcYJayudo0iRoN/MBgv2WP3OnBp0Wf2x5+QtDEsAuVXsrF9Y+5hO", // AES(/v1/payment/getApplePayActivities) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "cleanse": [ + { + "extrapolate": "", // note + "helm": "", // code + "forge": 0, // bonus + "guardian": "", // actualAmount + "lead": "", // discountOff + "glossary": "", // title + "curriculum": "", // originAmount + "warrior": "", // activityId + "distribute": "", // subscriptionPeriod + "greaves": 0, // credits + "shield": "", // client + "species": 0, // days + "familiar": "", // currency + "subtract": 0 // productType + } + ], // subscriptionActivitys + "summon": [ + { + "extrapolate": "", // note + "helm": "", // code + "forge": 0, // bonus + "guardian": "", // actualAmount + "lead": "", // discountOff + "glossary": "", // title + "curriculum": "", // originAmount + "warrior": "", // activityId + "distribute": "", // subscriptionPeriod + "greaves": 0, // credits + "shield": "", // client + "species": 0, // days + "familiar": "", // currency + "subtract": 0 // productType + } + ] // activitys + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 12. 创建支付订单 `POST /v1/payment/createPayment` | 鉴权: 需要 @@ -641,13 +2012,125 @@ "protect": "", // cryptoInvoiceUrl (string) 加密发票URL "convert": "", // payUrl (string) 支付URL "federation": "", // id (string) 支付ID/订单ID - "destroy": {}, // payStatus (object) 支付状态 + "destroy": "", // payStatus (string) 支付状态枚举名:INIT | SUCCESS | PROCESSING | FAILED | CANCELED "transplant": 0 // openType (int) URL打开方式,0=内部/1=外部浏览器 } } ``` -### 11. Google支付结果回调 +V2 完整请求体: + +``` +// createPayment — 创建支付订单 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "xARz0A3sqGipBMRB6VFu6OK7MAR+bb8/pc9aV1y6BcI=", // AES(/v1/payment/createPayment) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "sentinel": "", // app (string) 应用标识(必填) + "bazaar": "", // lastName (string) 姓 + "vambrace": "", // country (string) 国家代码 + "dominion": "", // expireMonth (string) 过期月 + "captain": "", // accountName (string) 账户名 + "frame": "", // userInfoType (string) 用户信息类型 + "legend": false, // automaticRenewal (boolean) 是否自动续费 + "lineage": "", // channel (string) 渠道 + "companion": "", // cvcCode (string) CVC安全码 + "armor": "", // channelType (string) 渠道类型 + "asset": "", // userId (string) 用户ID + "warrior": "", // activityId (string) 活动模板ID + "appointment": "", // firstName (string) 名 + "ceremony": "", // subPaymentMethod (string) 子支付方式 + "block": "", // phone (string) 电话 + "insurer": "", // tgOrderId (string) Telegram订单ID + "concession": "", // tgId (string) Telegram ID + "brigade": "", // name (string) 姓名 + "resource": "", // paymentMethod (string) 支付方式,如 GOOGLEPAY/APPLEPAY + "sanctuary": "", // expireYear (string) 过期年 + "artifact": "", // card (string) 卡号 + "line": "" // status (string) 状态 + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "scout": { + }, // features + "handshake": [ + { + "mold": "", // showName + "brigade": "", // name + "greylist": "", // icon + "unzip": "", // paylink + "federation": 0, // id + "invent": 0 // sort + } + ], // payTypeList + "merge": "", // issuerUrl + "protect": "", // cryptoInvoiceUrl + "convert": "", // payUrl + "federation": "", // id + "destroy": "", // payStatus + "transplant": 0 // openType + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 13. Google支付结果回调 `POST /v1/payment/googlepay` | 鉴权: 需要 @@ -691,12 +2174,95 @@ "visor": "", // count (string) 数量 "familiar": "", // currency (string) 货币 "federation": "", // id (string) 支付ID/订单ID - "line": {} // status (object) 状态 + "line": "" // status (string) 支付状态枚举名:INIT | SUCCESS | PROCESSING | FAILED | CANCELED } } ``` -### 12. Apple支付结果回调 +V2 完整请求体: + +``` +// googlepay — Google支付结果回调 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "B4Kcm78LNE7abI+Owtvw3xzHbYTXRRzl0kv+59c5lmY=", // AES(/v1/payment/googlepay) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "sample": "", // signature (string) 签名 + "merchant": "", // purchaseData (string) Google支付凭据JSON + "federation": "", // id (string) 支付ID/订单ID + "asset": "" // userId (string) 用户ID + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "warrior": "", // activityId + "disambiguate": "", // redirectUrl + "awaken": false, // addCredits + "visor": "", // count + "familiar": "", // currency + "federation": "", // id + "line": "" // status + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 14. Apple支付结果回调 `POST /v1/payment/applepay` | 鉴权: 需要 @@ -740,12 +2306,95 @@ "visor": "", // count (string) 数量 "familiar": "", // currency (string) 货币 "federation": "", // id (string) 支付ID/订单ID - "line": {} // status (object) 状态 + "line": "" // status (string) 支付状态枚举名:INIT | SUCCESS | PROCESSING | FAILED | CANCELED } } ``` -### 13. 获取支付订单列表 +V2 完整请求体: + +``` +// applepay — Apple支付结果回调 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "pgYTPo74BK+lt8/kkiDC+rRSZqYXehDqi5x8YVzW8vk=", // AES(/v1/payment/applepay) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "attendee": "", // receipt (string) Apple支付凭据 + "federation": "", // id (string) 支付ID/订单ID + "asset": "", // userId (string) 用户ID + "chronicle": "" // transactionId (string) 交易ID + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "warrior": "", // activityId + "disambiguate": "", // redirectUrl + "awaken": false, // addCredits + "visor": "", // count + "familiar": "", // currency + "federation": "", // id + "line": "" // status + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 15. 获取支付订单列表 `GET /v1/payment/getPaymentDetailList` | 鉴权: 需要 @@ -777,7 +2426,80 @@ } ``` -### 14. 创建文生图任务 +V2 完整请求体: + +``` +// getPaymentDetailList — 获取支付订单列表 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "akl74gH/MMSG3R615uxuZhw6C49HU26J1wVLCZ4fXsny0tvJL2MHKrBv2fHrp42m", // AES(/v1/payment/getPaymentDetailList) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": [ + ] // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 16. 创建文生图任务 `POST /v1/image/txt2img_create` | 鉴权: 需要 @@ -815,13 +2537,90 @@ "rampart": "", // msg (string) 消息 "helm": 0, // code (int) 状态码,0=成功 "sidekick": { // data - "listing": 0, // state (int) 任务状态 + "listing": 0, // state (int) 任务状态:1=队列中 | 2=处理中 | 3=完成 | 4=超时 | 5=错误 | 6=中止 "tree": 0 // taskId (int) 任务ID } } ``` -### 15. 创建换衣任务 +V2 完整请求体: + +``` +// txt2img_create — 创建文生图任务 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "9AkXTk9OIqDaK9lXXYVyARPxVIu8Y0H0vP3uCysLa5o=", // AES(/v1/image/txt2img_create) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "declaration": 1, // 固定传参 + "quest": "", // aspectRatio (string) 宽高比 + "ledger": "" // prompt (string) 文本提示词 + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "listing": 0, // state + "tree": 0 // taskId + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 17. 创建换衣任务 `POST /v1/image/clothes_swap_ex` | 鉴权: 需要 @@ -859,13 +2658,89 @@ "rampart": "", // msg (string) 消息 "helm": 0, // code (int) 状态码,0=成功 "sidekick": { // data - "listing": 0, // state (int) 任务状态 + "listing": 0, // state (int) 任务状态:1=队列中 | 2=处理中 | 3=完成 | 4=超时 | 5=错误 | 6=中止 "tree": 0 // taskId (int) 任务ID } } ``` -### 16. 查询图片生成进度 +V2 完整请求体: + +``` +// clothes_swap_ex — 创建换衣任务 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "+RfrZmGD8Uzkm6hmMNG5mxl8Gx0mk1ZKQLJ69q4mIZo=", // AES(/v1/image/clothes_swap_ex) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "profit": "", // srcImgBase64 (string) 源图片Base64数据 + "statute": "" // srcImgUrl (string) 源图片URL + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "listing": 0, // state + "tree": 0 // taskId + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 18. 查询图片生成进度 `GET /v1/image/progress` | 鉴权: 需要 @@ -903,7 +2778,7 @@ } ], "dice": 0, // progress (int) 进度 - "listing": 0, // state (int) 任务状态 + "listing": 0, // state (int) 任务状态:1=队列中 | 2=处理中 | 3=完成 | 4=超时 | 5=错误 | 6=中止 "accolade": 0, // type (int) 任务类型 "flowStep": 0, // waitTime (int) 等待时间 "tree": 0, // taskId (int) 任务ID @@ -912,7 +2787,225 @@ } ``` -### 17. 创建视频换脸任务 +V2 完整请求体: + +``` +// progress — 查询图片生成进度 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "fnugypQVDHXWalukCBusLojG59cRtfOzh5bYBatSg6I=", // AES(/v1/image/progress) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "curate": [ + { + "reconfigure": "", // imgUrl + "reify": false, // isBlur + "royalty": 0, // imageId + "booking": "", // resolution + "reconnect": 0 // imgType + } + ], // imageInfos + "dice": 0, // progress + "listing": 0, // state + "accolade": 0, // type + "flowStep": 0, // waitTime + "tree": 0, // taskId + "revert": 0 // queueCnt + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 19. 获取视频换脸模板 + +`GET /v1/image/faceswap_video_template` | 鉴权: 需要 + +请求头 (字段映射后): + +``` + portal 应用包名(必填) (原始: pkg) + knight 用户登录token (原始: User_token) +``` + +查询参数 (字段映射后): + +```json +{ + "sentinel": "", // app — 应用标识(必填) + "crest": "", // ch — 渠道号 + "asset": "", // userId — 用户ID + "insignia": "" // categoryId — 分类ID +} +``` + +响应 (解密后, 字段映射后): + +```json +{ + "rampart": "", // msg (string) 消息 + "helm": 0, // code (int) 状态码,0=成功 + "sidekick": [ // data (array) 视频换脸模板列表 + { + "unite": 0, // frameIndex (int) 帧索引 + "demonstrate": 0, // videoDuration (int) 视频时长 + "congregation": "", // templateName (string) 模板名称 + "greaves": 0, // credits (int) 积分 + "leap": 0, // faceIndex (int) 人脸索引 + "simulate": "", // templateFaceUrl (string) 模板人脸URL + "realm": "", // avatar (string) 头像 + "ascend": "", // animate (string) 动画 + "rebalance": "", // user (string) 用户 + "inject": "" // templateUrl (string) 模板URL + } + ] +} +``` + +V2 完整请求体: + +``` +// faceswap_video_template — 获取视频换脸模板 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "pZQuCb74NC6YLZGPO/mRyDZUo9AJCfIiIJ+o4Z9hhr8r0b5Vvcw9vnJuIEVir9Km", // AES(/v1/image/faceswap_video_template) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": [ + { + "unite": 0, // frameIndex + "demonstrate": 0, // videoDuration + "congregation": "", // templateName + "greaves": 0, // credits + "leap": 0, // faceIndex + "simulate": "", // templateFaceUrl + "realm": "", // avatar + "ascend": "", // animate + "rebalance": "", // user + "inject": "" // templateUrl + } + ] // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 20. 创建视频换脸任务 `POST /v1/image/video_facewap_task` | 鉴权: 需要 @@ -955,13 +3048,385 @@ "rampart": "", // msg (string) 消息 "helm": 0, // code (int) 状态码,0=成功 "sidekick": { // data - "listing": 0, // state (int) 任务状态 + "listing": 0, // state (int) 任务状态:1=队列中 | 2=处理中 | 3=完成 | 4=超时 | 5=错误 | 6=中止 "tree": 0 // taskId (int) 任务ID } } ``` -### 18. 创建图转视频姿态任务 +V2 完整请求体: + +``` +// video_facewap_task — 创建视频换脸任务 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "u7fAlGvwVuiU3GAJWsYfCrBAssXCMl2atJBZ8nHkhlU=", // AES(/v1/image/video_facewap_task) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "fragment": 10, // 固定传参 + "bond": "", // headPos (string) 头像位置 + "promotion": "", // videoUrl (string) 视频URL + "arena": 2, // 固定传参 + "agent": "", // headImg (string) 头像图片 + "congregation": "", // templateName (string) 模板名称 + "applicant": 1, // 固定传参 + "accolade": 0, // 固定传参 + "histogram": 3 // 固定传参 + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "listing": 0, // state + "tree": 0 // taskId + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 21. 检测图片人脸 + +`POST /v1/image/get_image_faces` | 鉴权: 需要 + +请求头 (字段映射后): + +``` + portal 应用包名(必填) (原始: pkg) + knight 用户登录token (原始: User_token) +``` + +查询参数 (字段映射后): + +```json +{ + "sentinel": "", // app — 应用标识(必填) + "crest": "", // ch — 渠道号 + "asset": "" // userId — 用户ID +} +``` + +请求体 (字段映射后): + +```json +{ + "profit": "", // srcImgBase64 (string) 源图片Base64数据 + "statute": "" // srcImgUrl (string) 源图片URL +} +``` + +响应 (解密后, 字段映射后): + +```json +{ + "rampart": "", // msg (string) 消息 + "helm": 0, // code (int) 状态码,0=成功 + "sidekick": { // data + "cosmos": 0, // duration (int) 时长 + "promotion": "", // videoUrl (string) 视频URL + "strike": [ // faceInfos (array) 人脸信息列表 + { + "dash": "", // face (string) 人脸图片 + "parry": 0, // face_index (int) 人脸索引 + "venture": "", // gender (string) 性别 + "configure": 0, // y1 (int) 左上角Y坐标 + "invoke": 0, // x1 (int) 左上角X坐标 + "manufacture": 0, // y2 (int) 右下角Y坐标 + "prewarm": 0, // index (int) 索引 + "sync": 0, // x2 (int) 右下角X坐标 + "transform": 0, // age (int) 年龄 + "pledge": 0 // frame_index (int) 帧索引 + } + ], + "deserialize": 0 // needCredits (int) 所需积分 + } +} +``` + +V2 完整请求体: + +``` +// get_image_faces — 检测图片人脸 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "m8/e/XZNDVzERrYbaXbvJoLVrdC3dFm5zz2lqCLZEJE=", // AES(/v1/image/get_image_faces) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "profit": "", // srcImgBase64 (string) 源图片Base64数据 + "statute": "" // srcImgUrl (string) 源图片URL + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "cosmos": 0, // duration + "promotion": "", // videoUrl + "strike": [ + { + "dash": "", // face + "parry": 0, // face_index + "venture": "", // gender + "configure": 0, // y1 + "invoke": 0, // x1 + "manufacture": 0, // y2 + "prewarm": 0, // index + "sync": 0, // x2 + "transform": 0, // age + "pledge": 0 // frame_index + } + ], // faceInfos + "deserialize": 0 // needCredits + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 22. 检测视频人脸 + +`POST /v1/image/get_video_faces` | 鉴权: 需要 + +请求头 (字段映射后): + +``` + portal 应用包名(必填) (原始: pkg) + knight 用户登录token (原始: User_token) +``` + +查询参数 (字段映射后): + +```json +{ + "sentinel": "", // app — 应用标识(必填) + "crest": "", // ch — 渠道号 + "asset": "", // userId — 用户ID + "cosmos": "", // duration — 时长 + "compendium": "" // srcVideo — 源视频 +} +``` + +响应 (解密后, 字段映射后): + +```json +{ + "rampart": "", // msg (string) 消息 + "helm": 0, // code (int) 状态码,0=成功 + "sidekick": { // data + "cosmos": 0, // duration (int) 时长 + "promotion": "", // videoUrl (string) 视频URL + "strike": [ // faceInfos (array) 人脸信息列表 + { + "dash": "", // face (string) 人脸图片 + "parry": 0, // face_index (int) 人脸索引 + "venture": "", // gender (string) 性别 + "configure": 0, // y1 (int) 左上角Y坐标 + "invoke": 0, // x1 (int) 左上角X坐标 + "manufacture": 0, // y2 (int) 右下角Y坐标 + "prewarm": 0, // index (int) 索引 + "sync": 0, // x2 (int) 右下角X坐标 + "transform": 0, // age (int) 年龄 + "pledge": 0 // frame_index (int) 帧索引 + } + ], + "deserialize": 0 // needCredits (int) 所需积分 + } +} +``` + +V2 完整请求体: + +``` +// get_video_faces — 检测视频人脸 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "RktekAqpwFr4a9UrAdL2Q5mXMGtWeZpD4x98x8o9EqM=", // AES(/v1/image/get_video_faces) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "cosmos": 0, // duration + "promotion": "", // videoUrl + "strike": [ + { + "dash": "", // face + "parry": 0, // face_index + "venture": "", // gender + "configure": 0, // y1 + "invoke": 0, // x1 + "manufacture": 0, // y2 + "prewarm": 0, // index + "sync": 0, // x2 + "transform": 0, // age + "pledge": 0 // frame_index + } + ], // faceInfos + "deserialize": 0 // needCredits + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 23. 创建图转视频姿态任务 `POST /v1/image/img2video_pose_task` | 鉴权: 需要 @@ -994,13 +3459,87 @@ "rampart": "", // msg (string) 消息 "helm": 0, // code (int) 状态码,0=成功 "sidekick": { // data - "listing": 0, // state (int) 任务状态 + "listing": 0, // state (int) 任务状态:1=队列中 | 2=处理中 | 3=完成 | 4=超时 | 5=错误 | 6=中止 "tree": 0 // taskId (int) 任务ID } } ``` -### 19. 获取图转视频姿态模板 +V2 完整请求体: + +``` +// img2video_pose_task — 创建图转视频姿态任务 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "MckCynrhgryF3CC/4R7nV/5IwFr5uhwYLUQGATkw7qs=", // AES(/v1/image/img2video_pose_task) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "listing": 0, // state + "tree": 0 // taskId + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 24. 获取图转视频姿态模板 `GET /v1/image/img2Video_pose_template` | 鉴权: 需要 @@ -1046,7 +3585,380 @@ } ``` -### 20. 创建换脸任务 +V2 完整请求体: + +``` +// img2Video_pose_template — 获取图转视频姿态模板 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "9zFQk1LSljxTmJVs2zioYaokMmO248m495JIo8HEFckr0b5Vvcw9vnJuIEVir9Km", // AES(/v1/image/img2Video_pose_template) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": [ + { + "cosmos": 0, // duration + "extend": "", // templateTfUrl + "pipe": 0, // templateTfCredits + "acknowledge": "", // templateFifUrl + "congregation": "", // templateName + "greaves": { + }, // credits + "unwrap": 0, // templateTfDuration + "decommission": 0, // templateFifDuration + "ascend": "", // animate + "pause": 0, // templateFifCredits + "inject": "" // templateUrl + } + ] // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 25. 获取我的作品 + +`GET /v1/image/mycreation` | 鉴权: 需要 + +请求头 (字段映射后): + +``` + portal 应用包名(必填) (原始: pkg) + knight 用户登录token (原始: User_token) +``` + +查询参数 (字段映射后): + +```json +{ + "sentinel": "", // app — 应用标识(必填) + "asset": "", // userId — 用户ID + "trophy": "", // page — 页码 + "heatmap": "", // size — 每页数量 + "cipher": "" // taskType — 任务类型 +} +``` + +响应 (解密后, 字段映射后): + +```json +{ + "rampart": "", // msg (string) 消息 + "helm": 0, // code (int) 状态码,0=成功 + "sidekick": { // data + "weigh": 0, // total (int) 总数 + "empower": 0, // current (int) 当前页 + "heatmap": 0, // size (int) 每页大小 + "harvest": false, // optimizeCountSql (boolean) 是否优化count SQL + "intensify": [ // records (array) 记录列表 + { + "reconfigure": "", // imgUrl (string) 图片URL + "reify": false, // isBlur (boolean) 是否模糊 + "cipher": 0, // taskType (int) 任务类型 + "royalty": 0, // imageId (long) 图片ID + "unleash": "", // appraise (string) 评价 + "booking": "", // resolution (string) 分辨率 + "ledger": "", // prompt (string) 提示词 + "reconnect": 0 // imgType (int) 图片类型 + } + ], + "architect": 0, // maxLimit (int) 最大限制 + "suspend": false, // searchCount (boolean) 是否搜索count + "seek": false, // optimizeJoinOfCountSql (boolean) 是否优化join count SQL + "identify": [], // orders (array) 排序 + "command": "" // countId (string) count ID + } +} +``` + +V2 完整请求体: + +``` +// mycreation — 获取我的作品 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "tUJUrkzJkuy/PJtFeaFez/FUbPg1LZ8g0iXfnjaxW8o=", // AES(/v1/image/mycreation) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "weigh": 0, // total + "empower": 0, // current + "heatmap": 0, // size + "harvest": false, // optimizeCountSql + "intensify": [ + { + "reconfigure": "", // imgUrl + "reify": false, // isBlur + "cipher": 0, // taskType + "royalty": 0, // imageId + "unleash": "", // appraise + "booking": "", // resolution + "ledger": "", // prompt + "reconnect": 0 // imgType + } + ], // records + "architect": 0, // maxLimit + "suspend": false, // searchCount + "seek": false, // optimizeJoinOfCountSql + "identify": [ + ], // orders + "command": "" // countId + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 26. 获取推荐头像 + +`GET /v1/image/recommendhead` | 鉴权: 需要 + +请求头 (字段映射后): + +``` + portal 应用包名(必填) (原始: pkg) + knight 用户登录token (原始: User_token) +``` + +查询参数 (字段映射后): + +```json +{ + "sentinel": "", // app — 应用标识(必填) + "asset": "" // userId — 用户ID +} +``` + +响应 (解密后, 字段映射后): + +```json +{ + "rampart": "", // msg (string) 消息 + "helm": 0, // code (int) 状态码,0=成功 + "sidekick": { // data + "associate": [ // sys (array) 系统推荐列表 + { + "revenue": "", // img (string) 图片 + "bond": "", // headPos (string) 头部位置 + "leap": 0, // faceIndex (int) 人脸索引 + "digitize": "" // url (string) URL + } + ], + "entrap": [ // recent (array) 最近使用列表 + { + "revenue": "", // img (string) 图片 + "bond": "", // headPos (string) 头部位置 + "leap": 0, // faceIndex (int) 人脸索引 + "digitize": "" // url (string) URL + } + ] + } +} +``` + +V2 完整请求体: + +``` +// recommendhead — 获取推荐头像 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "2lkgHC/EO4JgJL2ht0CeROHMMntqYKgFvNO/XCK1TyY=", // AES(/v1/image/recommendhead) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "associate": [ + { + "revenue": "", // img + "bond": "", // headPos + "leap": 0, // faceIndex + "digitize": "" // url + } + ], // sys + "entrap": [ + { + "revenue": "", // img + "bond": "", // headPos + "leap": 0, // faceIndex + "digitize": "" // url + } + ] // recent + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 27. 创建换脸任务 `POST /v1/image/faceswap_task` | 鉴权: 需要 @@ -1086,13 +3998,220 @@ "rampart": "", // msg (string) 消息 "helm": 0, // code (int) 状态码,0=成功 "sidekick": { // data - "listing": 0, // state (int) 任务状态 + "listing": 0, // state (int) 任务状态:1=队列中 | 2=处理中 | 3=完成 | 4=超时 | 5=错误 | 6=中止 "tree": 0 // taskId (int) 任务ID } } ``` -### 21. App事件打点上报 +V2 完整请求体: + +``` +// faceswap_task — 创建换脸任务 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "pZQuCb74NC6YLZGPO/mRyDYdcbR8CUOur8pawoKJ5qw=", // AES(/v1/image/faceswap_task) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "revenue": "", // img (string) 图片 + "bond": "", // headPos (string) 头像位置 + "arena": 0, // 固定传参 + "agent": "", // headImg (string) 头像图片 + "booking": "", // resolution (string) 分辨率 + "histogram": 2, // 固定传参 + "stadium": 1 // 固定传参 + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "listing": 0, // state + "tree": 0 // taskId + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 28. 获取图片模板 + +`GET /v1/image/image_template` | 鉴权: 需要 + +请求头 (字段映射后): + +``` + portal 应用包名(必填) (原始: pkg) + knight 用户登录token (原始: User_token) +``` + +查询参数 (字段映射后): + +```json +{ + "sentinel": "", // app — 应用标识(必填) + "crest": "", // ch — 渠道号 + "asset": "", // userId — 用户ID + "insignia": "" // categoryId — 分类ID +} +``` + +响应 (解密后, 字段映射后): + +```json +{ + "rampart": "", // msg (string) 消息 + "helm": 0, // code (int) 状态码,0=成功 + "sidekick": [ // data (array) 图片模板列表 + { + "bond": "", // headPos (string) 头像位置 + "congregation": "", // templateName (string) 模板名称 + "leap": 0, // faceIndex (int) 人脸索引 + "greaves": 0, // credits (int) 积分 + "realm": "", // avatar (string) 头像 + "rebalance": "", // user (string) 用户 + "theorize": "", // resulotion (string) 分辨率 + "inject": "" // templateUrl (string) 模板URL + } + ] +} +``` + +V2 完整请求体: + +``` +// image_template — 获取图片模板 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "XUCp6nWYnEP5aBtDzRw07JrewUeQlB9m0cMwMpSxoSc=", // AES(/v1/image/image_template) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": [ + { + "bond": "", // headPos + "congregation": "", // templateName + "leap": 0, // faceIndex + "greaves": 0, // credits + "realm": "", // avatar + "rebalance": "", // user + "theorize": "", // resulotion + "inject": "" // templateUrl + } + ] // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 29. App事件打点上报 `POST /v1/log/appevent` | 鉴权: 需要 @@ -1127,7 +4246,79 @@ } ``` -### 22. 创建黏土风格任务 +V2 完整请求体: + +``` +// appevent — App事件打点上报 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "B9Wum7FH+IkJ/qSKE8yp6PLS28kvYwcqsG/Z8eunjaY=", // AES(/v1/log/appevent) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 30. 创建黏土风格任务 `POST /v1/image/clay_stylization` | 鉴权: 需要 @@ -1165,13 +4356,89 @@ "rampart": "", // msg (string) 消息 "helm": 0, // code (int) 状态码,0=成功 "sidekick": { // data - "listing": 0, // state (int) 任务状态 + "listing": 0, // state (int) 任务状态:1=队列中 | 2=处理中 | 3=完成 | 4=超时 | 5=错误 | 6=中止 "tree": 0 // taskId (int) 任务ID } } ``` -### 23. 创建自定义换衣任务 +V2 完整请求体: + +``` +// clay_stylization — 创建黏土风格任务 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "efe3nmVAVTo4GwufCHGZn6/OuCdnVXoKnVUB18NlEaY=", // AES(/v1/image/clay_stylization) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "profit": "", // srcImgBase64 (string) 源图片Base64数据 + "statute": "" // srcImgUrl (string) 源图片URL + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "listing": 0, // state + "tree": 0 // taskId + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 31. 创建自定义换衣任务 `POST /v1/image/custom_clothes_swap` | 鉴权: 需要 @@ -1207,13 +4474,89 @@ "rampart": "", // msg (string) 消息 "helm": 0, // code (int) 状态码,0=成功 "sidekick": { // data - "listing": 0, // state (int) 任务状态 + "listing": 0, // state (int) 任务状态:1=队列中 | 2=处理中 | 3=完成 | 4=超时 | 5=错误 | 6=中止 "tree": 0 // taskId (int) 任务ID } } ``` -### 24. 获取文生图标签 +V2 完整请求体: + +``` +// custom_clothes_swap — 创建自定义换衣任务 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "ipj4rBNPdps6blpCvT8S4eMpl1GbmBEyeyl0PeGfEF4=", // AES(/v1/image/custom_clothes_swap) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "balance": "", // srcImg2 (string) 源图片2的文件路径 + "endeavor": "" // srcImg1 (string) 源图片1的文件路径 + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "listing": 0, // state + "tree": 0 // taskId + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 32. 获取文生图标签 `GET /v1/image/txt2img_tags` | 鉴权: 需要 @@ -1243,13 +4586,100 @@ "sidekick": [ // data (array) 标签列表 { "parallelize": "", // theme (string) 主题 - "rally": [] // tags (array) 标签 + "rally": [ // tags (array) 标签 + { + "constrain": "", // tag (string) 标签名 + "valor": "" // desc (string) 描述 + } + ] } ] } ``` -### 25. 获取文生图提示词模板 +V2 完整请求体: + +``` +// txt2img_tags — 获取文生图标签 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "9AkXTk9OIqDaK9lXXYVyAb5FRZUhqPJbndWcaUq6VgQ=", // AES(/v1/image/txt2img_tags) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": [ + { + "parallelize": "", // theme + "rally": [ + { + "constrain": "", // tag + "valor": "" // desc + } + ] // tags + } + ] // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 33. 获取文生图提示词模板 `POST /v1/image/txt2img_prompts` | 鉴权: 需要 @@ -1281,7 +4711,200 @@ } ``` -### 26. 获取分类列表 +V2 完整请求体: + +``` +// txt2img_prompts — 获取文生图提示词模板 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "9AkXTk9OIqDaK9lXXYVyAaHztqFyfBVJmw86sPTZ5KY=", // AES(/v1/image/txt2img_prompts) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "sidekick": [{"custom":"","parallelize":"","rally":[]}] + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "ledger": "", // prompt + "rally": "" // tags + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 34. 获取用户支付记录 + +`GET /v1/user/payments` | 鉴权: 需要 + +请求头 (字段映射后): + +``` + portal 应用包名(必填) (原始: pkg) + knight 用户登录token (原始: User_token) +``` + +查询参数 (字段映射后): + +```json +{ + "sentinel": "", // app — 应用标识(必填) + "asset": "" // userId — 用户ID +} +``` + +响应 (解密后, 字段映射后): + +```json +{ + "rampart": "", // msg (string) 消息 + "helm": 0, // code (int) 状态码,0=成功 + "sidekick": [ // data (array) 支付记录列表 + { + "hero": 0, // amount (int) 支付金额 + "restart": 0, // payTime (int) 支付时间戳 + "intercept": "", // payMethod (string) 支付方式 + "familiar": "", // currency (string) 货币类型 + "assert": "" // payId (string) 支付ID + } + ] +} +``` + +V2 完整请求体: + +``` +// payments — 获取用户支付记录 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "3g7ODurMzgd+K+DZoJ4hBLHn5C0MSwC5VeysX1j7mE4=", // AES(/v1/user/payments) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": [ + { + "hero": 0, // amount + "restart": 0, // payTime + "intercept": "", // payMethod + "familiar": "", // currency + "assert": "" // payId + } + ] // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 35. 获取分类列表 `GET /v1/image/category-list` | 鉴权: 需要 @@ -1317,7 +4940,85 @@ } ``` -### 27. 获取App语言配置 +V2 完整请求体: + +``` +// category_list — 获取分类列表 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "YiEwYYtY/jrNfR/6L3LjNcO1tDtYBjRkYRWFRJU8uds=", // AES(/v1/image/category-list) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": [ + { + "recharge": "", // templateType + "patrol": "", // categoryName + "insignia": 0 // categoryId + } + ] // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 36. 获取App语言配置 `GET /v1/config/app-language` | 鉴权: 需要 @@ -1349,7 +5050,81 @@ } ``` -### 28. 图片动作风格化gif +V2 完整请求体: + +``` +// app_language — 获取App语言配置 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "/0p7cVewd+WqmRAeA1yXfRrzFB0GLIIEsLkB3neLCYs=", // AES(/v1/config/app-language) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "charge": "" // config + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 37. 图片动作风格化gif `POST /v1/image/offtop_video` | 鉴权: 需要 @@ -1386,13 +5161,89 @@ "rampart": "", // msg (string) 消息 "helm": 0, // code (int) 状态码,0=成功 "sidekick": { // data - "listing": 0, // state (int) 任务状态 + "listing": 0, // state (int) 任务状态:1=队列中 | 2=处理中 | 3=完成 | 4=超时 | 5=错误 | 6=中止 "tree": 0 // taskId (int) 任务ID } } ``` -### 29. 获取我的任务列表 +V2 完整请求体: + +``` +// offtop_video — 图片动作风格化gif +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "baq0prjaYcmb6oSUqLbvxmquher0440frp0L3ZPvTFk=", // AES(/v1/image/offtop_video) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "summary": "480p", // 固定传参 + "refuge": "" // srcImg (string) 源图片 + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "listing": 0, // state + "tree": 0 // taskId + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 38. 获取我的任务列表 `GET /v1/image/my-tasks` | 鉴权: 需要 @@ -1428,9 +5279,15 @@ { "cipher": 0, // taskType (int) 任务类型 "discover": 0, // createTime (long) 创建时间 - "listing": "", // state (string) 任务状态 + "listing": 0, // state (int) 任务状态:1=队列中 | 2=处理中 | 3=完成 | 4=超时 | 5=错误 | 6=中止 "tree": 0, // taskId (long) 任务ID - "downsample": [] // imgList (array) 图片列表 + "downsample": [ // imgList (array) 图片列表 + { + "reconfigure": "", // imgUrl (string) 图片URL + "booking": "", // resolution (string) 分辨率 + "reconnect": 0 // imgType (int) 图片类型 + } + ] } ], "manifest": false // hasNext (boolean) 是否有下一页 @@ -1438,7 +5295,99 @@ } ``` -### 30. 创建增强换脸任务 +V2 完整请求体: + +``` +// my_tasks — 获取我的任务列表 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "2NZQYBiTDfxnbiL8L3yzfsdXyXMDoWk2r4fMzMJFPXA=", // AES(/v1/image/my-tasks) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "weigh": 0, // total + "empower": 0, // current + "heatmap": 0, // size + "intensify": [ + { + "cipher": 0, // taskType + "discover": 0, // createTime + "listing": 0, // state + "tree": 0, // taskId + "downsample": [ + { + "reconfigure": "", // imgUrl + "booking": "", // resolution + "reconnect": 0 // imgType + } + ] // imgList + } + ], // records + "manifest": false // hasNext + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 39. 创建增强换脸任务 `POST /v1/image/faceswap_ex_task` | 鉴权: 需要 @@ -1474,13 +5423,89 @@ "rampart": "", // msg (string) 消息 "helm": 0, // code (int) 状态码,0=成功 "sidekick": { // data - "listing": 0, // state (int) 任务状态 + "listing": 0, // state (int) 任务状态:1=队列中 | 2=处理中 | 3=完成 | 4=超时 | 5=错误 | 6=中止 "tree": 0 // taskId (int) 任务ID } } ``` -### 31. 创建生图任务 +V2 完整请求体: + +``` +// faceswap_ex_task — 创建增强换脸任务 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "pZQuCb74NC6YLZGPO/mRyGWK2GYVejPgKHRytHrqrXw=", // AES(/v1/image/faceswap_ex_task) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "balance": "", // srcImg2 (string) 源图片2的文件路径 + "endeavor": "" // srcImg1 (string) 源图片1的文件路径 + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "listing": 0, // state + "tree": 0 // taskId + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 40. 创建生图任务 `POST /v1/image/create-task` | 鉴权: 需要 @@ -1523,13 +5548,97 @@ "rampart": "", // msg (string) 消息 "helm": 0, // code (int) 状态码,0=成功 "sidekick": { // data - "listing": 0, // state (int) 任务状态 + "listing": 0, // state (int) 任务状态:1=队列中 | 2=处理中 | 3=完成 | 4=超时 | 5=错误 | 6=中止 "tree": 0 // taskId (int) 任务ID } } ``` -### 32. 获取积分页面信息 +V2 完整请求体: + +``` +// create_task — 创建生图任务 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "rI0Hnrfr+omz0lgMlJaQHf2B/h7caWjEKjxYbKXcSN4=", // AES(/v1/image/create-task) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "nexus": "", // ext (string) 扩展参数 + "cipher": "", // taskType (string) 任务类型 + "heatmap": "", // size (string) 输出尺寸,如 480p + "congregation": "", // templateName (string) 模板名称 + "balance": "", // srcImg2 (string) 源图片2的文件路径 + "guild": "", // srcImg1Url (string) 源图片1的URL + "allowance": false, // 固定传参 + "endeavor": "", // srcImg1 (string) 源图片1的文件路径 + "commission": "", // srcImg2Url (string) 源图片2的URL + "ledger": "" // prompt (string) 文本提示词 + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "listing": 0, // state + "tree": 0 // taskId + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 41. 获取积分页面信息 `GET /v1/user/credits-page` | 鉴权: 需要 @@ -1575,7 +5684,94 @@ } ``` -### 33. 删除任务 +V2 完整请求体: + +``` +// credits_page — 获取积分页面信息 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "Fxw9d1hrN+y+1MRKUZrnvSVJ/DrPhgkptWl0inq6XQk=", // AES(/v1/user/credits-page) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "weigh": 0, // total + "empower": 0, // current + "coordinate": 0, // pages + "heatmap": 0, // size + "intensify": [ + { + "tailor": "", // subBusinessType + "greaves": 0, // credits + "discover": 0, // createTime + "vanquish": "", // businessId + "accolade": 0, // type + "defend": "" // businessType + } + ] // records + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 42. 删除任务 `POST /v1/image/delete-task` | 鉴权: 需要 @@ -1607,7 +5803,80 @@ } ``` -### 34. 获取支付方式列表 +V2 完整请求体: + +``` +// delete_task — 删除任务 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "uSEyKQBaKpqWKxMyG6uSBv2B/h7caWjEKjxYbKXcSN4=", // AES(/v1/image/delete-task) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "tree": 0 // taskId (int) 任务ID + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 43. 获取支付方式列表 `POST /v1/payment/get-payment-methods` | 鉴权: 需要 @@ -1651,7 +5920,94 @@ } ``` -### 35. 获取订单详情 +V2 完整请求体: + +``` +// get_payment_methods — 获取支付方式列表 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "pKTjSWEFROYi4ZSn5eMXfYHaCMQ1ESxQF0a7jxeJrGM=", // AES(/v1/payment/get-payment-methods) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "warrior": 0, // activityId (int) 活动模板ID + "vambrace": "" // country (string) 国家代码 + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "renew": [ + { + "ceremony": "", // subPaymentMethod + "conjure": 0, // bonusCredits + "brigade": "", // name + "greylist": "", // icon + "finalize": false, // recentlyUsed + "resource": "", // paymentMethod + "deny": false, // recommend + "enchant": 0.0, // bonusRatio + "deploy": false // selected + } + ] // paymentMethods + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 44. 获取订单详情 `GET /v1/payment/getOrderDetail` | 鉴权: 需要 @@ -1684,12 +6040,92 @@ "visor": "", // count (string) 数量 "familiar": "", // currency (string) 货币 "federation": "", // id (string) 支付ID/订单ID - "line": {} // status (object) 状态 + "line": "" // status (string) 支付状态枚举名:INIT | SUCCESS | PROCESSING | FAILED | CANCELED } } ``` -### 36. 获取反馈上传URL +V2 完整请求体: + +``` +// getOrderDetail — 获取订单详情 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "tV1hweljjY+aaQDf/Z5pJHO3+O6pZOm00cuW1CBPjSM=", // AES(/v1/payment/getOrderDetail) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "warrior": "", // activityId + "disambiguate": "", // redirectUrl + "awaken": false, // addCredits + "visor": "", // count + "familiar": "", // currency + "federation": "", // id + "line": "" // status + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 45. 获取反馈上传URL `POST /v1/feedback/upload-presigned-url` | 鉴权: 需要 @@ -1721,7 +6157,82 @@ } ``` -### 37. 提交反馈 +V2 完整请求体: + +``` +// upload_presigned_url — 获取反馈上传URL +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "orVu5EV4wketjm3s7dpINX3rgZjX7lkR1ySDUdycypd+BppU4+QHliSwjd40ejKk", // AES(/v1/feedback/upload-presigned-url) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "layer": "" // fileName (string) 文件名 + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "shed": "", // uploadUrl + "hunt": "" // filePath + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 46. 提交反馈 `POST /v1/feedback/submit` | 鉴权: 需要 @@ -1755,7 +6266,81 @@ } ``` -### 38. 获取反馈列表 +V2 完整请求体: + +``` +// submit — 提交反馈 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "2TPm4cO/6EAiAP+0nFLZFAfRMxamRw7mtQp2oyg1WDU=", // AES(/v1/feedback/submit) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "inventory": [], + "pauldron": "", // contentType (string) 内容类型 + "cloak": "" // content (string) 内容 + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": false // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 47. 获取反馈列表 `GET /v1/feedback/list` | 鉴权: 需要 @@ -1800,7 +6385,95 @@ } ``` -### 39. 标记反馈已读 +V2 完整请求体: + +``` +// list — 获取反馈列表 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "o0za2eNxr2M/wNp4474h0TU+subYe0OSk9tX0uO2G6M=", // AES(/v1/feedback/list) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "weigh": 0, // total + "empower": 0, // current + "heatmap": 0, // size + "intensify": [ + { + "redact": false, // read + "track": 0, // feedbackId + "inventory": [ + ], // fileUrls + "voxelize": 0, // replyStatus + "uncover": "", // createTimeText + "cloak": "" // content + } + ], // records + "manifest": false // hasNext + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 48. 标记反馈已读 `POST /v1/feedback/read` | 鉴权: 需要 @@ -1832,7 +6505,80 @@ } ``` -### 40. 获取未读消息数 +V2 完整请求体: + +``` +// read — 标记反馈已读 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "wuTBDHBVRDri3+rNYPPPhuZKxHeLVr128QorwtYqyfo=", // AES(/v1/feedback/read) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "registry": [] + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 49. 获取未读消息数 `GET /v1/user/unread-message-count` | 鉴权: 需要 @@ -1870,7 +6616,88 @@ } ``` -### 41. 获取图转视频分类 +V2 完整请求体: + +``` +// unread_message_count — 获取未读消息数 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "b1fyDddTbwX8J5yeb4RDXC4rte3yUDCeMpw7Y+XCm8Y=", // AES(/v1/user/unread-message-count) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "footprint": [ + { + "visor": 0, // count + "accolade": "" // type + } + ], // unreadCountList + "defragment": 0, // totalUnreadCount + "probe": 0 // lastUpdateTime + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 50. 获取图转视频分类 `GET /v1/image/img2video/categories` | 鉴权: 需要 @@ -1897,7 +6724,85 @@ } ``` -### 42. 获取图转视频任务列表 +V2 完整请求体: + +``` +// categories — 获取图转视频分类 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "MckCynrhgryF3CC/4R7nVxIjtn/UVOCeJYwjKsE1byc=", // AES(/v1/image/img2video/categories) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": [ + { + "brigade": "", // name + "greylist": "", // icon + "federation": 0 // id + } + ] // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 51. 获取图转视频任务列表 `GET /v1/image/img2video/tasks` | 鉴权: 需要 @@ -1924,23 +6829,141 @@ "helm": 0, // code (int) 状态码,0=成功 "sidekick": [ // data (array) 任务列表 { - "preempt": {}, // previewVideo (object) 预览视频 - "preprocess": {}, // resolution720p (object) 720p分辨率 + "preempt": { // previewVideo (object) 预览视频 + "lowUrl": "", // lowUrl (string) 低分辨率视频URL + "digitize": "", // url (string) 视频URL + "hlsUrl": "" // hlsUrl (string) HLS流URL + }, + "preprocess": { // resolution720p (object) 720p分辨率配置 + "cosmos": 0, // duration (int) 时长(秒) + "greaves": 0, // credits (int) 所需积分 + "greylist": "" // icon (string) 图标URL + }, "simplify": 0, // imageCount (int) 图片数量 "nexus": "", // ext (string) 扩展参数 "cipher": "", // taskType (string) 任务类型 - "reverify": {}, // resolution480p (object) 480p分辨率 + "reverify": { // resolution480p (object) 480p分辨率配置 + "cosmos": 0, // duration (int) 时长(秒) + "greaves": 0, // credits (int) 所需积分 + "greylist": "" // icon (string) 图标URL + }, "congregation": "", // templateName (string) 模板名称 "allowance": false, // needopt (boolean) 是否优化,通过配置控制 - "subscribe": {}, // label (object) 标签 + "subscribe": { // label (object) 标签 + "greylist": "" // icon (string) 标签图标URL + }, "glossary": "", // title (string) 标题 - "extract": {} // previewImage (object) 预览图 + "extract": { // previewImage (object) 预览图 + "digitize": "" // url (string) 图片URL + } } ] } ``` -### 43. 获取预签名上传URL +V2 完整请求体: + +``` +// tasks — 获取图转视频任务列表 +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "MckCynrhgryF3CC/4R7nV+FeAz7t9nA8SXvtDdT0Tsk=", // AES(/v1/image/img2video/tasks) +// "power_level": "pk2LyrB1C4p7ga0Wml8zIg==", // AES(GET) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// 注意: 原始接口为 GET,走代理后统一 POST,仍需传 V2 请求体(业务字段为空) +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": [ + { + "preempt": { + "lowUrl": "", + "digitize": "", // url + "hlsUrl": "" + }, // previewVideo + "preprocess": { + "cosmos": 0, // duration + "greaves": 0, // credits + "greylist": "" // icon + }, // resolution720p + "simplify": 0, // imageCount + "nexus": "", // ext + "cipher": "", // taskType + "reverify": { + "cosmos": 0, // duration + "greaves": 0, // credits + "greylist": "" // icon + }, // resolution480p + "congregation": "", // templateName + "allowance": false, // needopt + "subscribe": { + "greylist": "" // icon + }, // label + "glossary": "", // title + "extract": { + "digitize": "" // url + } // previewImage + } + ] // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + +### 52. 获取预签名上传URL `POST /v1/image/upload-presigned-url` | 鉴权: 需要 @@ -1979,6 +7002,89 @@ } ``` +V2 完整请求体: + +``` +// upload_presigned_url — 获取预签名上传URL +// POST {baseUrl}/quester/defender/summoner +// +// 代理请求: +// { +// "hero_class": "petsHeroAI", // appId 明文 +// "pet_species": "71cQz8GwS59uZWbDSUl3g5Tw3bsKFw2qnr3fhePqBfw=", // AES(/v1/image/upload-presigned-url) +// "power_level": "VP+tlhOYAAqQIAPPKEmKEg==", // AES(POST) +// "quest_rank": "", // AES(映射后的Header字段名构造JSON) → Base64 +// "battle_score": "", // AES(映射后的URL参数字段名构造JSON) → Base64 +// "loyalty_index": "", // AES(V2包装后的业务数据) → Base64 +// "billing_addr": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "utm_term": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "cluster_id": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "lsn_value": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "accuracy_val": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// "dir_path": "<随机4-8位字母数字,AES加密→Base64>" // 噪音 +// } +// +// V2 请求体 — 填入业务值后 AES 加密,填入 loyalty_index +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "gateway": "", // fileName1 (string) 文件名1 + "action": "", // fileName2 (string) 文件名2 + "pauldron": "", // contentType (string) 文件MIME类型 + "stronghold": 0 // expectedSize (int) 预期文件大小 + } + } + } + } + }, + "roar": "<随机4-8位字母数字,AES加密→Base64>", + "clash": "<随机4-8位字母数字,AES加密→Base64>", + "thunder": "<随机4-8位字母数字,AES加密→Base64>", + "rumble": "<随机4-8位字母数字,AES加密→Base64>", + "howl": "<随机4-8位字母数字,AES加密→Base64>", + "growl": "<随机4-8位字母数字,AES加密→Base64>" +} +``` + +V2 完整响应体 (解密后): + +```json +{ + "arsenal": 4, + "vault": { + "tome": { + "codex": { + "grimoire": { + "sanctum": { + "rampart": "", // msg + "helm": 0, // code + "sidekick": { + "bolster": "", // uploadUrl1 + "soar": 0, // expiresIn + "remap": { + }, // requiredHeaders + "expound": "", // uploadUrl2 + "train": "", // filePath2 + "recruit": "" // filePath1 + } // data + } + } + } + } + }, + "roar": "Gpi2C7Dg", + "clash": "XDiAM66y", + "thunder": "O0xTOn6x", + "rumble": "3xGSz02a", + "howl": "WRN1EzZY", + "growl": "1TZlZMZd" +} +``` + ## 错误码 | code | 说明 | @@ -2000,18 +7106,33 @@ | accountId | wizard | | accountName | captain | | activityId | warrior | +| activitys | summon | | actualAmount | guardian | +| addCredits | awaken | | adsTokenId | champion | +| age | transform | | amount | hero | +| animate | ascend | | app | sentinel | +| appFbConfig | evolve | | appType | ranger | +| appraise | unleash | | approveState | paladin | | aspectRatio | quest | | automaticRenewal | legend | +| avatar | realm | +| baseCredits | wield | | baseUrl | destiny | | begTime | emblem | +| bonus | forge | +| bonusCredits | conjure | +| bonusRatio | enchant | +| businessId | vanquish | +| businessType | defend | | campaignInfo | relic | | card | artifact | +| categoryId | insignia | +| categoryName | patrol | | ch | crest | | channel | lineage | | channelType | armor | @@ -2019,28 +7140,62 @@ | clientId | gauntlet | | code | helm | | coder | mantle | +| config | charge | +| content | cloak | | contentType | pauldron | | count | visor | +| countId | command | | country | vambrace | +| countryCode | navigate | +| creatTime | explore | +| createTime | discover | +| createTimeText | uncover | +| credit | reveal | +| creditPromotion | unlock | +| credits | greaves | +| creditsRecordUrl | conquer | +| cryptoInvoiceUrl | protect | | currency | familiar | +| current | empower | | cvcCode | companion | | data | sidekick | | days | species | +| department | inspire | +| desc | valor | +| description | pedigree | | devId | ancestry | | deviceId | origin | +| discountOff | lead | | domain | totem | +| domains | avatar | | dt | sigil | +| duration | cosmos | +| email | galaxy | +| enabled | nebula | | endTime | citadel | | event | fortress | | expectedSize | stronghold | | expireMonth | dominion | | expireYear | sanctuary | +| expiresIn | soar | | ext | nexus | +| extConfig | surge | | extJson | vanguard | +| face | dash | +| faceIndex | leap | +| faceInfos | strike | +| face_index | parry | +| feature | dodge | +| features | scout | +| feedbackId | track | | feedbackIds | registry | | fileName | layer | | fileName1 | gateway | | fileName2 | action | +| filePath | hunt | +| filePath1 | recruit | +| filePath2 | train | +| fileUrls | inventory | | filterCountry | blueprint | | filterDomain | vendor | | filterOwnerId | participant | @@ -2048,57 +7203,125 @@ | filterTaskType | package | | filterVip | quotation | | firstName | appointment | +| firstRegister | equip | +| forcePayCenter | upgrade | | fps | notification | +| frameIndex | unite | +| frame_index | pledge | +| freeBlurTimes | vow | +| freeTimes | decree | +| gender | venture | | googleClientId | discourse | +| h5UrlConfig | pursue | +| hasNext | manifest | | hash | mediation | | hashIsZero | corpus | | headFaceIndex | histogram | | headImg | agent | | headPos | bond | | headType | arena | +| hint | traverse | | host | initiative | +| icon | greylist | +| id | federation | +| imageCount | simplify | | imageFaceIndex | committee | | imageId | royalty | +| imageInfos | curate | | img | revenue | | imgCount | declaration | | imgId | criterion | +| imgList | downsample | +| imgType | reconnect | +| imgUrl | reconfigure | +| index | prewarm | | inviteBy | item | +| invitedCnt | deduce | +| isBlur | reify | +| isVip | generate | +| issuerUrl | merge | | keepUserId | series | +| label | subscribe | | lang | seminar | | lastName | bazaar | +| lastUpdateTime | probe | | link | festival | | list | junction | +| maxLimit | architect | | method | heap | +| methodActivitys | modify | +| methodChannels | restore | | model | authorization | | msg | rampart | +| name | brigade | +| needCredits | deserialize | | needImage | assembly | | needUndress | directive | | needopt | allowance | | negativePrompt | underwriter | +| note | extrapolate | +| openType | transplant | +| optimizeCountSql | harvest | +| optimizeJoinOfCountSql | seek | | orderId | gazette | +| orders | identify | | originAmount | curriculum | | owner | genealogy | | p12KeyPath | arraignment | | packageName | folio | | page | trophy | +| pages | coordinate | | password | township | +| payCenterUrl | switch | +| payId | assert | +| payMethod | intercept | | payMethods | wallet | +| payStatus | destroy | +| payTime | restart | +| payTypeList | handshake | +| payUrl | convert | +| paylink | unzip | | paymentMethod | resource | +| paymentMethods | renew | +| permissions | sandbox | | phone | block | | pkg | portal | | platform | trigger | +| previewImage | extract | +| previewVideo | preempt | +| productType | subtract | +| progress | dice | | prompt | ledger | | publicKey | template | | purchaseData | merchant | +| queueCnt | revert | +| read | redact | | receipt | attendee | +| recent | entrap | +| recentlyUsed | finalize | +| recommend | deny | +| records | intensify | +| redirectUrl | disambiguate | | referer | digest | | refererType | campaign | +| replyStatus | voxelize | +| requiredHeaders | remap | | resolution | booking | +| resolution480p | reverify | +| resolution720p | preprocess | +| resulotion | theorize | +| rewardCredits | represent | +| rewardRatio | render | +| role | evaluate | +| searchCount | suspend | +| selected | deploy | | serviceAccountEmail | alert | | sharedSecret | comment | +| showName | mold | | sign | resolution | | signature | sample | | size | heatmap | +| sort | invent | | srcFaceImgBase64 | attachment | | srcFaceIndex | stadium | | srcImg | refuge | @@ -2109,188 +7332,72 @@ | srcImgBase64 | profit | | srcImgUrl | statute | | srcVideo | compendium | +| state | listing | | status | line | | style | webinar | +| subBusinessType | tailor | | subPaymentMethod | ceremony | +| subScribeValidTime | tokenize | +| subscriptionActivitys | cleanse | +| subscriptionPeriod | distribute | +| sumCredits | emit | +| sys | associate | +| t2IConfig | regulate | +| tag | constrain | +| tags | rally | | targetId | node | +| targetInvitedCnt | authorize | +| taskId | tree | | taskIds | privilege | | taskType | cipher | | taskTypes | platoon | +| templateFaceUrl | simulate | +| templateFifCredits | pause | +| templateFifDuration | decommission | +| templateFifUrl | acknowledge | | templateName | congregation | +| templateTfCredits | pipe | +| templateTfDuration | unwrap | +| templateTfUrl | extend | +| templateType | recharge | | templateTypes | endowment | +| templateUrl | inject | | tgId | concession | +| tgName | defer | | tgOrderId | insurer | +| theme | parallelize | +| title | glossary | | token | thesis | +| total | weigh | +| totalUnreadCount | defragment | | transactionId | chronicle | | truePrompt | deposition | | ts | quarto | | type | accolade | | types | municipality | -| userApplePayList | gallery | -| userId | asset | -| userInfoType | frame | -| username | pulse | -| val | journal | -| value | schema | -| verifyCode | supplier | -| videoFaceIndex | applicant | -| videoFrameIndex | fragment | -| videoSize | summary | -| activitys | summon | -| addCredits | awaken | -| appFbConfig | evolve | -| appraise | unleash | -| config | charge | -| countId | command | -| countryCode | navigate | -| credit | reveal | -| creditPromotion | unlock | -| creditsRecordUrl | conquer | -| cryptoInvoiceUrl | protect | -| current | empower | -| department | inspire | -| description | pedigree | -| domains | avatar | -| duration | cosmos | -| email | galaxy | -| enabled | nebula | -| expiresIn | soar | -| extConfig | surge | -| faceInfos | strike | -| feature | dodge | -| features | scout | -| filePath | hunt | -| filePath1 | recruit | -| filePath2 | train | -| firstRegister | equip | -| forcePayCenter | upgrade | -| freeBlurTimes | vow | -| freeTimes | decree | -| h5UrlConfig | pursue | -| hasNext | manifest | -| hint | traverse | -| imgUrl | reconfigure | -| invitedCnt | deduce | -| isBlur | reify | -| isVip | generate | -| issuerUrl | merge | -| lastUpdateTime | probe | -| maxLimit | architect | -| methodActivitys | modify | -| methodChannels | restore | -| needCredits | deserialize | -| openType | transplant | -| optimizeCountSql | harvest | -| optimizeJoinOfCountSql | seek | -| orders | identify | -| pages | coordinate | -| payCenterUrl | switch | -| payStatus | destroy | -| payTypeList | handshake | -| payUrl | convert | -| paymentMethods | renew | -| permissions | sandbox | -| recent | entrap | -| records | intensify | -| redirectUrl | disambiguate | -| requiredHeaders | remap | -| role | evaluate | -| searchCount | suspend | -| subScribeValidTime | tokenize | -| subscriptionActivitys | cleanse | -| sumCredits | emit | -| sys | associate | -| t2IConfig | regulate | -| tags | rally | -| targetInvitedCnt | authorize | -| tgName | defer | -| total | weigh | -| totalUnreadCount | defragment | | unreadCountList | footprint | +| updateTime | fork | | uploadUrl | shed | | uploadUrl1 | bolster | | uploadUrl2 | expound | +| url | digitize | +| user | rebalance | +| userApplePayList | gallery | +| userId | asset | +| userInfoType | frame | | userName | terminal | | userToken | reevaluate | | userType | prefetch | +| username | pulse | | usign | retrospect | -| videoUrl | promotion | -| age | transform | -| animate | ascend | -| avatar | realm | -| baseCredits | wield | -| bonus | forge | -| bonusCredits | conjure | -| bonusRatio | enchant | -| businessId | vanquish | -| businessType | defend | -| categoryId | insignia | -| categoryName | patrol | -| content | cloak | -| creatTime | explore | -| createTime | discover | -| createTimeText | uncover | -| credits | greaves | -| discountOff | lead | -| face | dash | -| faceIndex | leap | -| face_index | parry | -| feedbackId | track | -| fileUrls | inventory | -| frameIndex | unite | -| frame_index | pledge | -| gender | venture | -| icon | greylist | -| id | federation | -| imageCount | simplify | -| imageInfos | curate | -| imgList | downsample | -| imgType | reconnect | -| index | prewarm | -| label | subscribe | -| name | brigade | -| note | extrapolate | -| payId | assert | -| payMethod | intercept | -| payTime | restart | -| paylink | unzip | -| previewImage | extract | -| previewVideo | preempt | -| productType | subtract | -| progress | dice | -| queueCnt | revert | -| read | redact | -| recentlyUsed | finalize | -| recommend | deny | -| replyStatus | voxelize | -| resolution480p | reverify | -| resolution720p | preprocess | -| resulotion | theorize | -| rewardCredits | represent | -| rewardRatio | render | -| selected | deploy | -| showName | mold | -| sort | invent | -| state | listing | -| subBusinessType | tailor | -| subscriptionPeriod | distribute | -| tag | constrain | -| taskId | tree | -| templateFaceUrl | simulate | -| templateFifCredits | pause | -| templateFifDuration | decommission | -| templateFifUrl | acknowledge | -| templateTfCredits | pipe | -| templateTfDuration | unwrap | -| templateTfUrl | extend | -| templateType | recharge | -| templateUrl | inject | -| theme | parallelize | -| title | glossary | -| updateTime | fork | -| url | digitize | -| user | rebalance | +| val | journal | +| value | schema | +| verifyCode | supplier | | videoDuration | demonstrate | +| videoFaceIndex | applicant | +| videoFrameIndex | fragment | +| videoSize | summary | +| videoUrl | promotion | | waitTime | flowStep | | x1 | invoke | | x2 | sync | diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..af43d70 --- /dev/null +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,140 @@ +{ + "images" : [ + { + "filename" : "Icon-App-20x20@1x.png", + "idiom" : "iphone", + "scale" : "1x", + "size" : "20x20" + }, + { + "filename" : "Icon-App-20x20@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "Icon-App-20x20@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "filename" : "Icon-App-29x29@1x.png", + "idiom" : "iphone", + "scale" : "1x", + "size" : "29x29" + }, + { + "filename" : "Icon-App-29x29@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "Icon-App-29x29@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "filename" : "Icon-App-40x40@1x.png", + "idiom" : "iphone", + "scale" : "1x", + "size" : "40x40" + }, + { + "filename" : "Icon-App-40x40@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "Icon-App-40x40@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "filename" : "Icon-App-60x60@1x.png", + "idiom" : "iphone", + "scale" : "1x", + "size" : "60x60" + }, + { + "filename" : "Icon-App-60x60@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "filename" : "Icon-App-60x60@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "filename" : "Icon-App-20x20@1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "filename" : "Icon-App-20x20@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "Icon-App-29x29@1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "filename" : "Icon-App-29x29@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "Icon-App-40x40@1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "filename" : "Icon-App-40x40@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "Icon-App-76x76@1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "filename" : "Icon-App-76x76@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "filename" : "Icon-App-83.5x83.5@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "filename" : "Icon-App-1024x1024@1x.png", + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-1024.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-1024.png new file mode 100644 index 0000000..3a2e104 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-1024.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-20@2x.png new file mode 100644 index 0000000..5dbb3da Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-20@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-20@3x.png new file mode 100644 index 0000000..e4b5fa7 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-20@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png new file mode 100644 index 0000000..23fad36 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png new file mode 100644 index 0000000..726620b Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png new file mode 100644 index 0000000..56dc7b2 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png new file mode 100644 index 0000000..3310d7a Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png new file mode 100644 index 0000000..3310d7a Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png new file mode 100644 index 0000000..0e0fc0f Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png new file mode 100644 index 0000000..a94168b Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png new file mode 100644 index 0000000..2d02a71 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000..3a2e104 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 0000000..09b84ca Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000..5dbb3da Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000..e4b5fa7 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000..80a0daa Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000..23fad36 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 0000000..726620b Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 0000000..5dbb3da Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000..56dc7b2 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000..3310d7a Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 0000000..18ed6e7 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png new file mode 100644 index 0000000..be7a911 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png new file mode 100644 index 0000000..52b4bba Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png new file mode 100644 index 0000000..c64f323 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png new file mode 100644 index 0000000..e4b5fa7 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000..3310d7a Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000..0e0fc0f Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png new file mode 100644 index 0000000..3c1380d Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 0000000..92b769c Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000..1c7b1ad Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000..a94168b Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000..2d02a71 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83x83@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83x83@1x.png new file mode 100644 index 0000000..724e958 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83x83@1x.png differ diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index cbc5914..967d025 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -5,7 +5,7 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName - MagiEvery AI + PetsHero NSPhotoLibraryUsageDescription We need access to your photos to use as reference for AI image generation. NSPhotoLibraryAddUsageDescription diff --git a/lib/core/api/api_config.dart b/lib/core/api/api_config.dart index 038c8f2..c218f87 100644 --- a/lib/core/api/api_config.dart +++ b/lib/core/api/api_config.dart @@ -5,8 +5,8 @@ abstract final class ApiConfig { /// AES 密钥 static const String aesKey = 'liyP4LkMfP68XvCt'; - /// 应用 ID - static const String appId = 'com.petsheroai.app'; + /// 应用标识 (sentinel) + static const String appId = 'HAndroid'; /// 应用包名 static const String packageName = 'com.petsheroai.app'; diff --git a/lib/core/api/services/payment_api.dart b/lib/core/api/services/payment_api.dart index 9a547fc..0017f4b 100644 --- a/lib/core/api/services/payment_api.dart +++ b/lib/core/api/services/payment_api.dart @@ -1,13 +1,14 @@ import '../api_client.dart'; +import '../api_config.dart'; import '../proxy_client.dart'; /// 支付相关 API abstract final class PaymentApi { static final _client = ApiClient.instance.proxy; - /// 获取 Google 商品列表 + /// 获取 Google 商品列表(Android) static Future getGooglePayActivities({ - required String sentinel, + String? sentinel, String? shield, String? vambrace, String? portal, @@ -16,17 +17,17 @@ abstract final class PaymentApi { path: '/v1/payment/getGooglePayActivities', method: 'GET', queryParams: { - 'sentinel': sentinel, + 'sentinel': sentinel ?? ApiConfig.appId, + 'portal': portal ?? ApiConfig.packageName, if (shield != null) 'shield': shield, if (vambrace != null) 'vambrace': vambrace, - if (portal != null) 'portal': portal, }, ); } - /// 获取 Apple 商品列表 + /// 获取 Apple 商品列表(iOS) static Future getApplePayActivities({ - required String sentinel, + String? sentinel, String? shield, String? vambrace, String? portal, @@ -35,10 +36,10 @@ abstract final class PaymentApi { path: '/v1/payment/getApplePayActivities', method: 'GET', queryParams: { - 'sentinel': sentinel, + 'sentinel': sentinel ?? 'HAndroid', + 'portal': portal ?? ApiConfig.packageName, if (shield != null) 'shield': shield, if (vambrace != null) 'vambrace': vambrace, - if (portal != null) 'portal': portal, }, ); } diff --git a/lib/core/auth/auth_service.dart b/lib/core/auth/auth_service.dart index e397f42..8d82646 100644 --- a/lib/core/auth/auth_service.dart +++ b/lib/core/auth/auth_service.dart @@ -126,6 +126,10 @@ class AuthService { if (name != null && name.isNotEmpty) { UserState.setUserName(name); } + final countryCode = data?['navigate'] as String?; + if (countryCode != null) { + UserState.setNavigate(countryCode); + } } else { _log('init: 登录失败'); } diff --git a/lib/core/user/user_state.dart b/lib/core/user/user_state.dart index 768fc5d..bcc9a81 100644 --- a/lib/core/user/user_state.dart +++ b/lib/core/user/user_state.dart @@ -8,6 +8,8 @@ class UserState { static final ValueNotifier userId = ValueNotifier(null); static final ValueNotifier avatar = ValueNotifier(null); static final ValueNotifier userName = ValueNotifier(null); + /// 国家码 (navigate / countryCode) + static final ValueNotifier navigate = ValueNotifier(null); static void setCredits(int? value) { credits.value = value; @@ -25,6 +27,10 @@ class UserState { userName.value = value; } + static void setNavigate(String? value) { + navigate.value = value; + } + static String formatCredits(int? value) { if (value == null) return '--'; return value.toString().replaceAllMapped( diff --git a/lib/features/recharge/models/activity_item.dart b/lib/features/recharge/models/activity_item.dart new file mode 100644 index 0000000..f98c8a1 --- /dev/null +++ b/lib/features/recharge/models/activity_item.dart @@ -0,0 +1,69 @@ +/// 商品/活动项(V2 字段映射)- getGooglePayActivities / getApplePayActivities +class ActivityItem { + const ActivityItem({ + required this.code, + required this.title, + required this.credits, + required this.actualAmount, + this.originAmount, + this.discountOff, + this.bonus = 0, + this.activityId, + this.currency, + }); + + final String code; // helm 产品代码 + final String title; // glossary 标题 + final int credits; // greaves 积分数 + final String actualAmount; // guardian 实际金额 + final String? originAmount; // curriculum 原价 + final String? discountOff; // lead 折扣 + final int bonus; // forge 赠送积分 + final String? activityId; // warrior 活动ID + final String? currency; // familiar 货币 + + factory ActivityItem.fromJson(Map json) { + return ActivityItem( + code: json['helm']?.toString() ?? '', + title: json['glossary']?.toString() ?? '', + credits: (json['greaves'] as num?)?.toInt() ?? 0, + actualAmount: json['guardian']?.toString() ?? '', + originAmount: json['curriculum']?.toString(), + discountOff: json['lead']?.toString(), + bonus: (json['forge'] as num?)?.toInt() ?? 0, + activityId: json['warrior']?.toString(), + currency: json['familiar']?.toString(), + ); + } + + /// 显示积分文案,如 "100 Credits" + String get creditsDisplay => + credits > 0 ? '${credits.toString().replaceAllMapped(RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))'), (m) => '${m[1]},')} Credits' : title; + + /// 显示价格文案,如 "¥6" 或 "¥25 Save ¥5" + String get priceDisplay { + if (actualAmount.isEmpty) return ''; + if (discountOff != null && discountOff!.isNotEmpty) { + return '$actualAmount $discountOff'; + } + if (originAmount != null && + originAmount!.isNotEmpty && + originAmount != actualAmount) { + final diff = _diffAmount(originAmount!, actualAmount); + return diff.isNotEmpty ? '$actualAmount Save $diff' : actualAmount; + } + return actualAmount; + } + + String _diffAmount(String origin, String actual) { + try { + final o = double.tryParse(origin.replaceAll(RegExp(r'[^\d.]'), '')) ?? 0; + final a = double.tryParse(actual.replaceAll(RegExp(r'[^\d.]'), '')) ?? 0; + final d = (o - a).toStringAsFixed(0); + final currencySymbol = RegExp(r'^[^\d]+').stringMatch(actual) ?? ''; + return '$currencySymbol$d'; + } catch (_) { + return ''; + } + } +} diff --git a/lib/features/recharge/recharge_screen.dart b/lib/features/recharge/recharge_screen.dart index 38914ab..0b7ca15 100644 --- a/lib/features/recharge/recharge_screen.dart +++ b/lib/features/recharge/recharge_screen.dart @@ -1,16 +1,88 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_lucide/flutter_lucide.dart'; +import '../../core/api/services/payment_api.dart'; +import '../../core/auth/auth_service.dart'; import '../../core/theme/app_colors.dart'; import '../../core/user/user_state.dart'; import '../../core/theme/app_spacing.dart'; import '../../core/theme/app_typography.dart'; import '../../shared/widgets/top_nav_bar.dart'; +import 'models/activity_item.dart'; + /// Recharge screen - matches Pencil tPjdN -class RechargeScreen extends StatelessWidget { +/// Tier cards (DC6NS, YRaOG, QlNz6) 对接 getGooglePayActivities / getApplePayActivities +class RechargeScreen extends StatefulWidget { const RechargeScreen({super.key}); + @override + State createState() => _RechargeScreenState(); +} + +class _RechargeScreenState extends State { + List _activities = []; + bool _loadingTiers = true; + String? _tierError; + + @override + void initState() { + super.initState(); + _fetchActivities(); + } + + Future _fetchActivities() async { + setState(() { + _loadingTiers = true; + _tierError = null; + }); + try { + await AuthService.loginComplete; + final country = UserState.navigate.value ?? ''; + + final res = defaultTargetPlatform == TargetPlatform.iOS + ? await PaymentApi.getApplePayActivities( + vambrace: country.isEmpty ? null : country, + ) + : await PaymentApi.getGooglePayActivities( + vambrace: country.isEmpty ? null : country, + ); + if (!mounted) return; + if (res.isSuccess && res.data != null) { + final data = res.data as Map?; + final summon = data?['summon'] as List? ?? []; + final list = summon + .whereType>() + .map((e) => ActivityItem.fromJson(e)) + .where((e) => e.code.isNotEmpty) + .toList(); + setState(() { + _activities = list; + _loadingTiers = false; + }); + } else { + setState(() { + _activities = []; + _loadingTiers = false; + _tierError = res.msg.isNotEmpty ? res.msg : 'Failed to load'; + }); + } + } catch (e) { + if (mounted) { + setState(() { + _activities = []; + _loadingTiers = false; + _tierError = e.toString(); + }); + } + } + } + + void _onBuy(ActivityItem item) { + // TODO: 创建支付订单 + } + @override Widget build(BuildContext context) { return Scaffold( @@ -46,23 +118,70 @@ class RechargeScreen extends StatelessWidget { ), ), ), - _TierCard( - credits: '100 Credits', - price: '¥6', - onBuy: () {}, - ), - const SizedBox(height: AppSpacing.xl), - _TierCardRecommended( - credits: '500 Credits', - price: '¥25 Save ¥5', - onBuy: () {}, - ), - const SizedBox(height: AppSpacing.xl), - _TierCardPopular( - credits: '1,000 Credits', - price: '¥45 Save ¥15', - onBuy: () {}, - ), + if (_loadingTiers) + const Padding( + padding: EdgeInsets.all(AppSpacing.xxl), + child: Center( + child: SizedBox( + width: 24, + height: 24, + child: CircularProgressIndicator(strokeWidth: 2), + ), + ), + ) + else if (_tierError != null) + Padding( + padding: const EdgeInsets.symmetric( + horizontal: AppSpacing.screenPadding), + child: Column( + children: [ + Text( + _tierError!, + style: AppTypography.bodyRegular.copyWith( + color: AppColors.textSecondary, + ), + ), + const SizedBox(height: AppSpacing.md), + TextButton( + onPressed: _fetchActivities, + child: const Text('Retry'), + ), + ], + ), + ) + else if (_activities.isEmpty) + Padding( + padding: const EdgeInsets.symmetric( + horizontal: AppSpacing.screenPadding), + child: Text( + 'No packages available', + style: AppTypography.bodyRegular.copyWith( + color: AppColors.textSecondary, + ), + ), + ) + else + ...List.generate(_activities.length, (i) { + final item = _activities[i]; + final isRecommended = i == 1; + final isPopular = i == 2; + return Padding( + padding: EdgeInsets.only( + bottom: i < _activities.length - 1 + ? AppSpacing.xl + : 0, + ), + child: _TierCardFromActivity( + item: item, + badge: isRecommended + ? _TierBadge.recommended + : isPopular + ? _TierBadge.popular + : _TierBadge.none, + onBuy: () => _onBuy(item), + ), + ); + }), ], ), ), @@ -70,6 +189,108 @@ class RechargeScreen extends StatelessWidget { } } +enum _TierBadge { none, recommended, popular } + +class _TierCardFromActivity extends StatelessWidget { + const _TierCardFromActivity({ + required this.item, + required this.badge, + required this.onBuy, + }); + + final ActivityItem item; + final _TierBadge badge; + final VoidCallback onBuy; + + @override + Widget build(BuildContext context) { + final content = Container( + margin: const EdgeInsets.symmetric(horizontal: AppSpacing.screenPadding), + padding: const EdgeInsets.symmetric( + horizontal: AppSpacing.xxl, + vertical: AppSpacing.xl, + ), + decoration: BoxDecoration( + color: AppColors.surface, + borderRadius: BorderRadius.circular(16), + border: Border.all(color: AppColors.border), + boxShadow: [ + BoxShadow( + color: AppColors.shadowLight, + blurRadius: 6, + offset: const Offset(0, 2), + ), + ], + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + item.creditsDisplay, + style: AppTypography.bodyLarge.copyWith( + color: AppColors.textPrimary, + ), + ), + SizedBox(height: badge == _TierBadge.none ? AppSpacing.xs : AppSpacing.sm), + Text( + item.priceDisplay, + style: AppTypography.bodyRegular.copyWith( + color: AppColors.textSecondary, + ), + ), + ], + ), + _BuyButton(onTap: onBuy), + ], + ), + ); + + if (badge == _TierBadge.none) { + return content; + } + + return Stack( + clipBehavior: Clip.none, + children: [ + content, + Positioned( + top: 0, + right: AppSpacing.screenPadding, + child: Container( + padding: const EdgeInsets.symmetric( + horizontal: AppSpacing.md, + vertical: AppSpacing.xs, + ), + decoration: BoxDecoration( + color: badge == _TierBadge.recommended + ? AppColors.primaryLight + : AppColors.accentOrangeLight, + borderRadius: const BorderRadius.only( + topRight: Radius.circular(16), + bottomLeft: Radius.circular(16), + ), + ), + child: Text( + badge == _TierBadge.recommended + ? 'Recommended' + : 'Most Popular', + style: AppTypography.label.copyWith( + color: badge == _TierBadge.recommended + ? AppColors.primary + : AppColors.accentOrange, + fontWeight: FontWeight.w600, + ), + ), + ), + ), + ], + ); + } +} + class _CreditsSection extends StatelessWidget { const _CreditsSection({required this.currentCredits}); @@ -122,243 +343,6 @@ class _CreditsSection extends StatelessWidget { } } -class _TierCard extends StatelessWidget { - const _TierCard({ - required this.credits, - required this.price, - required this.onBuy, - }); - - final String credits; - final String price; - final VoidCallback onBuy; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.symmetric(horizontal: AppSpacing.screenPadding), - padding: const EdgeInsets.symmetric( - horizontal: AppSpacing.xxl, - vertical: AppSpacing.xl, - ), - decoration: BoxDecoration( - color: AppColors.surface, - borderRadius: BorderRadius.circular(16), - border: Border.all(color: AppColors.border), - boxShadow: [ - BoxShadow( - color: AppColors.shadowLight, - blurRadius: 6, - offset: const Offset(0, 2), - ), - ], - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - credits, - style: AppTypography.bodyLarge.copyWith( - color: AppColors.textPrimary, - ), - ), - const SizedBox(height: AppSpacing.xs), - Text( - price, - style: AppTypography.bodyRegular.copyWith( - color: AppColors.textSecondary, - ), - ), - ], - ), - _BuyButton(onTap: onBuy), - ], - ), - ); - } -} - -class _TierCardRecommended extends StatelessWidget { - const _TierCardRecommended({ - required this.credits, - required this.price, - required this.onBuy, - }); - - final String credits; - final String price; - final VoidCallback onBuy; - - @override - Widget build(BuildContext context) { - return Stack( - clipBehavior: Clip.none, - children: [ - Container( - margin: - const EdgeInsets.symmetric(horizontal: AppSpacing.screenPadding), - padding: const EdgeInsets.symmetric( - horizontal: AppSpacing.xxl, - vertical: AppSpacing.xl, - ), - decoration: BoxDecoration( - color: AppColors.surface, - borderRadius: BorderRadius.circular(16), - border: Border.all(color: AppColors.border), - boxShadow: [ - BoxShadow( - color: AppColors.shadowLight, - blurRadius: 6, - offset: const Offset(0, 2), - ), - ], - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - credits, - style: AppTypography.bodyLarge.copyWith( - color: AppColors.textPrimary, - ), - ), - const SizedBox(height: AppSpacing.sm), - Text( - price, - style: AppTypography.bodyRegular.copyWith( - color: AppColors.textSecondary, - ), - ), - ], - ), - _BuyButton(onTap: onBuy), - ], - ), - ), - Positioned( - top: 0, - right: AppSpacing.screenPadding, - child: Container( - padding: const EdgeInsets.symmetric( - horizontal: AppSpacing.md, - vertical: AppSpacing.xs, - ), - decoration: BoxDecoration( - color: AppColors.primaryLight, - borderRadius: const BorderRadius.only( - topRight: Radius.circular(16), - bottomLeft: Radius.circular(16), - ), - ), - child: Text( - 'Recommended', - style: AppTypography.label.copyWith( - color: AppColors.primary, - fontWeight: FontWeight.w600, - ), - ), - ), - ), - ], - ); - } -} - -class _TierCardPopular extends StatelessWidget { - const _TierCardPopular({ - required this.credits, - required this.price, - required this.onBuy, - }); - - final String credits; - final String price; - final VoidCallback onBuy; - - @override - Widget build(BuildContext context) { - return Stack( - clipBehavior: Clip.none, - children: [ - Container( - margin: - const EdgeInsets.symmetric(horizontal: AppSpacing.screenPadding), - padding: const EdgeInsets.symmetric( - horizontal: AppSpacing.xxl, - vertical: AppSpacing.xl, - ), - decoration: BoxDecoration( - color: AppColors.surface, - borderRadius: BorderRadius.circular(16), - border: Border.all(color: AppColors.border), - boxShadow: [ - BoxShadow( - color: AppColors.shadowLight, - blurRadius: 6, - offset: const Offset(0, 2), - ), - ], - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - credits, - style: AppTypography.bodyLarge.copyWith( - color: AppColors.textPrimary, - ), - ), - const SizedBox(height: AppSpacing.sm), - Text( - price, - style: AppTypography.bodyRegular.copyWith( - color: AppColors.textSecondary, - ), - ), - ], - ), - _BuyButton(onTap: onBuy), - ], - ), - ), - Positioned( - top: 0, - right: AppSpacing.screenPadding, - child: Container( - padding: const EdgeInsets.symmetric( - horizontal: AppSpacing.md, - vertical: AppSpacing.xs, - ), - decoration: BoxDecoration( - color: AppColors.accentOrangeLight, - borderRadius: const BorderRadius.only( - topRight: Radius.circular(16), - bottomLeft: Radius.circular(16), - ), - ), - child: Text( - 'Most Popular', - style: AppTypography.label.copyWith( - color: AppColors.accentOrange, - fontWeight: FontWeight.w600, - ), - ), - ), - ), - ], - ); - } -} - class _BuyButton extends StatelessWidget { const _BuyButton({required this.onTap}); diff --git a/pubspec.yaml b/pubspec.yaml index a802282..3c0a3fa 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -9,7 +9,7 @@ environment: dependencies: flutter: sdk: flutter - adjust_sdk: ^5.5.0 + adjust_sdk: ^5.5.1 cupertino_icons: ^1.0.6 play_install_referrer: ^0.5.0 flutter_lucide: ^1.8.2 @@ -30,6 +30,13 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^3.0.0 + flutter_launcher_icons: ^0.14.4 + +flutter_launcher_icons: + android: true + ios: true + image_path: "design/images/generated-1773069485332.png" + remove_alpha_ios: true flutter: uses-material-design: true