hyapp-server/docs/flutter对接/app配置与内购对接.md

3.4 KiB
Raw Permalink Blame History

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 androidios。也可以用 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 androidios。也可以用 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 BillingiOS 使用 channel=apple 的商品对接 StoreKit。