确认套餐购买
POST/api/v1/subscriptions/attach
客户接受报价后执行 operationId。待处理时,由 Indiana 执行 Stripe 返回 checkoutUrl,仅记录模式返回同一 execution;记录到已验签的 Stripe 通知后为 complete。intent 为 cancel 时放弃未完成的报价并释放所持优惠。过期报价必须重新预览。
API v1更新于
发起请求
客户接受报价后执行 operationId。待处理时,由 Indiana 执行 Stripe 返回 checkoutUrl,仅记录模式返回同一 execution;记录到已验签的 Stripe 通知后为 complete。intent 为 cancel 时放弃未完成的报价并释放所持优惠。过期报价必须重新预览。
- 调用凭据
- 服务端 API Key 或客户 Token。客户调用不能选择其他客户。
- 所需权限
billing:write
base URL 和 App ID 来自 SDK 接入页。示例使用占位值,不会执行请求。服务端 Key 不可放入浏览器。
Web Beta 的结账需要明确配置 Stripe Sandbox 测试账号与固定 Product Price。跳转完成不等于支付确认。
1curl -X POST "$INDIANA_BASE_URL/api/v1/subscriptions/attach" \2 -H "Authorization: Bearer $INDIANA_CUSTOMER_TOKEN" \3 -H "X-Indiana-Project: $INDIANA_PROJECT_ID" \4 -H "X-Indiana-Protocol: 0.5" \5 -H "X-Indiana-Environment: sandbox" \6 -H "Content-Type: application/json" \7 -d '{8 "operationId": "00000000-0000-4000-8000-000000000001"9}'
响应为示例,不代表已实际执行请求。
请求参数
JSON 请求体
operationIduuid必填业务操作 UUID;订阅执行引用 previewAttach 返回的 operationId,余额退款引用原消费操作。
customerIduuid可选Indiana 客户 ID。服务端从已验证身份关联;客户 Token 调用时省略并使用 Token 绑定的客户。
intentenum可选本次操作的 intent 值,类型和约束见字段标注。
查看允许值
"confirm""cancel"
响应字段
成功响应包含 requestId 和 scope。结合实际业务状态或 accepted 判断操作结果;可选字段不可用时省略。
HTTP 200 · application/json
requestIduuid必填服务端生成的 HTTP 请求 UUID,排查请求时提供这个值。
scopeobject必填响应实际所属的 App 和环境。Header 只能核对,不能切换 Key 范围。
展开子字段
projectIdstring必填凭据绑定的 App ID。
minLength: 1
environmentenum必填独立数据范围:sandbox 或 live。
查看允许值
"sandbox""live"
operationobject必填本次操作的 operation 值,类型和约束见字段标注。
展开子字段
operationIduuid必填业务操作 UUID;订阅执行引用 previewAttach 返回的 operationId,余额退款引用原消费操作。
orderIduuid必填本次操作的 orderId 值,类型和约束见字段标注。
appendboolean可选本次操作的 append 值,类型和约束见字段标注。
invoiceModeboolean可选本次操作的 invoiceMode 值,类型和约束见字段标注。
statusenum必填本次操作的 status 值,类型和约束见字段标注。
查看允许值
"pending""complete""cancelled""failed"
executorenum必填本次操作的 executor 值,类型和约束见字段标注。
查看允许值
"indiana""merchant"
checkoutUrluri | null必填本次操作的 checkoutUrl 值,类型和约束见字段标注。
executionobject | null必填本次操作的 execution 值,类型和约束见字段标注。
展开子字段
invoiceModeobject可选本次操作的 invoiceMode 值,类型和约束见字段标注。
展开子字段
enabledboolean必填本次操作的 enabled 值,类型和约束见字段标注。
enable_plan_immediatelyboolean必填本次操作的 enable_plan_immediately 值,类型和约束见字段标注。
default: false
finalizeboolean必填本次操作的 finalize 值,类型和约束见字段标注。
default: true
invoice_template_idstring可选本次操作的 invoice_template_id 值,类型和约束见字段标注。
net_terms_daysinteger可选本次操作的 net_terms_days 值,类型和约束见字段标注。
max: 9007199254740991
appendobject可选本次操作的 append 值,类型和约束见字段标注。
展开子字段
subscriptionIdstring必填本次操作的 subscriptionId 值,类型和约束见字段标注。
pattern: ^sub_[A-Za-z0-9]+$
customerIdstring必填Indiana 客户 ID。服务端从已验证身份关联;客户 Token 调用时省略并使用 Token 绑定的客户。
pattern: ^cus_[A-Za-z0-9]+$
sourceItemsarray必填本次操作的 sourceItems 值,类型和约束见字段标注。
minItems: 1 · maxItems: 100
prorationDateinteger必填本次操作的 prorationDate 值,类型和约束见字段标注。
min: 0 · max: 9007199254740991
amountMinorinteger必填本次操作的 amountMinor 值,类型和约束见字段标注。
max: 9007199254740991
periodStartMsnumber必填本次操作的 periodStartMs 值,类型和约束见字段标注。
periodEndMsnumber必填本次操作的 periodEndMs 值,类型和约束见字段标注。
provider"stripe"必填本次操作的 provider 值,类型和约束见字段标注。
executorenum必填本次操作的 executor 值,类型和约束见字段标注。
查看允许值
"indiana""merchant"
accountIdstring必填本次操作的 accountId 值,类型和约束见字段标注。
pattern: ^acct_[A-Za-z0-9]+$
modeenum必填本次操作的 mode 值,类型和约束见字段标注。
查看允许值
"payment""subscription"
lineItemsarray必填本次操作的 lineItems 值,类型和约束见字段标注。
minItems: 1 · maxItems: 100
展开子字段
pricestring | null必填当前请求或现有计费币种的价格;不可用时 null,不改用其他币种。
quantityinteger必填业务数量按字段标注类型传入;积分操作用十进制字符串,避免浮点误差。quote/reserve/confirm/refund 要求正数;consume 可记录零费用事件。
min: 1 · max: 10000
priceIduuid必填本次操作的 priceId 值,类型和约束见字段标注。
productNamestring必填本次操作的 productName 值,类型和约束见字段标注。
minLength: 1 · maxLength: 80
amountMinorinteger必填本次操作的 amountMinor 值,类型和约束见字段标注。
min: 0 · max: 100000000
currencystring必填已发布价格支持的币种代码。
pattern: ^[a-z]{3}$
intervalenum必填本次操作的 interval 值,类型和约束见字段标注。
查看允许值
"week""month""year""one_off"
intervalCountinteger必填收费周期的次数:week 最多 156、month 最多 36、year 最多 3,省略为 1;free 和 one_time 不接受。额度重置周期独立。
min: 1 · max: 52
slotenum必填本次操作的 slot 值,类型和约束见字段标注。
查看允许值
"stripe_price_id""stripe_empty_price_id"
tiersobject | null必填本次操作的 tiers 值,类型和约束见字段标注。
discountsarray必填本次操作的 discounts 值,类型和约束见字段标注。
maxItems: 1
展开子字段
couponstring必填本次操作的 coupon 值,类型和约束见字段标注。
pattern: ^[A-Za-z0-9_-]{1,200}$
termsobject必填本次操作的 terms 值,类型和约束见字段标注。
trialPeriodDaysinteger | null必填本次操作的 trialPeriodDays 值,类型和约束见字段标注。
metadataobject必填本次操作的 metadata 值,类型和约束见字段标注。
展开子字段
grooveCheckoutIduuid必填本次操作的 grooveCheckoutId 值,类型和约束见字段标注。
grooveCustomerIduuid必填本次操作的 grooveCustomerId 值,类型和约束见字段标注。
expiresAtdate-time必填ISO 8601 UTC 到期时间;会话和预占到期后不能继续使用。
currencyenum必填已发布价格支持的币种代码。
查看允许值
"USD""EUR""CNY""GBP""JPY""CAD""AUD""NZD""CHF""HKD""SGD""KRW""INR""BRL""MXN""TWD""THB""IDR""MYR""PHP""VND""ZAR""AED""SAR""SEK""NOK""DKK""PLN""CZK""HUF""ILS""TRY""RON"
catalogAmountMinorinteger必填本次操作的 catalogAmountMinor 值,类型和约束见字段标注。
min: 0 · max: 100000000
taxMinorinteger必填本次操作的 taxMinor 值,类型和约束见字段标注。
min: 0 · max: 100000000
totalMinorinteger | null必填本次操作的 totalMinor 值,类型和约束见字段标注。
quoteFinalizedboolean必填本次操作的 quoteFinalized 值,类型和约束见字段标注。
nativePurchaseobject | null必填本次操作的 nativePurchase 值,类型和约束见字段标注。
展开子字段
type"native_purchase"必填本次操作的 type 值,类型和约束见字段标注。
receiptIduuid必填本次操作的 receiptId 值,类型和约束见字段标注。
orderIduuid必填本次操作的 orderId 值,类型和约束见字段标注。
productVersionIduuid必填本次操作的 productVersionId 值,类型和约束见字段标注。
providerenum必填本次操作的 provider 值,类型和约束见字段标注。
查看允许值
"apple""google"
productIdstring必填本次操作的 productId 值,类型和约束见字段标注。
minLength: 1 · maxLength: 255
productKindenum必填本次操作的 productKind 值,类型和约束见字段标注。
查看允许值
"membership""credit_pack""lifetime"
replacementobject | null必填本次操作的 replacement 值,类型和约束见字段标注。
展开子字段
sourceOrderIduuid必填本次操作的 sourceOrderId 值,类型和约束见字段标注。
sourceProductIdstring必填本次操作的 sourceProductId 值,类型和约束见字段标注。
minLength: 1 · maxLength: 255
policyenum必填本次操作的 policy 值,类型和约束见字段标注。
查看允许值
"apple_store""google_full_price"
sourceAccountTokensarray必填本次操作的 sourceAccountTokens 值,类型和约束见字段标注。
maxItems: 50
appAccountTokenuuid可选本次操作的 appAccountToken 值,类型和约束见字段标注。
obfuscatedAccountIdstring可选本次操作的 obfuscatedAccountId 值,类型和约束见字段标注。
minLength: 1 · maxLength: 64
obfuscatedProfileIduuid可选本次操作的 obfuscatedProfileId 值,类型和约束见字段标注。
basePlanIdstring可选本次操作的 basePlanId 值,类型和约束见字段标注。
minLength: 1 · maxLength: 255
offerIdstring可选当前客户已领取优惠的 ID;与 promotionCode 互斥。
minLength: 1 · maxLength: 255
offerKindenum必填本次操作的 offerKind 值,类型和约束见字段标注。
查看允许值
"none""introductory""promotional"
currencyenum必填已发布价格支持的币种代码。
查看允许值
"USD""EUR""CNY""GBP""JPY""CAD""AUD""NZD""CHF""HKD""SGD""KRW""INR""BRL""MXN""TWD""THB""IDR""MYR""PHP""VND""ZAR""AED""SAR""SEK""NOK""DKK""PLN""CZK""HUF""ILS""TRY""RON"
catalogAmountMinorinteger必填本次操作的 catalogAmountMinor 值,类型和约束见字段标注。
min: 0 · max: 100000000
discountMinorinteger必填本次操作的 discountMinor 值,类型和约束见字段标注。
min: 0 · max: 100000000
trialDaysinteger | null必填本次操作的 trialDays 值,类型和约束见字段标注。
seatBundlearray必填本次操作的 seatBundle 值,类型和约束见字段标注。
maxItems: 20
展开子字段
keystring必填本次操作的 key 值,类型和约束见字段标注。
pattern: ^[a-z][a-z0-9_]{0,63}$
quantityinteger必填业务数量按字段标注类型传入;积分操作用十进制字符串,避免浮点误差。quote/reserve/confirm/refund 要求正数;consume 可记录零费用事件。
min: 1 · max: 10000
applePromotionalOfferobject | null必填本次操作的 applePromotionalOffer 值,类型和约束见字段标注。
展开子字段
offerIdstring必填当前客户已领取优惠的 ID;与 promotionCode 互斥。
minLength: 1 · maxLength: 255
keyIdstring必填本次操作的 keyId 值,类型和约束见字段标注。
minLength: 1 · maxLength: 255
nonceuuid必填本次操作的 nonce 值,类型和约束见字段标注。
signaturestring必填本次操作的 signature 值,类型和约束见字段标注。
minLength: 1 · maxLength: 1024
timestampinteger必填本次操作的 timestamp 值,类型和约束见字段标注。
min: 0 · max: 9007199254740991
处理错误
常见失败| 错误码 | 处理方式 |
|---|
| UNAUTHENTICATED | 核对 Key,或将过期客户 Token 重新签发一次。 |
| FORBIDDEN | 核对当前 Key 权限与客户访问范围。 |
| INVALID_REQUEST | 检查字段类型、UUID、十进制字符串和互斥字段。 |
| SCOPE_MISMATCH | 使用凭据绑定的 App 和环境。 |
常见失败
UNAUTHENTICATED
- 处理方式
- 核对 Key,或将过期客户 Token 重新签发一次。
FORBIDDEN
- 处理方式
- 核对当前 Key 权限与客户访问范围。
INVALID_REQUEST
- 处理方式
- 检查字段类型、UUID、十进制字符串和互斥字段。
SCOPE_MISMATCH
- 处理方式
- 使用凭据绑定的 App 和环境。
相关:完整请求与错误约定·返回接口索引