class Venice::Receipt
Constants
- MAX_RE_VERIFY_COUNT
Attributes
adam_id[R]
application_version[R]
The app’s version number.
bundle_id[R]
The app’s bundle identifier.
download_id[R]
expires_at[R]
The date that the app receipt expires.
in_app[R]
The receipt for an in-app purchase.
latest_receipt_info[RW]
original_application_version[R]
The version of the app that was originally purchased.
original_json_response[R]
Original json response from AppStore
original_purchase_date[R]
The original purchase date
pending_renewal_info[R]
Information about the status of the customer's auto-renewable subscriptions
receipt_created_at[R]
receipt_type[R]
Non-Documented receipt keys/values
requested_at[R]
Public Class Methods
new(attributes = {})
click to toggle source
# File lib/venice/receipt.rb, line 43 def initialize(attributes = {}) @original_json_response = attributes['original_json_response'] @bundle_id = attributes['bundle_id'] @application_version = attributes['application_version'] @original_application_version = attributes['original_application_version'] if attributes['original_purchase_date'] @original_purchase_date = DateTime.parse(attributes['original_purchase_date']) end if attributes['expiration_date'] @expires_at = Time.at(attributes['expiration_date'].to_i / 1000).to_datetime end @receipt_type = attributes['receipt_type'] @adam_id = attributes['adam_id'] @download_id = attributes['download_id'] @requested_at = DateTime.parse(attributes['request_date']) if attributes['request_date'] @receipt_created_at = DateTime.parse(attributes['receipt_creation_date']) if attributes['receipt_creation_date'] @in_app = [] if attributes['in_app'] attributes['in_app'].each do |in_app_purchase_attributes| @in_app << InAppReceipt.new(in_app_purchase_attributes) end end @pending_renewal_info = [] if original_json_response && original_json_response['pending_renewal_info'] original_json_response['pending_renewal_info'].each do |pending_renewal_attributes| @pending_renewal_info << PendingRenewalInfo.new(pending_renewal_attributes) end end end
verify(data, options = {})
click to toggle source
# File lib/venice/receipt.rb, line 101 def verify(data, options = {}) verify!(data, options) rescue VerificationError, Client::TimeoutError false end
Also aliased as: validate
verify!(data, options = {})
click to toggle source
# File lib/venice/receipt.rb, line 107 def verify!(data, options = {}) client = Client.production retry_count = 0 begin client.verify!(data, options) rescue VerificationError => error case error.code when 21007 client = Client.development retry when 21008 client = Client.production retry else retry_count += 1 if error.retryable? && retry_count <= MAX_RE_VERIFY_COUNT retry end raise error end rescue Net::ReadTimeout, Timeout::Error, OpenSSL::SSL::SSLError, Errno::ECONNRESET, Errno::ECONNABORTED, Errno::EPIPE # verifyReceipt is idempotent so we can retry it. # Net::Http has retry logic for some idempotent http methods but it verifyReceipt is POST. retry_count += 1 retry if retry_count <= MAX_RE_VERIFY_COUNT raise end end
Also aliased as: validate!
Public Instance Methods
to_hash()
click to toggle source
# File lib/venice/receipt.rb, line 77 def to_hash { bundle_id: @bundle_id, application_version: @application_version, original_application_version: @original_application_version, original_purchase_date: (@original_purchase_date.httpdate rescue nil), expires_at: (@expires_at.httpdate rescue nil), receipt_type: @receipt_type, adam_id: @adam_id, download_id: @download_id, requested_at: (@requested_at.httpdate rescue nil), receipt_created_at: (@receipt_created_at.httpdate rescue nil), in_app: @in_app.map(&:to_h), pending_renewal_info: @pending_renewal_info.map(&:to_h), latest_receipt_info: @latest_receipt_info } end
Also aliased as: to_h
to_json()
click to toggle source
# File lib/venice/receipt.rb, line 96 def to_json to_hash.to_json end