2012-09-11 107 views
6

我有一個應用內購買,我想要驗證商店收據。我想通過使用Apple的iTunes API從互聯網上的隨機機器驗證這一點。交易完成後,收據將存儲在Parse中。我正在關注Apple developer website上的指南。首先,我從解析獲得交易:使用Curl驗證App Store收據時發生IllegalStateException?

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" 
} 

然後我拿的base64值內transactionReceipt和捲曲它針對蘋果終端獲得收據:

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"} 

我認爲這與「收據數據屬性中的數據格式不正確」相對應。使用--trace-ascii捲曲整個操作沒有透露任何我認爲是相關的東西,我確定這個問題不在連接本身。

稍微難倒了這裏。它看起來像事務被發現在他們的最後(在收據中調整了幾個字節 - 數據拋出了一個java.lang.IllegalArgumentException),所以我猜測它與事務本身有關。有沒有人看過這個?

謝謝!

回答

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}

+3

響應「21007」不是無用的,它確切地告訴了什麼是錯誤的:沙箱收據正被髮送到現場製作環境ironment。這就是沙箱檢查工作的原因。 –

相關問題