# 数据类型说明

#### InAppPurchaseData

购买数据模型，支持消耗型商品、非消耗型商品。

| 名称 | 是否必选 | 类型 | 说明 |
| --- | --- | --- | --- |
| applicationId | 是 | number | 应用ID。最小长度为1，最大长度为64。 |
| applicationIdString | 是 | string | 字符串应用ID。最小长度为1，最大长度为64。 |
| autoRenewing | 是 | boolean | 是否自动续订。 - true:表示自动续订。 - false:表示非自动续订。 |
| orderId | 是 | string | 订单ID，唯一标识一笔需要收费的订单，由IAP服务器在创建订单以及自动续期订阅商品续费时生成。 每一笔新的订单都会使用不同的orderId。 |
| kind | 是 | number | 商品类别，取值包括： 0：消耗型商品 1：非消耗型商品 |
| packageName | 否 | string | 应用安装包名。 |
| productId | 是 | string | 商品ID。 说明： 为避免资金损失，开发者在对支付结果验签成功后，必须对其进行校验。 |
| productName | 否 | string | 商品名称。 |
| purchaseTime | 否 | number | 商品购买时间，UTC时间戳，以ms为单位。 如果没有完成购买，则没有值。 |
| purchaseTimeMillis | 否 | number | 历史接口兼容用，同purchaseTime，新接入无需关注本字段。 |
| purchaseState | 是 | number | 订单交易状态。 -1：初始化 0：已购买 1：已取消 2：已退款 3：待处理 |
| developerPayload | 否 | string | 商户侧保留信息，由应用在调用支付接口时传入。 |
| developerChallenge | 否 | string | 应用发起消耗请求时自定义的挑战字，可唯一标识此次消耗请求。 |
| consumptionState | 否 | number | 消耗状态，取值包括： 0：未消耗 1：已消耗 |
| confirmed | 否 | number | 确认状态，取值包括： 0：未确认 1：已确认 没有值表示不需要确认 说明： 该字段当前仅做兼容用，开发者无需关注。 |
| purchaseToken | 是 | string | 用于唯一标识商品和用户对应关系的购买令牌，在支付完成时由IAP服务器生成。 说明： - 当前92位，后续存在扩展可能，如要进行存储，建议预留128位的长度。 - 如要进行存储，为保证安全，建议加密存储。 |
| purchaseType | 否 | number | 购买类型。 0：沙盒环境（暂不支持）。 1：促销（暂不支持）。 正式购买不会返回该参数。 |
| currency | 否 | string | 币种。例如CNY。 说明： 为避免资金损失，在对支付结果验签成功后，必须对其进行校验 |
| price | 否 | number | 价格，单位：分。价格受如下因素影响： - 开发者在AppGallery Connect中配置的商品价格 - 使用优惠后的价格，优惠类型包含推介促销、优惠促销、挽留促销 - 批量购买商品的总价格 说明： 为避免资金损失，在对支付结果验签成功后，必须对其进行校验。 |
| country | 否 | string | 国家/地区码，用于区分国家/地区信息，请参见ISO 3166标准。 |
| payType | 否 | string | 支付方式，取值请参见payType说明。 |
| payOrderId | 否 | string | 交易单号，用户支付后生成。 |

#### payType

payType取值说明。

| 取值 | 说明 |
| --- | --- |
| 0 | 花币。 |
| 4 | 支付宝。 |
| 94 | 华为支付。 |

#### PurchaseData

包含jws格式的订单信息、订阅状态信息。

| 名称 | 是否必选 | 类型 | 说明 |
| --- | --- | --- | --- |
| type | 是 | number | 商品类型。 0：消耗型商品 1：非消耗型商品 2：自动续期订阅商品 3：非续期订阅商品 |
| jwsPurchaseOrder | 否 | string | 包含订单信息的JWS格式数据。可参见对返回结果验签解码验签获取相关购买数据的JSON字符串，其包含的参数请参见PurchaseOrderPayload。 |
| jwsSubscriptionStatus | 否 | string | 包含订阅状态信息的JWS格式数据。可参见对返回结果验签解码验签获取相关订阅状态信息的JSON字符串，其包含的参数请参见SubGroupStatusPayload。 |

#### PurchaseOrderPayload

订单信息模型，支持消耗型商品、非消耗型商品、自动续期订阅商品和非续期订阅商品。

| 参数 | 是否必选 | 类型 | 说明 |
| --- | --- | --- | --- |
| environment | 是 | string | 环境类型。 - NORMAL：生产环境 - SANDBOX：沙盒环境 |
| purchaseOrderId | 是 | string | 具体一笔订单中对应的购买订单号ID。最大长度256。 |
| purchaseToken | 是 | string | 购买token，在购买消耗型/非消耗型商品/非续期订阅场景中与具体购买订单一一对应，在自动续期订阅商品场景中与订阅ID一一对应。 |
| applicationId | 是 | string | 应用ID。 |
| productId | 是 | string | 商品ID。 |
| productType | 是 | string | 商品类型。具体取值如下： 0：消耗型商品 1：非消耗型商品 2：自动续期订阅商品 3：非续期订阅商品 |
| quantity | 否 | number | 购买参数。表示所购买消耗型/非续期订阅商品的数量，需满足以下限制。 一次仅针对单商品类型，不支持不同类型混合 一次请求数量不超过10个 说明： 如果开发者使用了quantity参数以支持商品的批量购买，则需要在发货时校验下单的商品数量和最终发货商品数量是否一致，避免造成漏发、多发的情况。 元服务API： 从版本5.0.3(15)开始，该接口支持在元服务中使用。 起始版本： 5.0.3(15) |
| purchaseTime | 是 | number | 购买时间，UTC时间戳，以ms为单位。 如果没有完成购买，则没有值。 |
| finishStatus | 否 | string | 发货状态。具体取值如下： 1：已发货 2：未发货 |
| needFinish | 否 | boolean | 是否需要确认发货，完成购买。具体取值如下： - true：必须确认发货，完成购买 - false：可选确认发货，完成购买 |
| price | 是 | number | 价格，单位：分。价格受如下因素影响： - 开发者在AppGallery Connect中配置的商品价格 - 使用优惠后的价格，优惠类型包含推介促销、优惠促销、挽留促销 - 批量购买商品的总价格 |
| currency | 是 | string | 币种，请参见ISO 4217标准。例如CNY、USD、MYR。 |
| developerPayload | 否 | string | 商户侧保留信息，由开发者在调用支付接口时传入。 |
| purchaseOrderRevocationReasonCode | 否 | string | 购买订单撤销原因。 0：其他 1：用户遇到问题退款 |
| revocationTime | 否 | number | 购买订单撤销时间，UTC时间戳，以ms为单位。 |
| offerTypeCode | 否 | string | 优惠类型。 1：推介促销 2：优惠促销 4：挽留促销 |
| offerId | 否 | string | 优惠ID。 |
| countryCode | 是 | string | 国家/地区码，用于区分国家/地区信息，请参见ISO 3166标准。 |
| signedTime | 是 | number | 签名时间，UTC时间戳，以ms为单位。 |

以下参数只在自动续期订阅商品场景返回：

| 参数 | 是否必选 | 类型 | 说明 |
| --- | --- | --- | --- |
| subGroupGenerationId | 是 | string | 订阅组的代ID。 - 用户切换订阅商品时，此ID不会改变。 - 订阅失效且超出保留期后，用户重新购买商品时，此ID会改变。 |
| subscriptionId | 是 | string | 商品的订阅ID。以下场景，此ID会发生改变： - 用户切换订阅商品时。 - 订阅失效且超出保留期后，用户重新购买商品时。 |
| subGroupId | 是 | string | 订阅型商品所属的商品组ID。 |
| duration | 是 | string | 此次购买的有效周期，采用ISO 8601格式。例如：P1W表示一周，P1M表示一个月。 |
| durationTypeCode | 是 | string | 订阅周期段类型。 0：正常周期段 1：延期段 |

#### SubGroupStatusPayload

订阅组相关的订阅状态信息。

| 名称 | 是否必选 | 类型 | 说明 |
| --- | --- | --- | --- |
| environment | 是 | string | 环境类型。 - NORMAL：生产环境 - SANDBOX：沙盒环境 |
| applicationId | 是 | string | 应用ID。 |
| packageName | 是 | string | 应用包名。 |
| subGroupId | 是 | string | 订阅型商品所属的商品组ID。 |
| lastSubscriptionStatus | 否 | object | 订阅组中最后生效的订阅状态SubscriptionStatus，比如A切换B，B切换C，此处是C的订阅状态。 |
| historySubscriptionStatusList | 否 | object[] | 订阅组最近生效的历史订阅状态SubscriptionStatus的列表，按订阅切换时间升序 ，最多包含10条有效订阅状态信息的记录 。比如A切换B，B切换C，这里包含A，B，C三个订阅状态信息。 |

#### SubscriptionStatus

订阅状态信息。

| 名称 | 是否必选 | 类型 | 说明 |
| --- | --- | --- | --- |
| subGroupGenerationId | 是 | string | 订阅组的代ID。 - 用户切换订阅商品时，此ID不会改变。 - 订阅失效且超出保留期后，用户重新购买商品时，此ID会改变。 |
| subscriptionId | 是 | string | 商品的订阅ID。以下场景，此ID会发生改变： - 用户切换订阅商品时。 - 订阅失效且超出保留期后，用户重新购买商品时。 |
| purchaseToken | 是 | string | 购买token，在购买消耗型/非消耗型商品以及非续期订阅商品场景中与具体购买订单一一对应，在订阅型商品场景中与订阅ID一一对应。 |
| status | 是 | string | 订阅状态。 1：生效中 2：已到期 3：尝试扣费 5：撤销 |
| expiresTime | 是 | number | 自动续期订阅商品的过期时间，UTC时间戳，以ms为单位。 |
| lastPurchaseOrder | 否 | object | 当前订阅最新的一笔购买订单。购买订单包含的参数请参见PurchaseOrderPayload。 |
| recentPurchaseOrderList | 否 | object[] | 当前订阅最新的购买订单列表，包含续期、折算、延期等产生的购买订单。购买订单包含的参数请参见PurchaseOrderPayload。 |
| renewalInfo | 否 | object | 当前订阅最新的未来扣费计划，包含的参数请参见SubRenewalInfo。 |

#### SubRenewalInfo

订阅的扣费计划信息。

| 名称 | 是否必选 | 类型 | 说明 |
| --- | --- | --- | --- |
| environment | 是 | string | 环境类型。 - NORMAL：生产环境 - SANDBOX：沙盒环境 |
| subGroupGenerationId | 是 | string | 订阅组的代ID。 - 用户切换订阅商品时，此ID不会改变。 - 订阅失效且超出保留期后，用户重新购买商品时，此ID会改变。 |
| nextRenewPeriodProductId | 否 | string | 下一个计费周期续订的商品ID。 |
| productId | 是 | string | 当前生效的商品ID。 |
| autoRenewStatusCode | 是 | string | 自动续期状态。 0：关闭 1：打开 |
| hasInBillingRetryPeriod | 是 | boolean | 系统是否还在尝试扣费。 - true：是 - false：否 |
| priceIncreaseStatusCode | 否 | string | 目前涨价状态码。 1：用户暂未同意涨价 2：用户已同意涨价 |
| offerTypeCode | 否 | string | 优惠类型。 1：推介促销 2：优惠促销 4：挽留促销 |
| offerId | 否 | string | 优惠ID。 |
| renewalPrice | 否 | number | 下期续费价格，取消订阅场景下不返回，单位：分。 |
| currency | 否 | string | 币种，请参见ISO 4217标准。例如CNY、USD、MYR。 |
| renewalTime | 否 | number | 续期时间，UTC时间戳，以ms为单位。 |
| expirationIntent | 否 | string | 订阅续期失败的原因。 1：用户取消 2：商品无效 3：签约无效 4：扣费异常 5：用户不同意涨价 6：未知 7：存在未发货的订阅 |