class Venice::Client

Attributes

shared_secret[W]
verification_url[RW]

Public Class Methods

development() click to toggle source
# File lib/venice/client.rb, line 14
def development
  client = self.new
  client.verification_url = ITUNES_DEVELOPMENT_RECEIPT_VERIFICATION_ENDPOINT
  client
end
new() click to toggle source
# File lib/venice/client.rb, line 27
def initialize
  @verification_url = ENV['IAP_VERIFICATION_ENDPOINT']
end
production() click to toggle source
# File lib/venice/client.rb, line 20
def production
  client = self.new
  client.verification_url = ITUNES_PRODUCTION_RECEIPT_VERIFICATION_ENDPOINT
  client
end

Public Instance Methods

verify!(data, options = {}) click to toggle source
# File lib/venice/client.rb, line 31
def verify!(data, options = {})
  @verification_url ||= ITUNES_DEVELOPMENT_RECEIPT_VERIFICATION_ENDPOINT
  @shared_secret = options[:shared_secret]

  json = json_response_from_verifying_data(data)
  status, receipt_attributes = json['status'].to_i, json['receipt']

  case status
  when 0, 21006
    attributes = (receipt_attributes || {}).merge({
      'latest_receipt' => json['latest_receipt'],
      'latest_receipt_info' => json['latest_receipt_info'],
    })
    Receipt.new(attributes)
  else
    raise Receipt::VerificationError.new(status, receipt_attributes)
  end
end

Private Instance Methods

json_response_from_verifying_data(data) click to toggle source
# File lib/venice/client.rb, line 52
def json_response_from_verifying_data(data)
  parameters = {
    'receipt-data' => data
  }

  parameters['password'] = @shared_secret if @shared_secret

  uri = URI(@verification_url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER

  request = Net::HTTP::Post.new(uri.request_uri)
  request['Accept'] = "application/json"
  request['Content-Type'] = "application/json"
  request.body = parameters.to_json

  response = http.request(request)

  JSON.parse(response.body)
end