使用Curl验证App Store收据时是否出现IllegalStateException?

Ale*_*lin 8 iphone ios ios5

我有一个应用内购买,我想验证商店收据.我想通过使用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
Run Code Online (Sandbox Code Playgroud)

看起来像:

{
    "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"
 }
Run Code Online (Sandbox Code Playgroud)

然后我在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
Run Code Online (Sandbox Code Playgroud)

我得到的所有回报都是非常有帮助的:

{"status":21002, "exception":"java.lang.IllegalStateException"}
Run Code Online (Sandbox Code Playgroud)

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

这里有点难过.它确实看起来像是在他们的结尾找到了事务(在收据数据中调整了几个字节会抛出java.lang.IllegalArgumentException),所以我猜它与事务本身有关.有没有人见过这个?

谢谢!

spo*_*ith 1

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

我最初使用的是来自http://images.worldofapple.com/validating_051110.pdf的示例收据数据,在对其进行 uudecode 并将其重新编码为 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}

  • 响应“21007”并非无用,它准确地说明了问题所在:沙箱收据正在发送到实时生产环境。这就是沙箱检查起作用的原因。 (4认同)