amazon-iap 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -13
- data/README.md +19 -8
- data/lib/amazon/iap/client.rb +23 -14
- data/lib/amazon/iap/result.rb +12 -6
- data/lib/amazon/iap/version.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ODVlMGFhZWFmNzkxYzQ3MmQ3Y2M1NjhjOWFkMTRhY2VhYWM0MjZiZg==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7e91f2416ee5969443b5ac801d4249c4f653b52b
|
4
|
+
data.tar.gz: 0e2d7858bb235eaa21e97a238a26c414a35ead36
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
MzhiOWRjMGE1OWE4MjAyOTg2ZGE1NmNiNDc1NjlkNzdjNTE3YzBmNWNmYWI4
|
11
|
-
YzMzYzZiODQ2NTEwZWI2Y2FlYWFmMzQ5MGYwMTYwODlkM2JhMjk=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
YjljZDgxNmMyYzRhOTFhMWQ0YTUyNmUxNzY2MmM1MjAxNzMxYTVjNmZkZjEw
|
14
|
-
MDcwMmRjMWQzNDM5NTNjNDQyNWIzNDhiOWZhNGYwM2FlOGRjNjIxZjg2Yzg5
|
15
|
-
OTBmZmMzMDc3YzcyMTUwMTI3Zjc0NGExYzVjZjhkZmFhOWE1N2U=
|
6
|
+
metadata.gz: 38b757f0e2f13a0ea6cc34c65ce2e175f3b235eab71d90d6ebf23b9bb504e56fafa09efe2acecc147c9385dbc14cd78119e9567fbe8563d0e52eb37d2993f26e
|
7
|
+
data.tar.gz: 161514496dbfc228b10bed920b393fdd856571401817cfae5412e106be79933c42a6dc28c291a26040c4271ec2bd2bf30b6292b15771e084947b26ef6d771b8c
|
data/README.md
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
# Amazon::Iap
|
2
2
|
|
3
|
-
This gem is a simple implementation of the Amazon
|
4
|
-
[here](https://developer.amazon.com/sdk/in-app-purchasing/documentation/rvs.html).
|
3
|
+
This gem is a simple implementation of the Amazon Receipt Verfication Service. It supports both V1 and V2 APIs.
|
5
4
|
|
5
|
+
[V1 spec](https://developer.amazon.com/sdk/in-app-purchasing/documentation/rvs.html)
|
6
|
+
|
7
|
+
[V2 spec](https://developer.amazon.com/public/apis/earn/in-app-purchasing/docs-v2/verifying-receipts-in-iap-2.0)
|
6
8
|
|
7
9
|
## Installation
|
8
10
|
|
@@ -33,19 +35,28 @@ client = Amazon::Iap::Client.new 'my_developer_secret', 'http://iap-staging.doma
|
|
33
35
|
client = Amazon::Iap::Client.new 'my_developer_secret' # production server
|
34
36
|
```
|
35
37
|
|
36
|
-
From there, you can call either `
|
38
|
+
From there, you can call either `verify_v1` or `verify_v2` on the client and pass in the user id and purchase token:
|
37
39
|
|
38
40
|
```ruby
|
39
|
-
result = client.
|
40
|
-
result = client.
|
41
|
+
result = client.verify_v1 'some-user-id', 'some-purchase-token'
|
42
|
+
result = client.verify_v2 'some-user-id', 'some-purchase-token'
|
41
43
|
```
|
44
|
+
Both methods will return the same fields in the same place, while the v2 one will supply some additional data. Mapping is done internally to provide a uniform interface between versions.
|
42
45
|
|
43
|
-
|
46
|
+
For compatibility purposes, the `verify` method is an alias for `verify_v1`.
|
47
|
+
|
48
|
+
By default, the `verify_v1` method will automatically try to renew expired tokens, and will recall `verify_v1`
|
44
49
|
against the new token returned. If you do not want this behavior, simply pass in `false` as the third
|
45
50
|
attribute to the `verify` method:
|
46
51
|
|
47
52
|
```ruby
|
48
|
-
result = client.
|
53
|
+
result = client.verify_v1 'some-user-id', 'some-purchase-token', false
|
54
|
+
```
|
55
|
+
|
56
|
+
You can also manually renew a token with
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
result = client.renew 'some-user-id', 'some-purchase-token'
|
49
60
|
```
|
50
61
|
|
51
62
|
## Returned Values
|
@@ -55,7 +66,7 @@ of the hash keys returned in the JSON object. For convenience, we also add `sta
|
|
55
66
|
which are `Time` representations of the milliseconds returned in `start_date` and `end_date` respectively. E.g.,
|
56
67
|
|
57
68
|
```ruby
|
58
|
-
result = client.
|
69
|
+
result = client.verify_v2 'some-user-id', 'some-purchase-token'
|
59
70
|
|
60
71
|
result.class.name # "Amazon::Iap::Result"
|
61
72
|
result.item_type # "SUBSCRIPTION"
|
data/lib/amazon/iap/client.rb
CHANGED
@@ -1,36 +1,45 @@
|
|
1
1
|
class Amazon::Iap::Client
|
2
2
|
require 'net/http'
|
3
3
|
require 'uri'
|
4
|
-
|
4
|
+
|
5
5
|
PRODUCTION_HOST = 'https://appstore-sdk.amazon.com'
|
6
|
-
|
6
|
+
|
7
7
|
def initialize(developer_secret, host=nil)
|
8
8
|
@developer_secret = developer_secret
|
9
9
|
@host = host || PRODUCTION_HOST
|
10
10
|
end
|
11
|
-
|
12
|
-
def
|
11
|
+
|
12
|
+
def verify_v1(user_id, purchase_token, renew_on_failure=true)
|
13
13
|
begin
|
14
|
-
|
14
|
+
process_v1 :verify, user_id, purchase_token
|
15
15
|
rescue Amazon::Iap::Exceptions::ExpiredCredentials => e
|
16
16
|
raise e unless renew_on_failure
|
17
|
-
|
17
|
+
|
18
18
|
renewal = renew(user_id, purchase_token)
|
19
19
|
verify(user_id, renewal.purchase_token, false)
|
20
20
|
end
|
21
21
|
end
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
alias_method :verify, :verify_v1
|
23
|
+
|
24
|
+
def renew_v1(user_id, purchase_token)
|
25
|
+
process_v1 :renew, user_id, purchase_token
|
25
26
|
end
|
26
|
-
|
27
|
+
alias_method :renew, :renew_v1
|
28
|
+
|
29
|
+
def verify_v2(user_id, receipt_id)
|
30
|
+
uri = URI.parse "#{@host}/version/1.0/verifyReceiptId/developer/#{@developer_secret}/user/#{user_id}/receiptId/#{receipt_id}"
|
31
|
+
req = Net::HTTP::Get.new uri.request_uri
|
32
|
+
res = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') { |http| http.request req }
|
33
|
+
Amazon::Iap::Result.new res
|
34
|
+
end
|
35
|
+
|
27
36
|
protected
|
28
|
-
|
29
|
-
def
|
37
|
+
|
38
|
+
def process_v1(path, user_id, purchase_token)
|
30
39
|
path = "/version/2.0/#{path}/developer/#{@developer_secret}/user/#{user_id}/purchaseToken/#{purchase_token}"
|
31
40
|
uri = URI.parse "#{@host}#{path}"
|
32
41
|
req = Net::HTTP::Get.new uri.request_uri
|
33
42
|
res = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') { |http| http.request req }
|
34
43
|
Amazon::Iap::Result.new res
|
35
|
-
end
|
36
|
-
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/amazon/iap/result.rb
CHANGED
@@ -1,21 +1,27 @@
|
|
1
1
|
class Amazon::Iap::Result
|
2
|
-
attr_accessor :item_type, :sku, :start_date, :start_time, :end_date, :end_time, :purchase_token
|
3
|
-
|
2
|
+
attr_accessor :item_type, :sku, :start_date, :start_time, :end_date, :end_time, :purchase_token, :test_transaction, :beta_product, :parent_product_id, :term, :term_sku, :quantity
|
3
|
+
V2_V1_MAPPING = {
|
4
|
+
productType: :itemType,
|
5
|
+
productId: :sku,
|
6
|
+
receiptId: :purchaseToken,
|
7
|
+
purchaseDate: :startDate,
|
8
|
+
cancelDate: :endDate,
|
9
|
+
}
|
4
10
|
def initialize(response)
|
5
11
|
case response.code.to_i
|
6
12
|
when 200
|
7
13
|
parsed = JSON.parse(response.body)
|
8
|
-
|
14
|
+
V2_V1_MAPPING.each { |v2,v1| parsed[v1.to_s] = parsed.delete(v2.to_s) if parsed.has_key?(v2.to_s) }
|
9
15
|
if parsed.has_key? 'startDate'
|
10
16
|
parsed['startTime'] = parsed['startDate'].nil? ? nil : Time.at(parsed['startDate'] / 1000)
|
11
17
|
end
|
12
18
|
if parsed.has_key? 'endDate'
|
13
19
|
parsed['endTime'] = parsed['endDate'].nil? ? nil : Time.at(parsed['endDate'] / 1000)
|
14
20
|
end
|
15
|
-
|
21
|
+
|
16
22
|
parsed.each do |key, value|
|
17
23
|
underscore = key.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').gsub(/([a-z\d])([A-Z])/, '\1_\2').tr('-', '_').downcase
|
18
|
-
send "#{underscore}=", value
|
24
|
+
send "#{underscore}=", value if respond_to?("#{underscore}=")
|
19
25
|
end
|
20
26
|
when 400 then raise Amazon::Iap::Exceptions::InvalidTransaction
|
21
27
|
when 496 then raise Amazon::Iap::Exceptions::InvalidSharedSecret
|
@@ -26,4 +32,4 @@ class Amazon::Iap::Result
|
|
26
32
|
else raise Amazon::Iap::Exceptions::General
|
27
33
|
end
|
28
34
|
end
|
29
|
-
end
|
35
|
+
end
|
data/lib/amazon/iap/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: amazon-iap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- DailyBurn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,14 +28,14 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
description: Verify Amazon in app purchases
|
@@ -66,17 +66,17 @@ require_paths:
|
|
66
66
|
- lib
|
67
67
|
required_ruby_version: !ruby/object:Gem::Requirement
|
68
68
|
requirements:
|
69
|
-
- -
|
69
|
+
- - '>='
|
70
70
|
- !ruby/object:Gem::Version
|
71
71
|
version: '0'
|
72
72
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - '>='
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
requirements: []
|
78
78
|
rubyforge_project:
|
79
|
-
rubygems_version: 2.
|
79
|
+
rubygems_version: 2.0.14
|
80
80
|
signing_key:
|
81
81
|
specification_version: 4
|
82
82
|
summary: Verify Amazon in app purchases
|