class Comune::Receipt

Constants

MAXIMUM_OPEN_TIMEOUT
MAXIMUM_READ_TIMEOUT

Public Class Methods

new(receipt_data, signature) click to toggle source
# File lib/comune/receipt.rb, line 8
def initialize(receipt_data, signature)
  @receipt_data = receipt_data
  @signature    = signature
end

Public Instance Methods

verify() click to toggle source
# File lib/comune/receipt.rb, line 13
def verify
  Comune::Tampering.verify(@receipt_data, @signature)
  access_token = Comune::GenerateToken.execute
  receipt_verification(access_token)
end

Private Instance Methods

encoded_receipt_data() click to toggle source
# File lib/comune/receipt.rb, line 25
def encoded_receipt_data
  JSON.parse(Base64.decode64(@receipt_data))
end
end_point() click to toggle source
# File lib/comune/receipt.rb, line 43
def end_point
  "https://www.googleapis.com/androidpublisher/v3/applications/#{Comune.package_name}/purchases/subscriptions/#{Comune.subscription_id}"
end
purchase_token() click to toggle source
# File lib/comune/receipt.rb, line 21
def purchase_token
  encoded_receipt_data['purchaseToken']
end
receipt_verification(access_token) click to toggle source
# File lib/comune/receipt.rb, line 29
def receipt_verification(access_token)
  uri = URI.parse("#{end_point}/tokens/#{purchase_token}")
  req = Net::HTTP::Get.new(uri.path)
  req.content_type = 'application/json'
  req['Authorization'] = "Bearer #{access_token}"
  req_options = { use_ssl: uri.scheme == 'https' }
  res = Net::HTTP.start(uri.host, uri.port, req_options) do |http|
    http.read_timeout = MAXIMUM_READ_TIMEOUT
    http.open_timeout = MAXIMUM_OPEN_TIMEOUT
    http.request(req)
  end
  JSON.parse(res.body)
end