8

我有一个应用内购买项目,我想验证其商店收据。我想通过使用 Apple 的 itunes API 从互联网上的随机机器验证这一点。交易完成后,收据存储在 Parse 中。我正在关注Apple 开发者网站上的指南。首先我从 Parse 得到交易:

curl -X GET \
  -H "X-Parse-Application-Id: [...]" \
  -H "X-Parse-REST-API-Key: [...]" \
  https://api.parse.com/1/classes/Transactions/123456789

看起来像:

{
    "transactionReceipt":{"__type":"Bytes","base64":"asdfqwertyASDFQWERTY="},
    "transactionType":"Purchased",
    "transactionIdentifier":"[...]",
    "transactionDate":{"__type":"Date","iso":"2012-09-10T06:58:44.071Z"},
    "createdAt":"2012-09-10T06:58:37.234Z",
    "updatedAt":"2012-09-10T06:58:37.234Z",
    "objectId":"HyPWJBlWzt"
 }

然后,我在 transactionReceipt 中获取 base64 值并将其卷曲到 Apple 端点以获取收据:

curl -H "Accept: application/json" \
     -H "Content-Type: application/json" \ 
     -X POST 
     -d '{"receipt-data":"asdfqwertyASDFQWERTY="}' \
     https://buy.itunes.apple.com/verifyReceipt

我得到的只是没有太大帮助:

{"status":21002, "exception":"java.lang.IllegalStateException"}

我认为这对应于“收据数据属性中的数据格式错误。”。让 curl 使用 --trace-ascii 转储整个操作并没有透露任何我认为相关的内容,我确信问题不在于连接本身。

这里有点难过。看起来确实是在他们的最后发现了交易(调整收据数据中的几个字节会引发 java.lang.IllegalArgumentException),所以我猜它与交易本身有关。有人见过这个吗?

谢谢!

4

1 回答 1

1

在搜索相同的错误消息后,我来到了这里。我最终解决了这个问题——我能给出的最好的建议是仔细检查收据是否有效,并且您将其发布到正确的 URL。当我使用无效收据(或者可能只是错误的类型 - 它是应用收据,而不是应用内购买收据)时,我得到了您的确切错误,并且在使用发布到的有效沙盒收据时出现类似错误生产验证网址。

我最初使用来自http://images.worldofapple.com/validating_051110.pdf的示例收据数据,在 uudecoding 并将其重新编码为 base64 之后。我尝试发布到:

两者都给出了同样的错误{"status":21002, "exception":"java.lang.IllegalStateException"}。我现在怀疑根本原因是这是应用收据,而不是应用内购买收据。

然后我从https://gist.github.com/sauloarruda/2559455获得了另一个收据示例

https://buy.itunes.apple.com/verifyReceipt我得到了同样无用的回复: {"status":21007}

最后在https://sandbox.itunes.apple.com/verifyReceipt我得到了预期的响应:

{ "receipt":{"original_purchase_date_pst":"2012-04-30 08:05:55 America/Los_Angeles", "original_transaction_id":"1000000046178817", "original_purchase_date_ms":"1335798355868", "transaction_id":"1000000046178817", "quantity":"1", "product_id":"com.mindmobapp.download", "bvrs":"20120427", "purchase_date_ms":"1335798355868", "purchase_date":"2012-04-30 15:05:55 Etc/GMT", "original_purchase_date":"2012-04-30 15:05:55 Etc/GMT", "purchase_date_pst":"2012-04-30 08:05:55 America/Los_Angeles", "bid":"com.mindmobapp.MindMob", "item_id":"521129812"}, "status":0}

于 2013-04-09T20:01:19.620 回答