将收据数据发送到App Store:
提交此JSON对象作为HTTP POST请求的有效负载。
中文文档:https://help.apple.com/app-store-connect/#/dev7e89e149d
在测试环境中,https://sandbox.itunes.apple.com/verifyReceipt
用作URL。
在生产中,https://buy.itunes.apple.com/verifyReceipt
用作URL。
国内访问苹果服务器域名速度比较慢,可以使用代理转发
配置代理,先转发到香港再转发到苹果服务器:Nginx(三)------nginx 反向代理 - YSOcean - 博客园
key | value |
The base64 encoded receipt data. base64编码的收据数据。 | |
password | Only used for receipts that contain auto-renewable subscriptions. Your app’s shared secret (a hexadecimal string). 仅用于包含自动续订的收据。应用程序的共享机密(十六进制字符串)。 |
exclude-old-transactions | Only used for iOS7 style app receipts that contain auto-renewable or non-renewing subscriptions. If value is true, response includes only the latest renewal transaction for any subscriptions. 仅用于包含自动续订或非续订订阅的iOS7样式的应用收据。如果值为true,则响应仅包括任何订阅的最新续订交易 |
key | meaning |
status | 相应状态码 |
receipt | 发送用于验证的收据的JSON表示形式。有关在收据中找到的密钥的信息 |
latest_receipt | 仅针对包含自动续订的收据返回。对于iOS 6样式的交易收据,这是最新续订的以64为基数编码的收据。对于iOS 7风格的应用收据,这是最新的base-64编码的应用收据。 |
latest_receipt_info | 仅针对包含自动续订的收据返回。对于iOS 6样式的交易收据,这是最新续签的收据的JSON表示形式。对于iOS 7风格的应用收据,此键的值是一个包含所有应用内购买交易的数组。这不包括已被您的应用标记为已完成的消耗品交易 |
latest_expired_receipt_info |
仅针对iOS 6样式的交易收据返回,用于自动续订。过期订阅的收据的JSON表示形式 |
pending_renewal_info | 仅针对包含自动续订的iOS 7样式的应用收据返回。在JSON文件中,此键的值是一个数组,其中每个元素都包含由标识的每个自动可续订订阅的待处理续订信息Product Identifier。待定的续订可能是指将来计划的续订,或者是由于某种原因在过去失败的续订。 |
is-retryable | 重试对此收据进行验证。仅适用于状态码21100-21199 |
key | meaning |
bundle_id | 捆绑包标识符 |
application_version | 应用程式版本 |
original_application_version | 最初购买的应用程序的版本。 |
receive_creation_date | 应用收据的创建日期。 |
expiration_date | 应用收据到期的日期。 |
product_id | 购买的商品的产品标识符。 |
transaction_id | 购买物品的交易标识符。 |
original_transaction_id | 对于恢复先前交易的交易,原始交易的交易标识符 |
purchase_date | 购买该商品的日期和时间 |
expires_date | 订阅的到期日期,表示为格林尼治标准时间1970年1月1日00:00:00以来的毫秒数 |
expiration_intent | 对于过期的订阅,订阅到期的原因 |
is_in_billing_retry_period | 对于过期的订阅,Apple是否仍在尝试自动续订 |
is_trial_period | 对于订阅,无论是否在免费试用期内。 |
is_in_intro_offer_period | 对于自动续订的订阅,无论它是否处于促销价格期间 |
cancel_date | 对于Apple客户支持取消的交易,取消的时间和日期 |
cancellation_reason | 对于已取消的交易,取消的原因 |
app_item_id | App Store用于唯一标识创建事务的应用程序的字符串 |
version_external_identifier | 唯一标识应用程序修订版的任意数字。 |
web_order_line_item_id | 标识订阅购买的主键。 |
auto_renew_status | 自动续订订阅的当前续订状态。 “ 1”-订阅将在当前订阅期结束时续订。 “ 0”-客户已关闭其订阅的自动续订。 |
auto_renew_product_id | 自动续订订阅的当前续订首选项。 |
price_consent_status | 订阅价格上涨的当前价格同意状态。 |
状态码 | 描述 |
21000 | App Store无法读取您提供的JSON对象。 |
21002 | receipt-data 属性中的数据格式错误或丢失。 |
21003 | 收据无法认证。(一般都是因为共享秘钥有问题才产生的错误) |
21004 | 您提供的共享密码与您帐户的文件共享密码不匹配。 |
21005 | 收据服务器当前不可用。 |
21006 | 该收据有效,但订阅已过期。当此状态代码返回到您的服务器时,收据数据也会被解码并作为响应的一部分返回。 仅针对自动续订的iOS 6样式交易收据返回。 |
21007 | 该收据来自测试环境,但已发送到生产环境以进行验证。而是将其发送到测试环境。 |
21008 | 该收据来自生产环境,但是已发送到测试环境以进行验证。而是将其发送到生产环境。 |
21010 | 此收据无法授权。就像从未进行过购买一样对待。 |
21100-21199 | 内部数据访问错误。 |
注意:同一个apple 苹果账号如果购买过内购订阅的商品,那么请求的验单参数里必须传password共享秘钥,否则会报错21004;同理没有订阅过的苹果账号验单时可不传password参数,传了也可以正常验单,结论:如果开通内购订阅并创建共享秘钥那么默认都传此参数(沙盒环境下,正式环境暂未测试)
分享几个文章:| ProcessOn