class AndroidInAppBilling::InappPurchase

Represents the INAPP_PURCHASE concept from Google Play In-app Billing v3 API (java API for Android devices), including both data and signature

@see developer.android.com/google/play/billing/billing_reference.html

Constants

Attributes
PURCHASE_STATES

Public Class Methods

new(data:, signature:) click to toggle source

@param data [String] @param signature [String] @!attribute raw

@return [String]

@!attribute signature

@return [String]

@!attribute order_id

@return [String]

@!attribute package_name

@return [String]

@!attribute product_id

@return [String]

@!attribute purchased_at

@return [DateTime]

@!attribute state

@return [String]

@!attribute developer_payload

@return [String]

@!attribute token

@return [String]

@!attribute auto_renewing

@return [Boolean]
Calls superclass method
# File lib/android_in_app_billing/inapp_purchase.rb, line 44
def initialize(data:, signature:)
  super Attributes.new(data, parse_signature(signature), *parse_data(data))
end

Public Instance Methods

attributes() click to toggle source

@return [Hash]

# File lib/android_in_app_billing/inapp_purchase.rb, line 49
def attributes
  to_h.reject { |k, _| [:raw, :signature].include?(k) }
end
signature_valid?() click to toggle source

@return [true, false]

# File lib/android_in_app_billing/inapp_purchase.rb, line 54
def signature_valid?
  signature_verifier.call
end

Private Instance Methods

parse_data(raw_data) click to toggle source
# File lib/android_in_app_billing/inapp_purchase.rb, line 64
def parse_data(raw_data) # rubocop:disable Metrics/MethodLength
  data = JSON.parse(raw_data)

  [
    data.fetch('orderId', ''),
    data.fetch('packageName'),
    data.fetch('productId'),
    millis_to_datetime(data.fetch('purchaseTime')),
    PURCHASE_STATES[data.fetch('purchaseState')],
    data.fetch('developerPayload', ''),
    data.fetch('purchaseToken'),
    data.fetch('autoRenewing')
  ]
end
parse_signature(signature) click to toggle source
# File lib/android_in_app_billing/inapp_purchase.rb, line 60
def parse_signature(signature)
  Base64.decode64(signature)
end
signature_verifier() click to toggle source
# File lib/android_in_app_billing/inapp_purchase.rb, line 79
def signature_verifier
  SignatureVerifier.new(data: raw, signature: signature)
end