ige_isb_api 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2a0598200aa8da360e75d735127dd278f92d6c62
4
- data.tar.gz: 4d1b31f6327eaddbd62a9433bb631641e94c4073
3
+ metadata.gz: 67aece4b49ff763e9136f0f46590cf9b120f38c1
4
+ data.tar.gz: 4f46335786f00997db20ebb3b1ba77e6254f7928
5
5
  SHA512:
6
- metadata.gz: 8e852c53bdd61b97086cf53b6a397a94f09bff002db832191a223ff4fe724096de58e1dbb975f98a9712e1488ec79fa6f45bcb23bcab86e9bbcc82a70441a175
7
- data.tar.gz: 733667b0820942f85eb0c480c839138eec999cce842b80db8825697c5eccd1bea6d2a6fb9b464b4313b1ba7a03e55355ba392a684c5aad3dbfaab61ed56af364
6
+ metadata.gz: b4dbf5fcaf83c753927d1d79a632f984b87e5d003232d24610d01bf5dabea8f42b34d1708f348cc9197a5d5aaa260be45198dbf2228b89cc8e90c6b12b32e356
7
+ data.tar.gz: b78c664e78e4053067888e15848e143214dad6b192779efc1410dbad874db96695255fab75853f5faa4e62a726d0c3139839165bbebaca6b47d84951d942d2e5
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ige_isb_api (1.1.2)
4
+ ige_isb_api (1.1.3)
5
5
  nokogiri
6
6
  rfc-822
7
7
 
@@ -11,10 +11,10 @@ GEM
11
11
  diff-lcs (1.2.5)
12
12
  dotenv (0.9.0)
13
13
  mini_portile (0.5.2)
14
- nokogiri (1.6.0)
14
+ nokogiri (1.6.1)
15
15
  mini_portile (~> 0.5.0)
16
- rake (10.1.0)
17
- rfc-822 (0.3.0)
16
+ rake (10.1.1)
17
+ rfc-822 (0.4.0)
18
18
  rspec (2.14.1)
19
19
  rspec-core (~> 2.14.0)
20
20
  rspec-expectations (~> 2.14.0)
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  IGE's Wrapper for ISB APIs
2
2
  ==========================
3
3
 
4
- Ruby Wrapper for ISB's `User API Version 2.1`, as well as the documents
4
+ Ruby Wrapper for ISB's `User API Version 2.3`, as well as the documents
5
5
  `Integrating ISB HTML5 Games_v1.3` and `Integrating ISB Flash Games_v1.4` (available from ISB), and ISB Bonus API version 1.5.
6
6
 
7
7
  ## Usage
@@ -143,14 +143,14 @@ url = IGE_ISB_API::Game.game_launcher_url player_id: 'player_id', currency: 'EUR
143
143
  idrequest: 'somethingunique'
144
144
  ```
145
145
 
146
- ## Parsing Callback Data
146
+ ## Parsing Game Session Callback Data
147
147
 
148
148
  Once a player has finished their gameplay session, ISB will post session details back
149
149
  to the casino server in the form of a JSON serialized blob of data.
150
150
  You can easily parse that data into a standard Ruby Hash for your application to use as needed.
151
151
 
152
152
  ```Ruby
153
- data = IGE_ISB_API::Callback.parse raw_data
153
+ data = IGE_ISB_API::Callback::GameplaySession.parse raw_data
154
154
  player = data[:player] # player login as passed in via IGE_ISB_API.register
155
155
  requestid = data[:requestid] # the request id passed in when the game is launched.
156
156
  session_start = data[:session_start] # a Time object in UTC timezone
@@ -167,6 +167,22 @@ end
167
167
 
168
168
  It will throw an `IGE_ISB_API::ValidationException` if the incoming data is bad.
169
169
 
170
+ ## Parsing Withdrawal Callback Data
171
+
172
+ Once a player's pending withdrawal has been approved, ISB will post withdrawal details back
173
+ to the casino server in the form of a JSON serialized blob of data.
174
+ You can easily parse that data into a standard Ruby Hash for your application to use as needed.
175
+
176
+ ```Ruby
177
+ data = IGE_ISB_API::Callback::Withdrawal.parse raw_data
178
+ player = data[:player] # player login as passed in via IGE_ISB_API.register
179
+ ref = data[:withdrawal_reference] # the withdrawal_reference passed in when the pending withdrawal was created.
180
+ approved = data[:approved] # true or false
181
+ operator = data[:operator] # the username of the person who approved the withdrawal
182
+ ```
183
+
184
+ It will throw an `IGE_ISB_API::ValidationException` if the incoming data is bad.
185
+
170
186
  ## The Bonus API
171
187
 
172
188
  ```Ruby
data/ige_isb_api.gemspec CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.version = IGE_ISB_API::VERSION
10
10
  spec.authors = ["Dave Sag"]
11
11
  spec.email = ["davesag@gmail.com"]
12
- spec.description = "Implements all of the features of the ISB API version #{IGE_ISB_API::Constants::API_VERSION}."
13
- spec.summary = "A Ruby Wrapper for the ISB API version #{IGE_ISB_API::Constants::API_VERSION}"
12
+ spec.description = "Implements all of the features of the ISB USER API version #{IGE_ISB_API::Constants::USER_API_VERSION}, and BONUS API version #{IGE_ISB_API::Constants::BONUS_API_VERSION}."
13
+ spec.summary = "A Ruby Wrapper for the ISB USER and BONUS APIs, and Game Launcher"
14
14
  spec.homepage = "https://github.com/Interactive-Gaming-Entertainment/IGE_ISB_API"
15
15
  spec.license = "MIT"
16
16
  spec.date = Time.now.utc.strftime("%Y-%m-%d")
@@ -3,81 +3,134 @@
3
3
  require 'digest'
4
4
 
5
5
  module IGE_ISB_API
6
- class Callback
6
+ module Callback
7
+ class GameplaySession
7
8
 
8
- # {
9
- # "player": String # player login as originally passed to ISB at .registration,
10
- # "requestid":Integer, # same as we provided in the IDREQUEST field
11
- # "token": String - # a SHA2 digest of our 'SECRETKEY' + 'IDREQUEST' which we will use to authenticate the incoming info.,
12
- # "sesson-start":"2013/10/25.10:54:18",
13
- # "sesson-end":"2013/10/25.12:32:51",
14
- # "skin_ID": 2019
15
- # "currency":"USD",
16
- # "hostID":1,
17
- # "actions":[
18
- # {
19
- # "bet":{
20
- # "amount": 1.00
21
- # },
22
- # "bet":{
23
- # "amount": 50.00
24
- # },
25
- # "win":{
26
- # "amount": 80.00
27
- # }
28
- # }
29
- # ]
30
- # }
31
- def self.parse(raw_data)
32
- raise ValidationException, "No data to parse" if raw_data.nil? || raw_data.empty?
33
- begin
34
- data = JSON.parse(raw_data)
35
- player = data['player']
36
- IGE_ISB_API::Validation.test('player', player, 'username')
37
- requestid = data['requestid'].to_i
38
- IGE_ISB_API::Validation.test('requestid', requestid, 'int')
39
- token = data['token']
40
- expected = (Digest::SHA2.new << "#{IGE_ISB_API::Constants::SECRET_KEY}#{requestid}").to_s
41
- raise ValidationException, "Invalid Token" unless token == expected
42
- session_start = DateTime.strptime(data['session-start'], "%Y/%m/%d.%H:%M:%S").to_time.utc
43
- session_end = DateTime.strptime(data['session-end'], "%Y/%m/%d.%H:%M:%S").to_time.utc
44
- raise ValidationException, "session-end must be after session-start" unless session_start < session_end
45
- skinid = data['skin_ID'].to_i
46
- IGE_ISB_API::Validation.test('skin_ID', skinid, 'int')
47
- currency = data['currency']
48
- IGE_ISB_API::Validation.test('currency', currency, 'currency_code')
49
- hostid = data['hostID'].to_i
50
- actions = data['actions'].map do |act|
51
- if act['bet']
52
- {
53
- action: :bet,
54
- amount: act['bet']['amount'].to_f
55
- }
56
- elsif act['win']
9
+ # {
10
+ # "player": String # player login as originally passed to ISB at .registration,
11
+ # "requestid":Integer, # same as we provided in the IDREQUEST field
12
+ # "token": String - # a SHA2 digest of our 'SECRETKEY' + 'IDREQUEST' which we will use to authenticate the incoming info.,
13
+ # "sesson-start":"2013/10/25.10:54:18",
14
+ # "sesson-end":"2013/10/25.12:32:51",
15
+ # "skin_ID": 2019
16
+ # "currency":"USD",
17
+ # "hostID":1,
18
+ # "actions":[
19
+ # {
20
+ # "bet":{
21
+ # "amount": 1.00
22
+ # },
23
+ # "bet":{
24
+ # "amount": 50.00
25
+ # },
26
+ # "win":{
27
+ # "amount": 80.00
28
+ # }
29
+ # }
30
+ # ]
31
+ # }
32
+ def self.parse(raw_data)
33
+ raise ValidationException, "No data to parse" if raw_data.nil? || raw_data.empty?
34
+ begin
35
+ data = JSON.parse(raw_data)
36
+ player = data['player']
37
+ IGE_ISB_API::Validation.test('player', player, 'username')
38
+ requestid = data['requestid'].to_i
39
+ IGE_ISB_API::Validation.test('requestid', requestid, 'int')
40
+ token = data['token']
41
+ expected = (Digest::SHA2.new << "#{IGE_ISB_API::Constants::SECRET_KEY}#{requestid}").to_s
42
+ raise ValidationException, "Invalid Token" unless token == expected
43
+ session_start = DateTime.strptime(data['session-start'], "%Y/%m/%d.%H:%M:%S").to_time.utc
44
+ session_end = DateTime.strptime(data['session-end'], "%Y/%m/%d.%H:%M:%S").to_time.utc
45
+ raise ValidationException, "session-end must be after session-start" unless session_start < session_end
46
+ skinid = data['skin_ID'].to_i
47
+ IGE_ISB_API::Validation.test('skin_ID', skinid, 'int')
48
+ currency = data['currency']
49
+ IGE_ISB_API::Validation.test('currency', currency, 'currency_code')
50
+ hostid = data['hostID'].to_i
51
+ actions = data['actions'].map do |act|
52
+ if act['bet']
53
+ {
54
+ action: :bet,
55
+ amount: act['bet']['amount'].to_f
56
+ }
57
+ elsif act['win']
58
+ {
59
+ action: :win,
60
+ amount: act['win']['amount'].to_f
61
+ }
62
+ else
63
+ raise ValidationException, "Invalid Action"
64
+ end
65
+ end
66
+ return {
67
+ player: player,
68
+ requestid: requestid,
69
+ session_start: session_start,
70
+ session_end: session_end,
71
+ skinid: skinid,
72
+ currency: currency,
73
+ hostid: hostid,
74
+ actions: actions
75
+ }
76
+ rescue ArgumentError => ae
77
+ raise ValidationException, ae.message
78
+ rescue JSON::ParserError => jpe
79
+ raise ValidationException, "Invalid JSON format in supplied data: #{jpe.message}"
80
+ end
81
+ end
82
+
83
+ end
84
+
85
+ class Withdrawal
86
+
87
+ # Parses incoming Withdrawl data of the form:
88
+ # [
89
+ # {
90
+ # “player” : “<the player’s username>”,
91
+ # “withdrawal_reference” : “<the reference we supplied via UserAPI.withdraw>”,
92
+ # “approved” : true | false, # if false then the withdrawal was declined, not approved.
93
+ # “operator” : “<the username of the LGF Staff member who approved / declined the withdrawal via the Back Office>”,
94
+ # “checksum” : "<SHA256 of (player + withdrawal_reference + SECRET_KEY)>"
95
+ # }, …
96
+ # ]
97
+ def self.parse(raw_data)
98
+ raise ValidationException, "No data to parse" if raw_data.nil? || raw_data.empty?
99
+ begin
100
+ data = JSON.parse(raw_data)
101
+ result = data.map do |wd|
102
+ player = wd['player']
103
+ IGE_ISB_API::Validation.test('player', player, 'username')
104
+ withdrawal_reference = wd['withdrawal_reference'].to_i
105
+ IGE_ISB_API::Validation.test('withdrawal_reference', withdrawal_reference, 'int')
106
+ approved = wd['approved']
107
+ unless !!approved == approved
108
+ if approved.is_a?(String) && ( approved == 'true' || approved == 'false')
109
+ approved = (approved == 'true')
110
+ else
111
+ raise ArgumentError, "Expected 'approved' to be true or false"
112
+ end
113
+ end
114
+ checksum = wd['checksum']
115
+ expected = (Digest::SHA256.new << "#{player}#{withdrawal_reference}#{IGE_ISB_API::Constants::SECRET_KEY}").to_s
116
+ raise ValidationException, "Invalid Checksum" unless checksum == expected
117
+ operator = wd['operator']
118
+ IGE_ISB_API::Validation.test('operator', operator, 'username')
119
+
57
120
  {
58
- action: :win,
59
- amount: act['win']['amount'].to_f
121
+ player: player,
122
+ withdrawal_reference: withdrawal_reference,
123
+ approved: approved,
124
+ operator: operator
60
125
  }
61
- else
62
- raise ValidationException, "Invalid Action"
63
126
  end
127
+ return result
128
+ rescue ArgumentError => ae
129
+ raise ValidationException, ae.message
130
+ rescue JSON::ParserError => jpe
131
+ raise ValidationException, "Invalid JSON format in supplied data: #{jpe.message}"
64
132
  end
65
- return {
66
- player: player,
67
- requestid: requestid,
68
- session_start: session_start,
69
- session_end: session_end,
70
- skinid: skinid,
71
- currency: currency,
72
- hostid: hostid,
73
- actions: actions
74
- }
75
- rescue ArgumentError => ae
76
- raise ValidationException, ae.message
77
- rescue JSON::ParserError => jpe
78
- raise ValidationException, "Invalid JSON format in supplied data: #{jpe.message}"
79
133
  end
80
134
  end
81
-
82
135
  end
83
136
  end
@@ -3,7 +3,8 @@
3
3
 
4
4
  module IGE_ISB_API
5
5
  class Constants
6
- API_VERSION = '2.2'
6
+ USER_API_VERSION = '2.3'
7
+ BONUS_API_VERSION = '1.5'
7
8
 
8
9
  LICENSEE_ID = ENV['ISB_LICENSEE_ID'].to_i # issued by ISB
9
10
  CASINO = ENV['ISB_CASINO_ID'] # issued by ISB
@@ -55,7 +55,8 @@ module IGE_ISB_API
55
55
  'amount' => {:required => true, :type => 'int'},
56
56
  'reference' => {:required => true, :type => 'string', :length => 32},
57
57
  'cur' => {:required => true, :type => 'currency_code', :length => 3},
58
- 'wallet' => {:required => true, :type => 'string', :length => 32}
58
+ 'wallet' => {:required => true, :type => 'string', :length => 32},
59
+ 'creditcardnumber' => {:required => true, :type => 'string', :length => 32}
59
60
  },
60
61
  'cancel_withdrawal' => {
61
62
  'withdrawalid' => {:required => true, :type => 'int'}
@@ -2,5 +2,5 @@
2
2
  #coding: utf-8
3
3
 
4
4
  module IGE_ISB_API
5
- VERSION = "1.1.2"
5
+ VERSION = "1.1.3"
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ige_isb_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Sag
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-12 00:00:00.000000000 Z
11
+ date: 2014-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -94,7 +94,8 @@ dependencies:
94
94
  - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- description: Implements all of the features of the ISB API version 2.2.
97
+ description: Implements all of the features of the ISB USER API version 2.3, and BONUS
98
+ API version 1.5.
98
99
  email:
99
100
  - davesag@gmail.com
100
101
  executables: []
@@ -139,5 +140,5 @@ rubyforge_project:
139
140
  rubygems_version: 2.1.11
140
141
  signing_key:
141
142
  specification_version: 4
142
- summary: A Ruby Wrapper for the ISB API version 2.2
143
+ summary: A Ruby Wrapper for the ISB USER and BONUS APIs, and Game Launcher
143
144
  test_files: []