class Venice::InAppReceipt

Attributes

app_item_id[R]

A string that the App Store uses to uniquely identify the application that created the payment transaction. If your server supports multiple applications, you can use this value to differentiate between them. Applications that are executing in the sandbox do not yet have an app-item-id assigned to them, so this key is missing from receipts created by the sandbox.

cancellation_at[R]

For a transaction that was canceled by Apple customer support, the time and date of the cancellation. For an auto-renewable subscription plan that was upgraded, the time and date of the upgrade transaction.

expires_at[R]

For auto-renewable subscriptions, returns the date the subscription will expire

is_in_intro_offer_period[R]

Only present for auto-renewable subscription receipts. Value is true if the customer’s subscription is currently in an introductory price period, false if not, nil if key is not present on receipt.

is_trial_period[R]

Only present for auto-renewable subscription receipts. Value is true if the customer’s subscription is currently in the free trial period, false if not, nil if key is not present on receipt.

original[RW]

For a transaction that restores a previous transaction, this is the original receipt

original_json_data[R]

Original JSON data returned from Apple for an InAppReceipt object.

product_id[R]

The product identifier of the item that was purchased. This value corresponds to the productIdentifier property of the SKPayment object stored in the transaction’s payment property.

purchased_at[R]

The date and time this transaction occurred. This value corresponds to the transaction’s transactionDate property.

quantity[R]

The number of items purchased. This value corresponds to the quantity property of the SKPayment object stored in the transaction’s payment property.

transaction_id[R]

The transaction identifier of the item that was purchased. This value corresponds to the transaction’s transactionIdentifier property.

version_external_identifier[R]

An arbitrary number that uniquely identifies a revision of your application. This key is missing in receipts created by the sandbox.

web_order_line_item_id[R]

The primary key for identifying subscription purchases. This value is a unique ID that identifies purchase events across devices, including subscription renewal purchase events. When restoring purchase, transaction_id could change

Public Class Methods

new(attributes = {}) click to toggle source
# File lib/venice/in_app_receipt.rb, line 60
def initialize(attributes = {})
  @original_json_data = attributes
  @quantity = Integer(attributes['quantity']) if attributes['quantity']
  @product_id = attributes['product_id']
  @transaction_id = attributes['transaction_id']
  @web_order_line_item_id = attributes['web_order_line_item_id']
  @purchased_at = DateTime.parse(attributes['purchase_date']) if attributes['purchase_date']
  @app_item_id = attributes['app_item_id']
  @version_external_identifier = attributes['version_external_identifier']
  @is_trial_period = attributes['is_trial_period'].to_s == 'true' if attributes['is_trial_period']
  @is_in_intro_offer_period = attributes['is_in_intro_offer_period'] == 'true' if attributes['is_in_intro_offer_period']

  # expires_date is in ms since the Epoch, Time.at expects seconds
  if attributes['expires_date_ms']
    @expires_at = Time.at(attributes['expires_date_ms'].to_i / 1000)
  elsif attributes['expires_date'] && is_number?(attributes['expires_date'])
    @expires_at = Time.at(attributes['expires_date'].to_i / 1000)
  end

  # cancellation_date is in ms since the Epoch, Time.at expects seconds
  @cancellation_at = Time.at(attributes['cancellation_date_ms'].to_i / 1000) if attributes['cancellation_date_ms']

  if attributes['original_transaction_id'] || attributes['original_purchase_date']
    original_attributes = {
      'transaction_id' => attributes['original_transaction_id'],
      'purchase_date' => attributes['original_purchase_date']
    }

    self.original = InAppReceipt.new(original_attributes)
  end
end

Public Instance Methods

to_h()
Alias for: to_hash
to_hash() click to toggle source
# File lib/venice/in_app_receipt.rb, line 92
def to_hash
  {
    quantity: @quantity,
    product_id: @product_id,
    transaction_id: @transaction_id,
    web_order_line_item_id: @web_order_line_item_id,
    purchase_date: (@purchased_at.httpdate rescue nil),
    original_transaction_id: (@original.transaction_id rescue nil),
    original_purchase_date: (@original.purchased_at.httpdate rescue nil),
    app_item_id: @app_item_id,
    version_external_identifier: @version_external_identifier,
    is_trial_period: @is_trial_period,
    is_in_intro_offer_period: @is_in_intro_offer_period,
    expires_at: (@expires_at.httpdate rescue nil),
    cancellation_at: (@cancellation_at.httpdate rescue nil)
  }
end
Also aliased as: to_h
to_json() click to toggle source
# File lib/venice/in_app_receipt.rb, line 111
def to_json
  to_hash.to_json
end

Private Instance Methods

is_number?(string) click to toggle source
# File lib/venice/in_app_receipt.rb, line 117
def is_number?(string)
  !!(string && string.to_s =~ /^[0-9]+$/)
end