Files
as-daycard-openapi/第三方App测试需求.md
zhaogd 30198c7191 初始化天卡开放平台后端项目
包含完整功能模块:
- 设备激活(直销激活码模式 + 代销免激活码模式)
- 微信支付 + 天卡订单
- 天卡池管理 + 异步橘视厅SDK激活
- 第三方合作伙伴接口(代销模式)
  - 签名鉴权(appKey/appSecret + nonce防重放)
  - 天卡消耗(事务 + 幂等 + 并发控制)
  - 媒资接口(三级授权过滤)
  - 审计日志
- 定价策略(3层:门店 > 渠道 > 平台)
- 分账(微信分账 + 分润规则)
- Docker部署(含Redis容器)
2026-07-26 12:34:13 +08:00

6.1 KiB
Raw Permalink Blame History

第三方合作伙伴 App 测试需求

1. 目标

验证代销模式完整链路:EPG启动App -> init -> checkBenefits -> SDK初始化 -> 获取播放地址 -> 播放

2. App 定位

Android TV 应用,由第三方 EPG 通过 Intent 传参启动。App 不负责支付,仅负责:

  • 设备初始化(获取 sign)
  • 查询天卡权益(获取 thirdCardNo)
  • 橘视厅 SDK 初始化
  • 内容浏览与播放

3. 启动方式

3.1 EPG 传参启动(Intent)

Intent action: com.pukka.mediaapp.PARTNER_LAUNCH
Extras:
  - mac        (String, 设备MAC)
  - wifiMac    (String, WiFi MAC, 可选)
  - deviceSn   (String, 设备SN, 可选)
  - deviceUid  (String, 设备UID, 可选)

至少传一个设备标识(mac/wifiMac/deviceSn/deviceUid)。

3.2 手动输入模式(调试用)

App 提供一个输入页面,可手动输入设备标识,方便无 EPG 环境时测试。

4. 后端接口

4.1 配置

后端地址: http://58.220.83.58:8084 (可配置)

4.2 设备初始化

POST /api/jst/init
Content-Type: application/json
Body: { "mac": "xx", "wifiMac": "xx", "deviceSn": "xx", "deviceUid": "xx" }
  (不传 activationCode -> 代销模式)

成功返回:
{
  "code": 0,
  "msg": "success",
  "data": { "device": { "deviceId": 9, "roomNo": null } },
  "sign": "Base64编码的sign字符串"
}

失败返回:
{
  "code": 400,
  "msg": "设备未注册,请先通过合作伙伴天卡消耗接口激活设备",
  "data": {}
}

4.3 查询天卡权益

POST /api/jst/checkBenefits
Header: sign: <上一步获取的sign>

成功返回:
{
  "code": 0,
  "msg": "success",
  "data": {
    "status": "ACTIVE",        // ACTIVE=已激活  UNBOUND=未绑定/激活中
    "thirdCardNo": "DKMMqjJKgpdwUahip5l4hGzjS",  // 播放凭证
    "cardNo": "CEB6258DB4AD6B06",
    "expireAt": "2026-07-24 19:33:14"
  }
}

4.4 轮询策略

checkBenefits 可能返回 status: "UNBOUND"(异步激活未完成),需要轮询:

  • 轮询间隔:2秒
  • 轮询超时:5分钟
  • 收到 ACTIVE 后停止轮询

4.5 心跳续期(可选)

POST /api/jst/heartBeat
Header: sign: <sign>

建议每 30 分钟调用一次,防止 sign 过期(24小时有效)。

5. 橘视厅 SDK 初始化

5.1 SDK 配置

AGCODE = "1100101010200492358120169"
TENANT = "huashitv"
ACCESSER = "JSTASJD"
SECRET = "kMeWsBu0QsTXpnft"
SERVICE_COMBO_CODE = "1100121010200494755850172"

5.2 初始化流程

checkBenefits 返回 ACTIVE 后,用 thirdCardNo 作为 uid 初始化 SDK:

JetsenxSdk.init(
    context,
    agcode = AGCODE,
    mac = <设备MAC>,
    uid = thirdCardNo,     // 关键:用 thirdCardNo 作为 uid
    tenant = TENANT,
    secret = SECRET,
    accesser = ACCESSER,
    utype = "2",           // uid非MAC格式时用"2",MAC格式用"3"
    "",
    serviceComboCode = SERVICE_COMBO_CODE,
    callback = ...
)

5.3 SDK 库文件

app/libs/
  - JetsenxSdk-api-future-release-v1.23.aar
  - NewTVSDK-v4.0.3-app-lite.jar
  - arm64-v8a/libnewtvsdk.so
  - armeabi-v7a/libnewtvsdk.so

6. 内容浏览与播放

6.1 内容列表(可选)

可调后端媒资接口获取内容列表:

GET /openapi/partner/media/list?catalogid=xxx&pageindex=1&pagesize=20
Header: appKey/timestamp/nonce/sign (合作伙伴签名鉴权)

或直接用橘视厅媒资接口(App 已有 ApiConfig 配置)。

6.2 获取播放地址

SDK 初始化成功后,用节目 code 获取播放地址:

// 1. 获取 productCode
JetsenxSdk.getAllAssetPrices(accesser, secret, callback)

// 2. 获取播放地址
JetsenxSdk.getVideoUrls(productCode, programCode, callback)
// 或免费内容
JetsenxSdk.getFreeVideoUrls(programCode, callback)

6.3 播放

用获取到的 videoUrl 播放(可用 ExoPlayer 或项目中已有的 HyMediaPlayer)。

7. 页面结构(最小化)

页面1: 启动页/输入页
  - 显示传入的设备标识(或手动输入)
  - "初始化"按钮
  - 显示 init 结果(sign, deviceId)

页面2: 权益查询页
  - 自动轮询 checkBenefits
  - 显示 status (ACTIVATING -> ACTIVE)
  - 显示 thirdCardNo, expireAt
  - ACTIVE 后自动初始化 SDK
  - 显示 SDK init 结果

页面3: 播放测试页
  - 输入 programCode(或从内容列表选择)
  - "获取播放地址"按钮
  - 显示播放地址
  - "播放"按钮
  - 视频播放区域

8. 测试场景

场景1: 完整流程(正常)

前置: 第三方已调 consume 接口,设备已绑定天卡

1. EPG传参启动App (mac=AA:BB:CC:DD:EE:01)
2. App调 init -> 返回 sign
3. App调 checkBenefits -> 返回 ACTIVE + thirdCardNo
4. App用 thirdCardNo 初始化 SDK -> 成功
5. App获取播放地址 -> 成功
6. App播放视频 -> 正常播放

场景2: 异步激活等待

前置: 第三方刚调完 consume,异步激活尚未完成

1. App调 init -> 返回 sign
2. App调 checkBenefits -> 返回 UNBOUND
3. App轮询 (每2秒)
4. N秒后 checkBenefits -> 返回 ACTIVE + thirdCardNo
5. App用 thirdCardNo 初始化 SDK -> 成功

场景3: 设备未注册

前置: 第三方未调 consume

1. App调 init -> 返回 400 "设备未注册"
2. App显示错误提示

场景4: 天卡过期

前置: 天卡已过期

1. App调 init -> 返回 sign
2. App调 checkBenefits -> 返回 UNBOUND
3. App显示"天卡已过期,请联系第三方续费"

9. 本次测试凭证

后端地址: http://58.220.83.58:8084
设备标识: mac=AA:BB:CC:DD:EE:01, deviceSn=TEST-SN-001, deviceUid=TEST-UID-001
deviceId: 9
sign: (通过 init 动态获取)
thirdCardNo: DKMMqjJKgpdwUahip5l4hGzjS
expireAt: 2026-07-24 19:33:14

10. 关键注意事项

  1. 不传 activationCode:代销模式 init 不传 activationCode,后端按设备标识查找
  2. 设备标识一致性:consume 和 init 必须用相同的设备标识,否则找不到设备
  3. thirdCardNo 不暴露给第三方:thirdCardNo 由 App 通过 checkBenefits 获取,不经过 EPG
  4. sign 24小时有效:长时间运行需定期心跳续期
  5. SDK utype:uid 为 MAC 格式用 "3",非 MAC 格式用 "2"(thirdCardNo 通常是非 MAC 格式 -> "2")