如何通过编程方式创建Apple订阅价格变更?
如何通过App Store Connect API创建订阅价格变更?
我尝试通过编程方式修改订阅价格,找到了两个相关API方法:创建价格变更、列出应用的所有价格点。第一个方法需要第二个方法获取的价格点ID,第二个方法返回的价格点格式如下:
{ "type" : "appPricePoints", "id" : "eyJzIjoiMTU2MTYxMTU2OSIsInQiOiJBRkciLCJwIjoiMTAwNDkifQ", "attributes" : { "customerPrice" : "3.99", "proceeds" : "2.8" }, "relationships" : { "equalizations" : { "links" : { "self" : "https://api.appstoreconnect.apple.com/v3/appPricePoints/eyJzIjoiMTU2MTYxMTU2OSIsInQiOiJBRkciLCJwIjoiMTAwNDkifQ/relationships/equalizations", "related" : "https://api.appstoreconnect.apple.com/v3/appPricePoints/eyJzIjoiMTU2MTYxMTU2OSIsInQiOiJBRkciLCJwIjoiMTAwNDkifQ/equalizations" } } }, "links" : { "self" : "https://api.appstoreconnect.apple.com/v3/appPricePoints/eyJzIjoiMTU2MTYxMTU2OSIsInQiOiJBRkciLCJwIjoiMTAwNDkifQ" } }
其中价格点ID是包含s、t、p三个字段的JSON的base64编码值。
更新
感谢@inkerdusk,我了解到价格变更是由Apple预先创建的,应直接使用而非自行创建。于是我尝试发送以下请求,分别使用base64值本身或其解码后JSON中的三个字段值:
{ "data": { "attributes": { }, "relationships": { "subscription": { "data": { "id": "subscription-id", "type": "subscriptions" } }, "subscriptionPricePoint": { "data": { "id": <HERE_TRIED_TO_SPECIFY_BASE64_ITSELF_OR_ANY_OF_THREE_VALUES_OF_DECODED_JSON>, "type": "subscriptionPricePoints" } } }, "type": "subscriptionPrices" } }
但每次都会收到如下错误:
{ "errors" : [ { "id" : "466aa984-1491-4da3-8e5d-9b26dc9e844f", "status" : "422", "code" : "ENTITY_UNPROCESSABLE", "title" : "The request entity is not a valid request document object", "detail" : "Unexpected or invalid value at 'data.relationships.subscriptionPricePoint.data.id'.", "meta" : { "position" : { "row" : -1, "column" : -1 } } } ] }
问题解决方法
核心问题是你误用了资源类型:从「列出应用价格点」接口拿到的是appPricePoints类型的ID,但创建订阅价格变更时,需要关联的是**subscriptionPricePoints类型**的资源ID,两者不能混用。
具体操作步骤:
- 获取订阅专属的价格点ID:调用针对订阅的价格点列表接口,获取目标订阅对应的
subscriptionPricePoints资源,这类资源的ID才是请求中需要填入的有效值。 - 修正请求体:将
subscriptionPricePoint.data.id替换为上述获取到的subscriptionPricePoints类型ID,保持type字段为subscriptionPricePoints不变。
修正后的请求体示例:
{ "data": { "attributes": { // 可按需添加价格变更属性,比如生效日期"effectiveDate": "2024-01-01T00:00:00Z" }, "relationships": { "subscription": { "data": { "id": "你的订阅ID", "type": "subscriptions" } }, "subscriptionPricePoint": { "data": { "id": "从订阅价格点接口获取的ID", "type": "subscriptionPricePoints" } } }, "type": "subscriptionPrices" } }
补充说明:
appPricePoints是应用级的通用价格基准,而subscriptionPricePoints是绑定到具体订阅的价格资源,必须使用后者的ID才能创建有效的价格变更。- 如果找不到目标订阅的
subscriptionPricePoints,需要先在App Store Connect后台为该订阅配置对应价格点,或通过API创建订阅价格点后再发起变更请求。
内容的提问来源于stack exchange,提问作者Vassily
相关产品推荐
相关产品推荐

