class Venice::Client
Attributes
exclude_old_transactions[W]
verification_url[RW]
Public Class Methods
development()
click to toggle source
# File lib/venice/client.rb, line 15 def development client = new client.verification_url = ITUNES_DEVELOPMENT_RECEIPT_VERIFICATION_ENDPOINT client end
new()
click to toggle source
# File lib/venice/client.rb, line 28 def initialize @verification_url = ENV['IAP_VERIFICATION_ENDPOINT'] end
production()
click to toggle source
# File lib/venice/client.rb, line 21 def production client = 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 32 def verify!(data, options = {}) @verification_url ||= ITUNES_DEVELOPMENT_RECEIPT_VERIFICATION_ENDPOINT @shared_secret = options[:shared_secret] if options[:shared_secret] @exclude_old_transactions = options[:exclude_old_transactions] if options[:exclude_old_transactions] json = json_response_from_verifying_data(data, options) receipt_attributes = json['receipt'].dup if json['receipt'] receipt_attributes['original_json_response'] = json if receipt_attributes case json['status'].to_i when 0, 21006 receipt = Receipt.new(receipt_attributes) # From Apple docs: # > Only returned for iOS 6 style transaction receipts for auto-renewable subscriptions. # > The JSON representation of the receipt for the most recent renewal if latest_receipt_info_attributes = json['latest_receipt_info'] latest_receipt_info_attributes = [latest_receipt_info_attributes] if latest_receipt_info_attributes.is_a?(Hash) # AppStore returns 'latest_receipt_info' even if we use over iOS 6. Besides, its format is an Array. if latest_receipt_info_attributes.is_a?(Array) receipt.latest_receipt_info = [] latest_receipt_info_attributes.each do |latest_receipt_info_attribute| # latest_receipt_info format is identical with in_app receipt.latest_receipt_info << InAppReceipt.new(latest_receipt_info_attribute) end else receipt.latest_receipt_info = latest_receipt_info_attributes end end return receipt else raise Receipt::VerificationError, json end end
Private Instance Methods
json_response_from_verifying_data(data, options = {})
click to toggle source
# File lib/venice/client.rb, line 71 def json_response_from_verifying_data(data, options = {}) parameters = { 'receipt-data' => data } parameters['password'] = @shared_secret if @shared_secret parameters['exclude-old-transactions'] = @exclude_old_transactions if @exclude_old_transactions uri = URI(@verification_url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_PEER http.open_timeout = options[:open_timeout] if options[:open_timeout] http.read_timeout = options[:read_timeout] if options[:read_timeout] request = Net::HTTP::Post.new(uri.request_uri) request['Accept'] = 'application/json' request['Content-Type'] = 'application/json' request.body = parameters.to_json begin response = http.request(request) rescue Timeout::Error raise TimeoutError end begin JSON.parse(response.body) rescue JSON::ParserError raise InvalidResponseError end end