2012-09-11 20 views
6

Tôi có mua hàng trong ứng dụng mà tôi muốn xác minh biên nhận cửa hàng. Tôi muốn xác minh điều này từ một máy ngẫu nhiên trên Internet bằng cách sử dụng API itunes của Apple. Biên nhận được lưu trữ trong Parse sau khi giao dịch được hoàn tất. Tôi đang làm theo hướng dẫn trên Apple developer website. Đầu tiên tôi nhận được giao dịch từ Parse:IllegalStateException khi sử dụng Curl để xác minh biên lai của App Store?

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

trông giống như:

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

tôi sau đó lấy giá trị base64 bên transactionReceipt và cuộn tròn nó chống lại các thiết bị đầu cuối của Apple để có được những nhận:

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

Và tất cả những gì tôi nhận được đều không hữu ích lắm:

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

mà tôi tin rằng tương ứng với "Dữ liệu trong thuộc tính dữ liệu biên nhận không đúng định dạng". Bắt curl để đổ toàn bộ hoạt động với --trace-ascii không tiết lộ bất cứ điều gì tôi nghĩ là có liên quan, tôi chắc chắn vấn đề không phải là với kết nối chính nó.

Hơi bối rối ở đây. Nó trông giống như giao dịch đã được tìm thấy trên kết thúc của họ (tinh chỉnh một vài byte trong các dữ liệu nhận ném một java.lang.IllegalArgumentException), vì vậy tôi đoán nó có cái gì để làm với các giao dịch chính nó. Có ai thấy điều này trước đây không?

Cảm ơn!

Trả lời

1

Tôi đã hạ cánh tại đây sau khi tìm kiếm thông báo lỗi tương tự. Cuối cùng tôi đã giải quyết nó - lời khuyên tốt nhất tôi có thể đưa ra là kiểm tra kỹ xem biên lai có hợp lệ không và bạn đã đăng nó vào đúng URL chưa. Tôi đã nhận được lỗi chính xác của bạn khi tôi đang sử dụng biên nhận không hợp lệ (hoặc có thể chỉ là loại sai - đó là biên nhận ứng dụng, không phải là biên lai mua hàng trong ứng dụng) và lỗi tương tự khi sử dụng biên nhận sandbox hợp lệ được đăng lên ' url xác minh sản xuất.

Ban đầu tôi đã sử dụng dữ liệu biên nhận mẫu từ http://images.worldofapple.com/validating_051110.pdf, sau khi mã hóa và mã hóa lại dưới dạng base64. Tôi cố gắng gửi bài đến:

Cả hai đã cùng một lỗi {"status":21002, "exception":"java.lang.IllegalStateException"}. Bây giờ tôi nghi ngờ nguyên nhân gốc rễ là đây là biên lai ứng dụng, không phải là biên lai mua hàng trong ứng dụng.

sau đó tôi nhận được một hóa đơn ví dụ từ https://gist.github.com/sauloarruda/2559455

Tại https://buy.itunes.apple.com/verifyReceipt tôi nhận được một câu trả lời vô ích tương tự: {"status":21007}

Cuối cùng tại https://sandbox.itunes.apple.com/verifyReceipt tôi đều có phản ứng dự kiến:

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

Câu trả lời "21007" không phải là vô ích, nó nói chính xác những gì đã sai: một biên nhận sandbox đã được gửi đến env sản xuất trực tiếp sắt. Đó là lý do tại sao kiểm tra hộp cát hoạt động. –

Các vấn đề liên quan