amazon-iap 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Amazon::Iap
2
2
 
3
- TODO: Write a gem description
3
+ Verify Amazon in app purchases.
4
4
 
5
5
  ## Installation
6
6
 
@@ -1,6 +1,7 @@
1
1
  require 'amazon/iap/version'
2
2
  require 'amazon/iap/exceptions'
3
3
  require 'amazon/iap/client'
4
+ require 'amazon/iap/result'
4
5
 
5
6
  module Amazon
6
7
  module Iap
@@ -0,0 +1,35 @@
1
+ class Amazon::Iap::Client
2
+ require 'net/http'
3
+ require 'uri'
4
+
5
+ PRODUCTION_HOST = 'https://appstore-sdk.amazon.com'
6
+
7
+ def initialize(developer_secret, host=nil)
8
+ host ||= PRODUCTION_HOST
9
+ @developer_secret = developer_secret
10
+ @host = host
11
+ end
12
+
13
+ def verify(user_id, purchase_token, renew_on_failure=true)
14
+ begin
15
+ process :verify, user_id, purchase_token
16
+ rescue Amazon::Iap::Exceptions::ExpiredCredentials => e
17
+ raise e unless renew_on_failure
18
+
19
+ renewal = renew(user_id, purchase_token)
20
+ verify(user_id, renewal.purchase_token, false)
21
+ end
22
+ end
23
+
24
+ def renew(user_id, purchase_token)
25
+ process :renew, user_id, purchase_token
26
+ end
27
+
28
+ protected
29
+
30
+ def process(path, user_id, purchase_token)
31
+ path = "/version/2.0/#{path}/developer/#{@developer_secret}/user/#{user_id}/purchaseToken/#{purchase_token}"
32
+ uri = URI.parse "#{@host}#{path}"
33
+ Amazon::Iap::Result.new Net::HTTP.get_response(uri)
34
+ end
35
+ end
@@ -0,0 +1,13 @@
1
+ module Amazon
2
+ module Iap
3
+ module Exceptions
4
+ class InvalidTransaction < Exception; end
5
+ class InvalidSharedSecret < Exception; end
6
+ class InvalidUserId < Exception; end
7
+ class InvalidPurchaseToken < Exception; end
8
+ class ExpiredCredentials < Exception; end
9
+ class InternalError < Exception; end
10
+ class General < Exception; end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,24 @@
1
+ class Amazon::Iap::Result
2
+ attr_accessor :item_type, :sku, :start_date, :start_time, :end_date, :end_time, :purchase_token
3
+
4
+ def initialize(response)
5
+ case response.code.to_i
6
+ when 200
7
+ parsed = JSON.parse(response.body)
8
+ parsed['startTime'] = parsed['startDate'].nil? ? nil : Time.at(parsed['startDate'] / 1000)
9
+ parsed['endTime'] = parsed['endDate'].nil? ? nil : Time.at(parsed['endDate'] / 1000)
10
+
11
+ parsed.each do |key, value|
12
+ underscore = key.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').gsub(/([a-z\d])([A-Z])/, '\1_\2').tr('-', '_').downcase
13
+ send "#{underscore}=", value
14
+ end
15
+ when 400 then raise Amazon::Iap::Exceptions::InvalidTransaction
16
+ when 496 then raise Amazon::Iap::Exceptions::InvalidSharedSecret
17
+ when 497 then raise Amazon::Iap::Exceptions::InvalidUserId
18
+ when 498 then raise Amazon::Iap::Exceptions::InvalidPurchaseToken
19
+ when 499 then raise Amazon::Iap::Exceptions::ExpiredCredentials
20
+ when 500 then raise Amazon::Iap::Exceptions::InternalError
21
+ else raise Amazon::Iap::Exceptions::General
22
+ end
23
+ end
24
+ end
@@ -1,5 +1,5 @@
1
1
  module Amazon
2
2
  module Iap
3
- VERSION = "0.0.1"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amazon-iap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -57,6 +57,9 @@ files:
57
57
  - Rakefile
58
58
  - amazon-iap.gemspec
59
59
  - lib/amazon/iap.rb
60
+ - lib/amazon/iap/client.rb
61
+ - lib/amazon/iap/exceptions.rb
62
+ - lib/amazon/iap/result.rb
60
63
  - lib/amazon/iap/version.rb
61
64
  homepage: https://github.com/DailyBurn/amazon-iap
62
65
  licenses: