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]
expiration_intent[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 44
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']
  @expiration_intent = Integer(original_json_response['expiration_intent']) if original_json_response['expiration_intent']

  @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
validate(data, options = {})
Alias for: verify
validate!(data, options = {})
Alias for: verify!
verify(data, options = {}) click to toggle source
# File lib/venice/receipt.rb, line 103
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 109
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_h()
Alias for: to_hash
to_hash() click to toggle source
# File lib/venice/receipt.rb, line 79
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 98
def to_json
  to_hash.to_json
end