Venice is a simple gem for verifying Apple In-App Purchase receipts, and retrieving the information associated with receipt data.
There are two reasons why you should verify in-app purchase receipts on the server: First, it allows you to keep your own records of past purchases, which is useful for up-to-the-minute metrics and historical analysis. Second, server-side verification over SSL is the most reliable way to determine the authenticity of purchasing records.
See Apple's Receipt Validation Programming Guide for additional information.
Venice is named for Venice, Italy—or more specifically, Shakespeare's The Merchant of Venice. It's part of a series of world-class command-line utilities for iOS development, which includes Cupertino (Apple Dev Center management), Shenzhen (Building & Distribution), Houston (Push Notifications), Dubai (Passbook pass generation), and Nashville (iTunes Store API).
$ gem install venice
require 'venice'
data = '(Base64-Encoded Receipt Data)'
if receipt = Venice::Receipt.verify(data)
p receipt.to_h
# You can refer an original JSON response via a Receipt instance.
case receipt.original_json_response['status'].to_i
when 0 then foo
when 21006 then bar
end
end
require 'venice'
data = '(Base64-Encoded Receipt Data)'
# You must pass shared secret when verification on Auto-Renewable
opts = { shared_secret: 'your key' }
if receipt = Venice::Receipt.verify(data, opts)
# Renewed receipts are added into `latest_receipt_info` array.
p receipt.latest_receipt_info.map(&:expires_at)
# => [2016-05-19 20:35:59 +0000, 2016-06-18 20:35:59 +0000, 2016-07-18 20:35:59 +0000]
end
Venice also comes with the iap
binary, which provides a convenient way to verify receipts from the command line.
$ iap verify /path/to/receipt
+--------------------------------+------------------------------------+
| Receipt |
+--------------------------------+------------------------------------+
| adam_id | 664753504 |
| application_version | 123 |
| bundle_id | com.example.product |
| download_id | 30000000000005 |
| expires_at | |
| latest_receipt | |
| original_application_version | 123 |
| original_purchase_date | Fri, 07 Mar 2014 20:59:24 GMT |
| receipt_type | Production |
| receipt_created_at | Mon, 23 Jun 2014 17:59:38 GMT |
| requested_at | Mon, 23 Jun 2014 17:59:38 GMT |
+--------------------------------+------------------------------------+
| in_app | 1 |
| - app_item_id | |
| - cancellation_at | |
| - expires_at | |
| - original_purchase_date | |
| - original_transaction_id | 1000000000000001 |
| - product_id | com.example.product |
| - purchase_date | |
| - quantity | 1 |
| - transaction_id | 1000000000000001 |
| - web_order_line_item_id | 1000000000000001 |
| - version_external_identifier | |
| - is_trial_period | true |
| - is_in_intro_offer_period | true |
+--------------------------------+------------------------------------+
Mattt Thompson (@mattt)
Venice is available under the MIT license. See the LICENSE file for more info.