3.4 KiB
3.4 KiB
Flutter App 配置与内购对接
本文只描述当前 App 端需要直接调用的 gateway HTTP 接口。所有业务接口都返回统一外壳:
{
"code": "OK",
"message": "ok",
"request_id": "server-generated-request-id",
"data": {}
}
1. 检查 App 更新
GET /api/v1/app/version
公开接口,不需要登录。客户端必须传平台,建议同时传当前编译版本号。
请求头:
| Header | 必填 | 说明 |
|---|---|---|
X-App-Code |
否 | App 编码,默认 lalu。 |
X-App-Platform |
是 | android 或 ios。也可以用 query platform 覆盖。 |
X-App-Build-Number |
建议 | 当前客户端编译版本号。也可以用 query build_number 覆盖。 |
X-App-Version |
否 | 当前客户端展示版本号,只用于客户端侧日志排查。 |
示例:
GET /api/v1/app/version?platform=android&build_number=100
X-App-Code: lalu
X-App-Platform: android
X-App-Build-Number: 100
响应:
{
"code": "OK",
"message": "ok",
"request_id": "req_abc",
"data": {
"app_code": "lalu",
"platform": "android",
"version": "1.2.0",
"build_number": 120,
"force_update": true,
"download_url": "https://example.com/lalu.apk",
"description": "修复已知问题",
"has_update": true,
"current_build_number": 100,
"updated_at_ms": 1710000000000,
"server_time_ms": 1710000001234
}
}
Flutter 处理规则:
has_update=false:不展示升级弹窗。has_update=true && force_update=false:展示普通升级弹窗,允许关闭。has_update=true && force_update=true:展示强更弹窗,不允许进入主流程。download_url由后台配置。Android 通常打开 APK 下载页;iOS 通常打开 App Store 链接。- 服务端只用
build_number判断新旧,不解析version语义版本。
2. 获取内购商品列表
GET /api/v1/wallet/recharge/products
登录接口,需要 Authorization: Bearer <access_token>。gateway 会用当前登录用户资料里的 region_id 筛选商品,客户端不要自己传区域。
请求头:
| Header | 必填 | 说明 |
|---|---|---|
Authorization |
是 | App 登录 access token。 |
X-App-Platform |
是 | android 或 ios。也可以用 query platform 覆盖。 |
示例:
GET /api/v1/wallet/recharge/products
Authorization: Bearer <access_token>
X-App-Platform: ios
响应:
{
"code": "OK",
"message": "ok",
"request_id": "req_abc",
"data": {
"channels": ["apple"],
"products": [
{
"product_id": 11,
"product_code": "iap_ios_1500",
"product_name": "1500 Coins",
"description": "coin pack",
"platform": "ios",
"channel": "apple",
"currency_code": "USDT",
"coin_amount": 1500,
"amount_micro": 1500000,
"region_ids": [2002],
"resource_asset_type": "COIN",
"status": "active",
"enabled": true
}
]
}
}
Flutter 处理规则:
- 只展示
products里的商品;后台已经按平台、用户区域、上架状态过滤。 amount_micro是 USDT 微单位,1 USDT = 1000000。- 当前资源类型固定是
COIN,后续如果后台新增资源类型,客户端应按resource_asset_type分支处理。 - Android 使用
channel=google的商品对接 Google Play Billing;iOS 使用channel=apple的商品对接 StoreKit。