Skip to content

stripe 订阅

1. 创建 stripe setup_intent

POST /bp/asset/stripe_setup_intent

接口功能: 新建 stripe setup_intent 对象,客户端使用该接口返回的 setup_intent 信息,收集用户的支付信息。

该接口用于创建有免费试用期 (free trial) 的 stripe 订阅订单场景,没有免费试用期的 stripe 订单(即付费试用期和无试用期订阅订单)创建无需调用该接口,该接口使用场景描述如下:

  1. 客户端调用本接口(/bp/asset/stripe_setup_intent),创建 setup_intent
  2. 客户端通过返回的 setup_intent 信息,收集用户的支付信息,并 confirm 该 setup_intent
  3. 客户端将 confirm 过的 setup_intent id 通过创建订单接口(/bp/asset/stripe_sub)上传给服务器,完成订单创建

stripe test clock 测试支持

stripe 支持使用 test clock 对订阅订单进行测试,如果需要在 test clock 下创建相关资源进行测试,请上传参数 test_clock_id

test clock 具体的使用方式,请参考文档:stripe test clock 测试方法说明

请求头部参数 (Headers)

参考接入 BytePower

  • X-BytePower-Session-Token:登录后获取用户的 session。
  • X-BytePower-Sign:请求体签名

请求体

  • content-type: "application/json"
ParametersTypeRequiredDesc
emailstringfalse用户邮箱,可选参数,用于创建 stripe customer。根据 stripe 后台的配置,stripe 可能会使用该邮箱给用户发送 invoice 信息,提醒用户续费等。
test_clock_idstringfalsetest_clock id,用于测试,正式上线不需要这个参数
product_idstringfalse创建 setup_intent 后需要购买的 bytepower product_id,服务端根据该 product_id 获取 stripe 平台配置,并进行 setup_intent 的创建。该参数是新版本添加,不传该参数默认会使用 Default stripe 配置创建 setup_intent
  • 请求体示例:
json
{
  "email": "abc@qq.com",
  "product_id": "BUYCQD6NV7PLG665"
}

响应

  • HTTP 状态码:200
参数TypeDesc
stripe_setup_intentobjectstripe setup_intent 信息

stripe_setup_intent 数据结构见 stripe_setup_intent 对象说明

响应示例:

json
{
  "stripe_setup_intent": {
    "client_secret": "seti_1LLeMFJeDjdpBmRtt3DLRafc_secret_M3luBC3YKrbUagrYv179TAPA4I6lE5C",
    "customer_id": "cus_M3lueBoXO9uQTF",
    "id": "seti_1LLeMFJeDjdpBmRtt3DLRafc",
    "payment_method_id": "",
    "status": "requires_payment_method"
  }
}

HTTP 状态码:4xx 描述:错误 响应示例:

json
{
  "error": {
    "error_type": "invalid_parameter",
    "message": "xxxxx"
  }
}

error_type:

  • invalid_parameter (请求参数错误)
  • config_invalid (console 配置问题)
  • backend unavailable (stripe 第三方错误)

2. 创建 stripe subscription

POST /bp/asset/stripe_sub

接口功能: 创建 stripe 订阅订单。服务端返回创建的订阅订单信息和用户当前的资产情况。

目前有两种方式创建订单:

  1. 客户端上传 email 和 product_id,该接口会创建 stripe customer 和 stripe subscription,该方式用于没有免费试用期的订单(即该订单需要立即付费,包括付费试用期和无试用期订阅订单)
  2. 客户端上传 setup_intent_id 和 product_id,该接口会根据 setup_intent_id 对应的 setup_intent 更新 customer 的支付方式,并创建订阅订单,该方式用于有免费试用期的订单(即该订单不需要立即付费)

stripe test clock 测试支持

stripe 支持使用 test clock 对订阅订单进行测试,如果需要在 test clock 下创建相关资源进行测试,请上传参数 test_clock_id

test clock 具体的使用方式,请参考文档:stripe test clock 测试方法说明

请求头部参数 (Headers)

参考接入 BytePower

  • X-BytePower-Session-Token:登录后获取用户的 session。
  • X-BytePower-Sign:请求体签名

请求体

  • content-type: "application/json"
ParametersTypeRequiredDesc
emailstringfalse用户邮箱,可选参数,用于创建 stripe customer。根据 stripe 后台的配置,stripe 可能会使用该邮箱给用户发送 invoice 信息,提醒用户续费等。
test_clock_idstringfalsetest_clock id,用于测试,正式上线不需要这个参数
setup_intent_idstringfalsestripe setup_intent id,可选参数,由 /bp/asset/stripe_setup_intent 接口返回并在客户端被 stripe confirm。
product_idstringtrue待创建的订阅对应的 bytepower product_id
country_codestringfalse用户的国家码,可选参数。国家码为 2 位大写字母,根据 ISO_3166-1 Alpha-2 code 编码。参考链接:https://en.wikipedia.org/wiki/ISO_3166-1
  • 请求体示例:
json
{
  "email": "abc@qq.com",
  "product_id": "BUYCQD6NV7PLG665"
}
json
{
  "setup_intent_id": "si_xxxxxxxx",
  "product_id": "BUYCQD6NV7PLG665"
}

响应

  • HTTP 状态码:200
参数TypeDesc
stripe_subobjectstripe subscription 信息
assetsarray用户的 asset 信息

stripe_sub 数据结构见 stripe_sub 对象说明

响应示例:

json
{
  "assets": [
    {
      "custom_expire_time": "0001-01-01T00:00:00Z",
      "expire_time": "2024-02-28T06:33:24Z",
      "is_auto_renewable": true,
      "is_consumable": true,
      "is_trial_period": true,
      "name": "vip",
      "origin": "purchase",
      "platform": "stripe",
      "product_id": "prod_Nf6dZGfCIERbqP",
      "quantity": 300,
      "receipt_id": "sub_1OnxkeJeDjdpBmRtQTvwiUeA",
      "sub_canceled": false,
      "sub_canceled_time": "0001-01-01T00:00:00Z",
      "sub_canceled_ts": 0,
      "total_quantity": 300,
      "type": "subscription",
      "valid_seconds": 101407
    }
  ],
  "stripe_sub": {
    "bp_product_id": "BUY7LJLQ4NON6VMF",
    "cancel_at_period_end": false,
    "canceled_time": "0001-01-01T00:00:00Z",
    "canceled_ts": 0,
    "current_cycle_end_ts": 1709015604,
    "current_cycle_start_ts": 1708929204,
    "customer_id": "cus_PdEDP7z32Z27wn",
    "id": "sub_1OnxkeJeDjdpBmRtQTvwiUeA",
    "invoice_id": "in_1OnxkeJeDjdpBmRtSd8HJBvo",
    "invoice_status": "paid",
    "payment_intent_client_secret": "pi_3OnxkfJeDjdpBmRt0hiHOz1q_secret_TxB2v8HVoveWadDsZtNkyc5wn",
    "payment_intent_id": "pi_3OnxkfJeDjdpBmRt0hiHOz1q",
    "status": "trialing",
    "stripe_price_id": "price_1MtmPmJeDjdpBmRtJm9nMYZE",
    "stripe_product_id": "prod_Nf6dZGfCIERbqP"
  }
}

HTTP 状态码:4xx 描述:错误 响应示例:

json
{
  "error": {
    "error_type": "invalid_parameter",
    "message": "xxxxx"
  }
}

error_type:

  • invalid_parameter (请求参数错误)
  • config_invalid (console 配置问题)
  • backend unavailable (stripe 第三方错误)

3. 获取刚支付成功的 stripe subscription 信息并同步用户资产

GET /bp/asset/stripe_sub/{sub_id}/sync

该接口与 GET /bp/asset/stripe_sub/{sub_id} 接口的功能相同,请优先使用 sync 接口, GET /bp/asset/stripe_sub/{sub_id} 接口已被废弃。

接口功能: 获取 stripe subscription 的信息, 并同步用户资产。stripe subscription id 由 URL 路径中的 sub_id 给出。

使用场景:该接口只用于支付成功后,立刻同步用户资产的场景。当用户支付成功后,stripe 会向 bytepower 发送 webhook 通知支付成功,bytepower 接收到 webhook 后为用户加资产。由于 webhook 的发送是异步的,会有延迟,如果客户端想在支付成功后较快地刷新用户资产,可以使用 sync 接口。

请求头部参数 (Headers)

参考接入 BytePower

  • X-BytePower-Session-Token:登录后获取用户的 session。
  • X-BytePower-Sign:请求体签名

请求体

响应

  • HTTP 状态码:200
参数TypeDesc
stripe_subobjectstripe subscription 信息
assetsarray用户的 asset 信息

stripe_sub 数据结构见 stripe_sub 对象说明

响应示例:

json
{
  "assets": [
    {
      "custom_expire_time": "0001-01-01T00:00:00Z",
      "expire_time": "2024-02-28T06:33:24Z",
      "is_auto_renewable": true,
      "is_consumable": true,
      "is_trial_period": true,
      "name": "vip",
      "origin": "purchase",
      "platform": "stripe",
      "product_id": "prod_Nf6dZGfCIERbqP",
      "quantity": 300,
      "receipt_id": "sub_1OnxkeJeDjdpBmRtQTvwiUeA",
      "sub_canceled": false,
      "sub_canceled_time": "0001-01-01T00:00:00Z",
      "sub_canceled_ts": 0,
      "total_quantity": 300,
      "type": "subscription",
      "valid_seconds": 101407
    }
  ],
  "stripe_sub": {
    "bp_product_id": "BUY7LJLQ4NON6VMF",
    "cancel_at_period_end": false,
    "canceled_time": "0001-01-01T00:00:00Z",
    "canceled_ts": 0,
    "current_cycle_end_ts": 1709015604,
    "current_cycle_start_ts": 1708929204,
    "customer_id": "cus_PdEDP7z32Z27wn",
    "id": "sub_1OnxkeJeDjdpBmRtQTvwiUeA",
    "invoice_id": "in_1OnxkeJeDjdpBmRtSd8HJBvo",
    "invoice_status": "paid",
    "payment_intent_client_secret": "pi_3OnxkfJeDjdpBmRt0hiHOz1q_secret_TxB2v8HVoveWadDsZtNkyc5wn",
    "payment_intent_id": "pi_3OnxkfJeDjdpBmRt0hiHOz1q",
    "status": "trialing",
    "stripe_price_id": "price_1MtmPmJeDjdpBmRtJm9nMYZE",
    "stripe_product_id": "prod_Nf6dZGfCIERbqP"
  }
}

HTTP 状态码:4xx 描述:错误 响应示例:

json
{
  "error": {
    "error_type": "invalid_parameter",
    "message": "xxxxx"
  }
}

error_type:

  • invalid_parameter (请求参数错误)
  • config_invalid (console 配置问题)
  • backend unavailable (stripe 第三方错误)

4. 获取 stripe subscription 信息

GET /bp/asset/stripe_sub/{sub_id}/fetch

接口功能: 获取 stripe subscription 的信息, stripe subscription id 由 URL 路径中的 sub_id 给出。

请求头部参数 (Headers)

参考接入 BytePower

  • X-BytePower-Session-Token:登录后获取用户的 session。
  • X-BytePower-Sign:请求体签名

请求体

响应

  • HTTP 状态码:200
参数TypeDesc
stripe_subobjectstripe subscription 信息
assetsarray用户的 asset 信息

stripe_sub 数据结构见 stripe_sub 对象说明

响应示例:

json
{
  "assets": [
    {
      "custom_expire_time": "0001-01-01T00:00:00Z",
      "expire_time": "2024-02-28T06:33:24Z",
      "is_auto_renewable": true,
      "is_consumable": true,
      "is_trial_period": true,
      "name": "vip",
      "origin": "purchase",
      "platform": "stripe",
      "product_id": "prod_Nf6dZGfCIERbqP",
      "quantity": 300,
      "receipt_id": "sub_1OnxkeJeDjdpBmRtQTvwiUeA",
      "sub_canceled": false,
      "sub_canceled_time": "0001-01-01T00:00:00Z",
      "sub_canceled_ts": 0,
      "total_quantity": 300,
      "type": "subscription",
      "valid_seconds": 101407
    }
  ],
  "stripe_sub": {
    "bp_product_id": "BUY7LJLQ4NON6VMF",
    "cancel_at_period_end": false,
    "canceled_time": "0001-01-01T00:00:00Z",
    "canceled_ts": 0,
    "current_cycle_end_ts": 1709015604,
    "current_cycle_start_ts": 1708929204,
    "customer_id": "cus_PdEDP7z32Z27wn",
    "id": "sub_1OnxkeJeDjdpBmRtQTvwiUeA",
    "invoice_id": "in_1OnxkeJeDjdpBmRtSd8HJBvo",
    "invoice_status": "paid",
    "payment_intent_client_secret": "pi_3OnxkfJeDjdpBmRt0hiHOz1q_secret_TxB2v8HVoveWadDsZtNkyc5wn",
    "payment_intent_id": "pi_3OnxkfJeDjdpBmRt0hiHOz1q",
    "status": "trialing",
    "stripe_price_id": "price_1MtmPmJeDjdpBmRtJm9nMYZE",
    "stripe_product_id": "prod_Nf6dZGfCIERbqP",
    "next_payment_attempt": 1708939204,
    "next_payment_amount": 1000,
    "next_payment_currency": "usd"
  }
}

HTTP 状态码:4xx 描述:错误 响应示例:

json
{
  "error": {
    "error_type": "invalid_parameter",
    "message": "xxxxx"
  }
}

error_type:

  • invalid_parameter (请求参数错误)
  • config_invalid (console 配置问题)
  • backend unavailable (stripe 第三方错误)

5. 升级 stripe subscription

POST /bp/asset/stripe_sub/{sub_id}/upgrade

接口功能: 升级 stripe subscription 至较高级的套餐, stripe subscription id 由 URL 路径中的 sub_id 给出。

套餐的等级规则不由 bytepower 规定,而是产品来确定当前订阅能升级到哪个套餐,推荐在 bytepower console 上配置 product 的 tag 来自定义升级规则。

注意:如果订阅已通过之前的 revise 接口进行了订阅的变更,但 revise 的目标订阅套餐仍未生效,则不能使用该 upgrade 接口进行升级。如果 revise 的目标订阅套餐已经生效,则可使用该 upgrade 接口进行升级。

升级后的行为:

  1. 新套餐立即生效,根据当前时刻重新计算订阅周期
  2. 首次付费时补差价,无需支付全款,后续周期支付全款。如果需要补的差价为负,则会向用户退款。

升级订阅时,原订阅需要是 stripe 平台的订阅, 且目前的订阅状态是 active 或 trialing。 升级的目标套餐不能有试用期【包括免费试用期和付费试用期】。

请求头部参数 (Headers)

参考接入 BytePower

  • X-BytePower-Session-Token:登录后获取用户的 session。
  • X-BytePower-Sign:请求体签名

请求体

  • content-type: "application/json"
ParametersTypeRequiredDesc
new_bp_product_idstringtrue待升级的 bytepower product_id
  • 请求体示例:
json
{
  "new_bp_product_id": "BUYCQD6NV7PLG665"
}

响应

  • HTTP 状态码:200
参数TypeDesc
stripe_subobjectstripe subscription 信息
assetsarray用户的 asset 信息

stripe_sub 数据结构见 stripe_sub 对象说明

注: 当 status 字段为 active 或 tralling, 且 invoice_status 字段为 paid 时,才说明升级成功;如果 invoice_status 为 open 时,则说明新套餐支付没有成功。

响应示例:

json
{
  "assets": [
    {
      "custom_expire_time": "0001-01-01T00:00:00Z",
      "expire_time": "2024-02-28T06:33:24Z",
      "is_auto_renewable": true,
      "is_consumable": true,
      "is_trial_period": true,
      "name": "vip",
      "origin": "purchase",
      "platform": "stripe",
      "product_id": "prod_Nf6dZGfCIERbqP",
      "quantity": 300,
      "receipt_id": "sub_1OnxkeJeDjdpBmRtQTvwiUeA",
      "sub_canceled": false,
      "sub_canceled_time": "0001-01-01T00:00:00Z",
      "sub_canceled_ts": 0,
      "total_quantity": 300,
      "type": "subscription",
      "valid_seconds": 101407
    }
  ],
  "stripe_sub": {
    "bp_product_id": "BUY7LJLQ4NON6VMF",
    "cancel_at_period_end": false,
    "canceled_time": "0001-01-01T00:00:00Z",
    "canceled_ts": 0,
    "current_cycle_end_ts": 1709015604,
    "current_cycle_start_ts": 1708929204,
    "customer_id": "cus_PdEDP7z32Z27wn",
    "id": "sub_1OnxkeJeDjdpBmRtQTvwiUeA",
    "invoice_id": "in_1OnxkeJeDjdpBmRtSd8HJBvo",
    "invoice_status": "paid",
    "payment_intent_client_secret": "pi_3OnxkfJeDjdpBmRt0hiHOz1q_secret_TxB2v8HVoveWadDsZtNkyc5wn",
    "payment_intent_id": "pi_3OnxkfJeDjdpBmRt0hiHOz1q",
    "status": "trialing",
    "stripe_price_id": "price_1MtmPmJeDjdpBmRtJm9nMYZE",
    "stripe_product_id": "prod_Nf6dZGfCIERbqP"
  }
}

HTTP 状态码:4xx 描述:错误 响应示例:

json
{
  "error": {
    "error_type": "invalid_parameter",
    "message": "xxxxx"
  }
}

error_type:

  • invalid_parameter (请求参数错误)
  • config_invalid (console 配置问题)
  • subscription_unsupported_upgrade (不支持的升级操作,如原订阅不是 stripe 订阅)
  • backend unavailable (stripe 第三方错误)
  • invalid_operation (非法的升级操作,如当前订阅不处于活跃状态)

6. 获取刚升级成功的 stripe subscription 信息并同步用户资产

GET /bp/asset/stripe_sub/{sub_id}/sync_upgrade

接口功能: 获取 stripe subscription 的信息, 并同步用户资产。stripe subscription id 由 URL 路径中的 sub_id 给出。

使用场景:该接口只用于升级成功后,立刻同步用户资产的场景。当用户支付成功后,stripe 会向 bytepower 发送 webhook 通知支付成功,bytepower 接收到 webhook 后为用户加资产。由于 webhook 的发送是异步的,会有延迟,如果客户端想在支付成功后较快地刷新用户资产,可以使用 sync_upgrade 接口。

请求头部参数 (Headers)

参考接入 BytePower

  • X-BytePower-Session-Token:登录后获取用户的 session。
  • X-BytePower-Sign:请求体签名

请求体

响应

  • HTTP 状态码:200
参数TypeDesc
stripe_subobjectstripe subscription 信息
assetsarray用户的 asset 信息

stripe_sub 数据结构见 stripe_sub 对象说明

响应示例:

json
{
  "assets": [
    {
      "custom_expire_time": "0001-01-01T00:00:00Z",
      "expire_time": "2024-02-28T06:33:24Z",
      "is_auto_renewable": true,
      "is_consumable": true,
      "is_trial_period": true,
      "name": "vip",
      "origin": "purchase",
      "platform": "stripe",
      "product_id": "prod_Nf6dZGfCIERbqP",
      "quantity": 300,
      "receipt_id": "sub_1OnxkeJeDjdpBmRtQTvwiUeA",
      "sub_canceled": false,
      "sub_canceled_time": "0001-01-01T00:00:00Z",
      "sub_canceled_ts": 0,
      "total_quantity": 300,
      "type": "subscription",
      "valid_seconds": 101407
    }
  ],
  "stripe_sub": {
    "bp_product_id": "BUY7LJLQ4NON6VMF",
    "cancel_at_period_end": false,
    "canceled_time": "0001-01-01T00:00:00Z",
    "canceled_ts": 0,
    "current_cycle_end_ts": 1709015604,
    "current_cycle_start_ts": 1708929204,
    "customer_id": "cus_PdEDP7z32Z27wn",
    "id": "sub_1OnxkeJeDjdpBmRtQTvwiUeA",
    "invoice_id": "in_1OnxkeJeDjdpBmRtSd8HJBvo",
    "invoice_status": "paid",
    "payment_intent_client_secret": "pi_3OnxkfJeDjdpBmRt0hiHOz1q_secret_TxB2v8HVoveWadDsZtNkyc5wn",
    "payment_intent_id": "pi_3OnxkfJeDjdpBmRt0hiHOz1q",
    "status": "trialing",
    "stripe_price_id": "price_1MtmPmJeDjdpBmRtJm9nMYZE",
    "stripe_product_id": "prod_Nf6dZGfCIERbqP"
  }
}

HTTP 状态码:4xx 描述:错误 响应示例:

json
{
  "error": {
    "error_type": "invalid_parameter",
    "message": "xxxxx"
  }
}

error_type:

  • invalid_parameter (请求参数错误)
  • config_invalid (console 配置问题)
  • backend unavailable (stripe 第三方错误)

7. 恢复和更新现有订阅

POST /bp/asset/stripe_sub/{sub_id}/recover_and_update

接口功能:当订阅处于【本期期末结束时取消】的状态时,调用该接口取消该状态。根据传入的 new_bp_product_id 参数,该订阅会恢复原订阅套餐、升级套餐或降级套餐。

恢复和更新订阅时,原订阅需要满足如下条件:

  1. 是 stripe 平台的订阅, 且订阅状态是 active 或 trialing
  2. 订阅的 cancel_at_period_end 字段为 true

在使用该接口前,可以先用 fetch 接口查询该订阅是否满足如上条件。

请求头部参数 (Headers)

参考接入 BytePower

  • X-BytePower-Session-Token:登录后获取用户的 session。
  • X-BytePower-Sign:请求体签名

请求体

  • content-type: "application/json"
ParametersTypeRequiredDesc
new_bp_product_idstringtrue待升级的 bytepower product_id
  • 请求体示例:
json
{
  "new_bp_product_id": "BUYCQD6NV7PLG665"
}

响应

  • HTTP 状态码:200
参数TypeDesc
stripe_subobjectstripe subscription 信息
assetsarray用户的 asset 信息

stripe_sub 数据结构见 stripe_sub 对象说明

响应示例:

json
{
  "assets": [
    {
      "custom_expire_time": "0001-01-01T00:00:00Z",
      "expire_time": "2024-02-28T06:33:24Z",
      "is_auto_renewable": true,
      "is_consumable": true,
      "is_trial_period": true,
      "name": "vip",
      "origin": "purchase",
      "platform": "stripe",
      "product_id": "prod_Nf6dZGfCIERbqP",
      "quantity": 300,
      "receipt_id": "sub_1OnxkeJeDjdpBmRtQTvwiUeA",
      "sub_canceled": false,
      "sub_canceled_time": "0001-01-01T00:00:00Z",
      "sub_canceled_ts": 0,
      "total_quantity": 300,
      "type": "subscription",
      "valid_seconds": 101407
    }
  ],
  "stripe_sub": {
    "bp_product_id": "BUY7LJLQ4NON6VMF",
    "cancel_at_period_end": false,
    "canceled_time": "0001-01-01T00:00:00Z",
    "canceled_ts": 0,
    "current_cycle_end_ts": 1709015604,
    "current_cycle_start_ts": 1708929204,
    "customer_id": "cus_PdEDP7z32Z27wn",
    "id": "sub_1OnxkeJeDjdpBmRtQTvwiUeA",
    "invoice_id": "in_1OnxkeJeDjdpBmRtSd8HJBvo",
    "invoice_status": "paid",
    "payment_intent_client_secret": "pi_3OnxkfJeDjdpBmRt0hiHOz1q_secret_TxB2v8HVoveWadDsZtNkyc5wn",
    "payment_intent_id": "pi_3OnxkfJeDjdpBmRt0hiHOz1q",
    "status": "trialing",
    "stripe_price_id": "price_1MtmPmJeDjdpBmRtJm9nMYZE",
    "stripe_product_id": "prod_Nf6dZGfCIERbqP"
  }
}

HTTP 状态码:4xx 描述:错误 响应示例:

json
{
  "error": {
    "error_type": "invalid_parameter",
    "message": "xxxxx"
  }
}

error_type:

  • invalid_parameter (请求参数错误)
  • config_invalid (console 配置问题)
  • subscription_unsupported_upgrade (不支持的升级操作,如原订阅不是 stripe 订阅)
  • backend unavailable (stripe 第三方错误)
  • invalid_operation (非法的升级操作,如当前订阅不处于活跃状态)

数据结构

stripe_setup_intent

参数类型说明
idstringsetup_intent id
client_secretstringsetup_intent 的 client_secret, 用于 confirm setup_intent
statusstringsetup_intent 的状态,状态说明详见:stripe payments intents 文档
payment_method_idstringsetup_intent 关联的 payment_method_id,该接口返回的该字段均为空字符串
customer_idstringsetup_intent 关联的 stripe customer id

格式举例如下:

json
{
  "stripe_setup_intent": {
    "client_secret": "seti_1LLeMFJeDjdpBmRtt3DLRafc_secret_M3luBC3YKrbUagrYv179TAPA4I6lE5C",
    "customer_id": "cus_M3lueBoXO9uQTF",
    "id": "seti_1LLeMFJeDjdpBmRtt3DLRafc",
    "payment_method_id": "",
    "status": "requires_payment_method"
  }
}

stripe_sub

参数类型说明明
idstringstripe 订阅订单 id
customer_idstringstripe customer id
statusstringstripe 订单状态,详见 stripe 文档中的 订阅状态说明
invoice_idstringstripe 订单 latest_invoice 的 id
invoice_statusstringstripe 订单 latest_invoice 的状态,详见 stripe 文档中的 invoice 状态说明
bp_product_idstring当前订阅的 bytepower product_id
stripe_product_idstring当前订阅的 stripe product id
stripe_price_idstring当前订阅的 stripe price id
payment_intent_idstringstripe 订单的 payment_intent id
payment_intent_client_secretstringstripe 订单支付时需要的 payment_intent 的 client_secret
canceled_tsint订阅取消时间的秒级时间戳。如果订阅没有取消,则为 0;如果订阅在本期期末取消,则为本期期末时间戳(将来时间的时间戳);如果订阅已经取消,则为已取消时间的时间戳(过去时间的时间戳)
canceled_timestring订阅取消时间。如果订阅没有取消,则为 0001-01-01T00:00:00Z;如果订阅在本期期末取消,则为本期期末时间(将来的时间);如果订阅已经取消,则为已取消时间(过去的时间)。该字段已废弃,请使用 canceled_ts 字段
cancel_at_period_endbool订阅是否在本期期末取消
current_cycle_start_tsint当期订阅开始的秒级时间戳
current_cycle_end_tsint当期订阅结束的秒级时间戳
next_payment_attemptint下个周期尝试扣款的秒级时间戳,当订阅状态为 active 或 trialing 时有效。该字段只在 fetch 接口返回
next_payment_amountint下个周期扣款金额,美元以分计, 当订阅状态为 active 或 trialing 时有效。该字段只在 fetch 接口返回
next_payment_currencystring下个周期扣款币种,币种缩写小写,如 usd, 当订阅状态为 active 或 trialing 时有效。该字段只在 fetch 接口返回

注: 订阅取消时间分别给出了【字符串】和【秒级时间戳】两种格式的字段(canceled_time 和 canceled_ts),这两种格式表示的时间是一致的。 由于当订阅没有取消时,canceled_time 会返回 0001-01-01T00:00:00Z,不方便客户端解析,故废弃该字段,以后解析订阅取消时间时请使用 canceled_ts 秒级时间戳字段。

格式举例如下:

json
{
  "bp_product_id": "BUY7LJLQ4NON6VMF",
  "cancel_at_period_end": false,
  "canceled_time": "0001-01-01T00:00:00Z",
  "canceled_ts": 0,
  "current_cycle_end_ts": 1709015604,
  "current_cycle_start_ts": 1708929204,
  "customer_id": "cus_PdEDP7z32Z27wn",
  "id": "sub_1OnxkeJeDjdpBmRtQTvwiUeA",
  "invoice_id": "in_1OnxkeJeDjdpBmRtSd8HJBvo",
  "invoice_status": "paid",
  "payment_intent_client_secret": "pi_3OnxkfJeDjdpBmRt0hiHOz1q_secret_TxB2v8HVoveWadDsZtNkyc5wn",
  "payment_intent_id": "pi_3OnxkfJeDjdpBmRt0hiHOz1q",
  "status": "trialing",
  "stripe_price_id": "price_1MtmPmJeDjdpBmRtJm9nMYZE",
  "stripe_product_id": "prod_Nf6dZGfCIERbqP",
  "next_payment_attempt": 1708939204,
  "next_payment_amount": 1000,
  "next_payment_currency": "usd"
}

京ICP备19011570号-2