mobilepay 0.1.0 → 1.0.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 +4 -4
- data/README.md +194 -2
- data/lib/mobilepay.rb +3 -1
- data/lib/mobilepay/client.rb +55 -0
- data/lib/mobilepay/client/cancel_reservation.rb +17 -0
- data/lib/mobilepay/client/capture_amount.rb +17 -0
- data/lib/mobilepay/client/payment_status.rb +17 -0
- data/lib/mobilepay/client/payment_transactions.rb +17 -0
- data/lib/mobilepay/client/refund_amount.rb +17 -0
- data/lib/mobilepay/client/reservations.rb +19 -0
- data/lib/mobilepay/requests.rb +35 -0
- data/lib/mobilepay/security.rb +33 -0
- data/lib/mobilepay/security/public_key.rb +16 -0
- data/lib/mobilepay/version.rb +1 -1
- metadata +12 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab2ecb74f00ea4ee578b918b4cf847729883292b
|
4
|
+
data.tar.gz: 78c3295ec71aa6a5e3d38eda4e6098e1e10cb173
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a1c19eb27c62f2d2eaa21a452d5da47686b417acbf33ed6d7302733d847934860fc6706216b7cfb2cf52ce9222391d63f6a729d844b9d0db4f823a37e437509
|
7
|
+
data.tar.gz: a6be43d4de495cb1397ed951353a4044ca6006e907edbe3a16ac8b86b8c6ee776b78d0da3937e042df2cf551e469a40d5c15b82d8c5863a7e0593a7fe4fc2793
|
data/README.md
CHANGED
@@ -20,11 +20,203 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
Create
|
23
|
+
### Create Security object
|
24
24
|
|
25
25
|
```ruby
|
26
26
|
require 'mobilepay'
|
27
|
-
|
27
|
+
security = Mobilepay::Security.new subscription_key: 'subscription_key'
|
28
|
+
```
|
29
|
+
merchant_id - Merchant ID, required
|
30
|
+
|
31
|
+
### Create MobilePay object
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
require 'mobilepay'
|
35
|
+
client = Mobilepay::Client.new merchant_id: 'merchant_id', subscription_key: 'subscription_key'
|
36
|
+
```
|
37
|
+
subscription_key - Subscription Key for MobilePay, required
|
38
|
+
merchant_id - Merchant ID, required
|
39
|
+
|
40
|
+
### Public Key
|
41
|
+
|
42
|
+
Request for getting MobilePay's public key to use when signing up new merchants.
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
security.public_key
|
46
|
+
```
|
47
|
+
|
48
|
+
#### Responces
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
{
|
52
|
+
"PublicKey": "-----BEGIN CERTIFICATE-----certificate body-----END CERTIFICATE-----"
|
53
|
+
}
|
54
|
+
```
|
55
|
+
|
56
|
+
### Payment Status
|
57
|
+
|
58
|
+
Request for getting the status of a given order is #payment_status.
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
client.payment_status order_id: '111'
|
62
|
+
```
|
63
|
+
order_id - Order ID, required
|
64
|
+
|
65
|
+
#### Responces
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
{
|
69
|
+
"LatestPaymentStatus": "Captured",
|
70
|
+
"TransactionId": "61872634691623746",
|
71
|
+
"OriginalAmount": 123.45
|
72
|
+
}
|
73
|
+
```
|
74
|
+
|
75
|
+
### Payment Transactions
|
76
|
+
|
77
|
+
Request for getting the transactions for a given order is #payment_transactions.
|
78
|
+
|
79
|
+
```ruby
|
80
|
+
client.payment_transactions order_id: '111'
|
81
|
+
```
|
82
|
+
order_id - Order ID, required
|
83
|
+
|
84
|
+
#### Responces
|
85
|
+
|
86
|
+
```ruby
|
87
|
+
[
|
88
|
+
{
|
89
|
+
"TimeStamp": "2016-04-08T07:45:36.533Z",
|
90
|
+
"PaymentStatus": "Captured",
|
91
|
+
"TransactionId": "61872634691623746",
|
92
|
+
"Amount": 11.5
|
93
|
+
},
|
94
|
+
{
|
95
|
+
"TimeStamp": "2016-04-09T07:45:36.672Z",
|
96
|
+
"PaymentStatus": "Cancelled",
|
97
|
+
"TransactionId": "61872634691623799",
|
98
|
+
"Amount": 18.9
|
99
|
+
}
|
100
|
+
]
|
101
|
+
```
|
102
|
+
|
103
|
+
### Reservations
|
104
|
+
|
105
|
+
Request for getting the reservations for a particular date/time interval, and alternatively also for a specific customer is #reservations.
|
106
|
+
|
107
|
+
```ruby
|
108
|
+
client.reservations datetime_from: 'YYYY-MM-DDTHH_MM', datetime_to: 'YYYY-MM-DDTHH_MM', customer_id: '111'
|
109
|
+
```
|
110
|
+
datetime_from - Date from, required
|
111
|
+
datetime_to - Date to, required
|
112
|
+
customer_id - Customer ID, optional
|
113
|
+
|
114
|
+
#### Responces
|
115
|
+
|
116
|
+
```ruby
|
117
|
+
[
|
118
|
+
{
|
119
|
+
"TimeStamp": "2016-04-08T07_45_36Z",
|
120
|
+
"OrderId": "DB TESTING 2015060908",
|
121
|
+
"TransactionId": "61872634691623746",
|
122
|
+
"Amount": 100.25,
|
123
|
+
"CaptureType": "Full"
|
124
|
+
},
|
125
|
+
{
|
126
|
+
"TimeStamp": "2016-04-09T07_45_36Z",
|
127
|
+
"OrderId": "DB TESTING 2015060908",
|
128
|
+
"TransactionId": "61872634691623799"
|
129
|
+
"Amount": 100.25,
|
130
|
+
"CaptureType": "Partial"
|
131
|
+
}
|
132
|
+
]
|
133
|
+
```
|
134
|
+
|
135
|
+
### Refund Amount
|
136
|
+
|
137
|
+
Request for refunding the transaction amount, either the entire amount or just a part of the amount is #refund_amount.
|
138
|
+
|
139
|
+
```ruby
|
140
|
+
client.refund_amount order_id: '111', body: '{}'
|
141
|
+
```
|
142
|
+
order_id - Order ID, required
|
143
|
+
body - text body for request, optional
|
144
|
+
|
145
|
+
#### Request body examples
|
146
|
+
|
147
|
+
```ruby
|
148
|
+
{
|
149
|
+
"Amount" : 100.00,
|
150
|
+
"BulkRef" : "123456789"
|
151
|
+
}
|
152
|
+
|
153
|
+
{
|
154
|
+
"Amount" : 100.00
|
155
|
+
}
|
156
|
+
|
157
|
+
{
|
158
|
+
}
|
159
|
+
```
|
160
|
+
|
161
|
+
#### Responces
|
162
|
+
|
163
|
+
```ruby
|
164
|
+
{
|
165
|
+
"TransactionId" : "61872634691623757",
|
166
|
+
"OriginalTransactionId" : "61872634691623746",
|
167
|
+
"Remainder" : 20.00
|
168
|
+
}
|
169
|
+
```
|
170
|
+
|
171
|
+
### Capture Amount
|
172
|
+
|
173
|
+
Request for capturing the transaction, i.e. carries out the actual payment is #capture_amount.
|
174
|
+
|
175
|
+
```ruby
|
176
|
+
client.capture_amount order_id: '111', body: '{}'
|
177
|
+
```
|
178
|
+
order_id - Order ID, required
|
179
|
+
body - text body for request, optional
|
180
|
+
|
181
|
+
#### Request body examples
|
182
|
+
|
183
|
+
```ruby
|
184
|
+
{
|
185
|
+
"Amount" : 100.00,
|
186
|
+
"BulkRef" : "123456789"
|
187
|
+
}
|
188
|
+
|
189
|
+
{
|
190
|
+
"Amount" : 100.00
|
191
|
+
}
|
192
|
+
|
193
|
+
{
|
194
|
+
}
|
195
|
+
```
|
196
|
+
|
197
|
+
#### Responces
|
198
|
+
|
199
|
+
```ruby
|
200
|
+
{
|
201
|
+
"TransactionId" : "61872634691623746"
|
202
|
+
}
|
203
|
+
```
|
204
|
+
|
205
|
+
### Cancel Reservation
|
206
|
+
|
207
|
+
Request for canceling previously made reservations is #cancel_reservation.
|
208
|
+
|
209
|
+
```ruby
|
210
|
+
client.cancel_reservation order_id: '111'
|
211
|
+
```
|
212
|
+
order_id - Order ID, required
|
213
|
+
|
214
|
+
#### Responces
|
215
|
+
|
216
|
+
```ruby
|
217
|
+
{
|
218
|
+
"TransactionId" : "61872634691623746"
|
219
|
+
}
|
28
220
|
```
|
29
221
|
|
30
222
|
## Contributing
|
data/lib/mobilepay.rb
CHANGED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'json'
|
2
|
+
require_relative 'client/payment_status'
|
3
|
+
require_relative 'client/payment_transactions'
|
4
|
+
require_relative 'client/reservations'
|
5
|
+
require_relative 'client/refund_amount'
|
6
|
+
require_relative 'client/capture_amount'
|
7
|
+
require_relative 'client/cancel_reservation'
|
8
|
+
require_relative 'requests'
|
9
|
+
|
10
|
+
module Mobilepay
|
11
|
+
class Client
|
12
|
+
include Mobilepay::Client::PaymentStatus
|
13
|
+
include Mobilepay::Client::PaymentTransactions
|
14
|
+
include Mobilepay::Client::Reservations
|
15
|
+
include Mobilepay::Client::RefundAmount
|
16
|
+
include Mobilepay::Client::CaptureAmount
|
17
|
+
include Mobilepay::Client::CancelReservation
|
18
|
+
include Mobilepay::Requests
|
19
|
+
|
20
|
+
class MobilePayFailure < StandardError; end
|
21
|
+
|
22
|
+
attr_reader :merchant_id, :subscription_key, :base_uri
|
23
|
+
|
24
|
+
def initialize(args = {})
|
25
|
+
@merchant_id = args[:merchant_id] || ''
|
26
|
+
@subscription_key = args[:subscription_key] || ''
|
27
|
+
@base_uri = 'https://api.mobeco.dk/appswitch/api/v1'
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def call(req, address, args = {})
|
33
|
+
response = case req
|
34
|
+
when :get, :put, :delete then http_request(req, address, args)
|
35
|
+
else raise MobilePayFailure, 'Undefined type for call'
|
36
|
+
end
|
37
|
+
check_response(response)
|
38
|
+
response
|
39
|
+
end
|
40
|
+
|
41
|
+
def check_response(response)
|
42
|
+
if response.code != '200'
|
43
|
+
raise MobilePayFailure, JSON.parse(response.body)['message']
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def check_args(args)
|
48
|
+
args.each do |arg_name, value|
|
49
|
+
if value.nil? || !value.is_a?(String)
|
50
|
+
raise MobilePayFailure, "Invalid argument '#{arg_name}', must be string"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Mobilepay
|
2
|
+
class Client
|
3
|
+
module CancelReservation
|
4
|
+
|
5
|
+
# Reservations_CancelReservation
|
6
|
+
# Cancels a specific reservation
|
7
|
+
def cancel_reservation(args = {})
|
8
|
+
check_args(order_id: args[:order_id])
|
9
|
+
response = call(:delete, "/reservations/merchants/#{merchant_id}/orders/#{args[:order_id]}", { body: '{}' })
|
10
|
+
JSON.parse(response.body)
|
11
|
+
rescue MobilePayFailure => ex
|
12
|
+
return { error: ex.message }
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Mobilepay
|
2
|
+
class Client
|
3
|
+
module CaptureAmount
|
4
|
+
|
5
|
+
# Reservations_CaptureAmount
|
6
|
+
# Captures a previously reserved amount, either in full or partially
|
7
|
+
def capture_amount(args = {})
|
8
|
+
check_args(order_id: args[:order_id])
|
9
|
+
response = call(:put, "/reservations/merchants/#{merchant_id}/orders/#{args[:order_id]}", { body: args[:body] || '{}' })
|
10
|
+
JSON.parse(response.body)
|
11
|
+
rescue MobilePayFailure => ex
|
12
|
+
return { error: ex.message }
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Mobilepay
|
2
|
+
class Client
|
3
|
+
module PaymentStatus
|
4
|
+
|
5
|
+
# Merchants_GetPaymentStatus
|
6
|
+
# Gets the status of a given order
|
7
|
+
def payment_status(args = {})
|
8
|
+
check_args(order_id: args[:order_id])
|
9
|
+
response = call(:get, "/merchants/#{merchant_id}/orders/#{args[:order_id]}", { body: '{}' })
|
10
|
+
JSON.parse(response.body)
|
11
|
+
rescue MobilePayFailure => ex
|
12
|
+
return { error: ex.message }
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Mobilepay
|
2
|
+
class Client
|
3
|
+
module PaymentTransactions
|
4
|
+
|
5
|
+
# Merchants_GetPaymentTransactions
|
6
|
+
# Gets the transactions for a given order
|
7
|
+
def payment_transactions(args = {})
|
8
|
+
check_args(order_id: args[:order_id])
|
9
|
+
response = call(:get, "/merchants/#{merchant_id}/orders/#{args[:order_id]}/transactions", { body: '{}' })
|
10
|
+
JSON.parse(response.body)
|
11
|
+
rescue MobilePayFailure => ex
|
12
|
+
return { error: ex.message }
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Mobilepay
|
2
|
+
class Client
|
3
|
+
module RefundAmount
|
4
|
+
|
5
|
+
# Merchants_RefundAmount
|
6
|
+
# Refunds an amount to the customer based on an order id
|
7
|
+
def refund_amount(args = {})
|
8
|
+
check_args(order_id: args[:order_id])
|
9
|
+
response = call(:put, "/merchants/#{merchant_id}/orders/#{args[:order_id]}", { body: args[:body] || '{}' })
|
10
|
+
JSON.parse(response.body)
|
11
|
+
rescue MobilePayFailure => ex
|
12
|
+
return { error: ex.message }
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Mobilepay
|
2
|
+
class Client
|
3
|
+
module Reservations
|
4
|
+
|
5
|
+
# Reservations_GetReservations
|
6
|
+
# Get the reservations for a particular date/time interval, and alternatively also for a specific customer
|
7
|
+
def reservations(args = {})
|
8
|
+
check_args(datetime_from: args[:datetime_from], datetime_to: args[:datetime_to])
|
9
|
+
address = "/reservations/merchants/#{merchant_id}/#{args[:datetime_from]}/#{args[:datetime_to]}"
|
10
|
+
address += "?customerId=#{args[:customer_id]}" if args[:customer_id]
|
11
|
+
response = call(:get, address, { body: '{}' })
|
12
|
+
JSON.parse(response.body)
|
13
|
+
rescue MobilePayFailure => ex
|
14
|
+
return { error: ex.message }
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
|
3
|
+
module Mobilepay
|
4
|
+
module Requests
|
5
|
+
|
6
|
+
private
|
7
|
+
|
8
|
+
def http_request(req, address, args = {})
|
9
|
+
uri = generate_uri(address)
|
10
|
+
req = generate_request(req, uri)
|
11
|
+
req = generate_headers(req, args[:body])
|
12
|
+
Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def generate_uri(address = '')
|
16
|
+
URI("#{base_uri}#{address}")
|
17
|
+
end
|
18
|
+
|
19
|
+
def generate_request(req, uri)
|
20
|
+
case req
|
21
|
+
when :get then Net::HTTP::Get.new(uri)
|
22
|
+
when :put then Net::HTTP::Put.new(uri)
|
23
|
+
when :delete then Net::HTTP::Delete.new(uri)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def generate_headers(req, body)
|
28
|
+
req['Content-Type'] = 'application/json'
|
29
|
+
req['Ocp-Apim-Subscription-Key'] = subscription_key
|
30
|
+
req.body = body
|
31
|
+
req
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'json'
|
2
|
+
require_relative 'security/public_key'
|
3
|
+
require_relative 'requests'
|
4
|
+
|
5
|
+
module Mobilepay
|
6
|
+
class Security
|
7
|
+
include Mobilepay::Security::PublicKey
|
8
|
+
include Mobilepay::Requests
|
9
|
+
|
10
|
+
class SecurityFailure < StandardError; end
|
11
|
+
|
12
|
+
attr_reader :subscription_key, :base_uri
|
13
|
+
|
14
|
+
def initialize(args = {})
|
15
|
+
@subscription_key = args[:subscription_key] || ''
|
16
|
+
@base_uri = 'https://api.mobeco.dk/merchantsecurity/api'
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def call
|
22
|
+
response = http_request(:get, '/publickey')
|
23
|
+
check_response(response)
|
24
|
+
response
|
25
|
+
end
|
26
|
+
|
27
|
+
def check_response(response)
|
28
|
+
if response.code != '200'
|
29
|
+
raise SecurityFailure, JSON.parse(response.body)['message']
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Mobilepay
|
2
|
+
class Security
|
3
|
+
module PublicKey
|
4
|
+
|
5
|
+
# Secutiry_PublicKey
|
6
|
+
# Get MobilePay's public key to use when signing up new merchants
|
7
|
+
def public_key
|
8
|
+
response = call
|
9
|
+
JSON.parse(response.body)
|
10
|
+
rescue SecurityFailure => ex
|
11
|
+
return { error: ex.message }
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/mobilepay/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mobilepay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anton Bogdanov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -69,6 +69,16 @@ files:
|
|
69
69
|
- bin/console
|
70
70
|
- bin/setup
|
71
71
|
- lib/mobilepay.rb
|
72
|
+
- lib/mobilepay/client.rb
|
73
|
+
- lib/mobilepay/client/cancel_reservation.rb
|
74
|
+
- lib/mobilepay/client/capture_amount.rb
|
75
|
+
- lib/mobilepay/client/payment_status.rb
|
76
|
+
- lib/mobilepay/client/payment_transactions.rb
|
77
|
+
- lib/mobilepay/client/refund_amount.rb
|
78
|
+
- lib/mobilepay/client/reservations.rb
|
79
|
+
- lib/mobilepay/requests.rb
|
80
|
+
- lib/mobilepay/security.rb
|
81
|
+
- lib/mobilepay/security/public_key.rb
|
72
82
|
- lib/mobilepay/version.rb
|
73
83
|
- mobilepay.gemspec
|
74
84
|
homepage: https://github.com/kortirso/mobilepay
|