mobilepay 1.0.0 → 1.1.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 +3 -1
- data/lib/mobilepay.rb +1 -0
- data/lib/mobilepay/client.rb +8 -6
- data/lib/mobilepay/client/cancel_reservation.rb +2 -2
- data/lib/mobilepay/client/capture_amount.rb +2 -2
- data/lib/mobilepay/client/payment_status.rb +2 -2
- data/lib/mobilepay/client/payment_transactions.rb +2 -2
- data/lib/mobilepay/client/refund_amount.rb +1 -1
- data/lib/mobilepay/client/reservations.rb +1 -1
- data/lib/mobilepay/requests.rb +1 -0
- data/lib/mobilepay/requests/generate_signature.rb +22 -0
- data/lib/mobilepay/security.rb +6 -4
- data/lib/mobilepay/security/public_key.rb +1 -1
- data/lib/mobilepay/version.rb +1 -1
- data/mobilepay.gemspec +2 -2
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 311d54f9494a6c32c4044c15826ba890985de747
|
4
|
+
data.tar.gz: 55f283e80713e74ca66dfcf91f32271db96b8556
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6cf5c513bd53f0a60180e9f064e23b339f6085421b3060b8c22dc87bfcf4510ad7852621052ec0952aaf42c3429e3cc5498889105837a652dc3804c614041ddf
|
7
|
+
data.tar.gz: 53beb0bc111da0df9b300ea755944dfe47792f0405a94c0ef2a2839ca25fa1a2b41c120a2c7b68b9ff0404c60797db2964121d2d2de6f066941b53bd516ea0e5
|
data/README.md
CHANGED
@@ -32,10 +32,12 @@ Or install it yourself as:
|
|
32
32
|
|
33
33
|
```ruby
|
34
34
|
require 'mobilepay'
|
35
|
-
|
35
|
+
require 'jose'
|
36
|
+
client = Mobilepay::Client.new merchant_id: 'merchant_id', subscription_key: 'subscription_key', privatekey: OpenSSL::PKey::RSA.new(File.read('key.pvk'))
|
36
37
|
```
|
37
38
|
subscription_key - Subscription Key for MobilePay, required
|
38
39
|
merchant_id - Merchant ID, required
|
40
|
+
privatekey - Secret key for creating signature for requests, required
|
39
41
|
|
40
42
|
### Public Key
|
41
43
|
|
data/lib/mobilepay.rb
CHANGED
data/lib/mobilepay/client.rb
CHANGED
@@ -6,6 +6,7 @@ require_relative 'client/refund_amount'
|
|
6
6
|
require_relative 'client/capture_amount'
|
7
7
|
require_relative 'client/cancel_reservation'
|
8
8
|
require_relative 'requests'
|
9
|
+
require_relative 'requests/generate_signature'
|
9
10
|
|
10
11
|
module Mobilepay
|
11
12
|
class Client
|
@@ -16,14 +17,14 @@ module Mobilepay
|
|
16
17
|
include Mobilepay::Client::CaptureAmount
|
17
18
|
include Mobilepay::Client::CancelReservation
|
18
19
|
include Mobilepay::Requests
|
20
|
+
include Mobilepay::Requests::GenerateSignature
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
-
attr_reader :merchant_id, :subscription_key, :base_uri
|
22
|
+
attr_reader :merchant_id, :subscription_key, :privatekey, :base_uri
|
23
23
|
|
24
24
|
def initialize(args = {})
|
25
25
|
@merchant_id = args[:merchant_id] || ''
|
26
26
|
@subscription_key = args[:subscription_key] || ''
|
27
|
+
@privatekey = args[:privatekey]
|
27
28
|
@base_uri = 'https://api.mobeco.dk/appswitch/api/v1'
|
28
29
|
end
|
29
30
|
|
@@ -32,7 +33,7 @@ module Mobilepay
|
|
32
33
|
def call(req, address, args = {})
|
33
34
|
response = case req
|
34
35
|
when :get, :put, :delete then http_request(req, address, args)
|
35
|
-
else raise
|
36
|
+
else raise Failure, 'Undefined type for call'
|
36
37
|
end
|
37
38
|
check_response(response)
|
38
39
|
response
|
@@ -40,14 +41,15 @@ module Mobilepay
|
|
40
41
|
|
41
42
|
def check_response(response)
|
42
43
|
if response.code != '200'
|
43
|
-
|
44
|
+
error_message = response.body.empty? ? response.code : JSON.parse(response.body)['message']
|
45
|
+
raise Failure, error_message
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
47
49
|
def check_args(args)
|
48
50
|
args.each do |arg_name, value|
|
49
51
|
if value.nil? || !value.is_a?(String)
|
50
|
-
raise
|
52
|
+
raise Failure, "Invalid argument '#{arg_name}', must be string"
|
51
53
|
end
|
52
54
|
end
|
53
55
|
end
|
@@ -6,9 +6,9 @@ module Mobilepay
|
|
6
6
|
# Cancels a specific reservation
|
7
7
|
def cancel_reservation(args = {})
|
8
8
|
check_args(order_id: args[:order_id])
|
9
|
-
response = call(:delete, "/reservations/merchants/#{merchant_id}/orders/#{args[:order_id]}", { body: '
|
9
|
+
response = call(:delete, "/reservations/merchants/#{merchant_id}/orders/#{args[:order_id]}", { body: '' })
|
10
10
|
JSON.parse(response.body)
|
11
|
-
rescue
|
11
|
+
rescue Failure => ex
|
12
12
|
return { error: ex.message }
|
13
13
|
end
|
14
14
|
|
@@ -6,9 +6,9 @@ module Mobilepay
|
|
6
6
|
# Captures a previously reserved amount, either in full or partially
|
7
7
|
def capture_amount(args = {})
|
8
8
|
check_args(order_id: args[:order_id])
|
9
|
-
response = call(:put, "/reservations/merchants/#{merchant_id}/orders/#{args[:order_id]}", { body: args[:body] || '
|
9
|
+
response = call(:put, "/reservations/merchants/#{merchant_id}/orders/#{args[:order_id]}", { body: args[:body] || '' })
|
10
10
|
JSON.parse(response.body)
|
11
|
-
rescue
|
11
|
+
rescue Failure => ex
|
12
12
|
return { error: ex.message }
|
13
13
|
end
|
14
14
|
|
@@ -6,9 +6,9 @@ module Mobilepay
|
|
6
6
|
# Gets the status of a given order
|
7
7
|
def payment_status(args = {})
|
8
8
|
check_args(order_id: args[:order_id])
|
9
|
-
response = call(:get, "/merchants/#{merchant_id}/orders/#{args[:order_id]}", { body: '
|
9
|
+
response = call(:get, "/merchants/#{merchant_id}/orders/#{args[:order_id]}", { body: '' })
|
10
10
|
JSON.parse(response.body)
|
11
|
-
rescue
|
11
|
+
rescue Failure => ex
|
12
12
|
return { error: ex.message }
|
13
13
|
end
|
14
14
|
|
@@ -6,9 +6,9 @@ module Mobilepay
|
|
6
6
|
# Gets the transactions for a given order
|
7
7
|
def payment_transactions(args = {})
|
8
8
|
check_args(order_id: args[:order_id])
|
9
|
-
response = call(:get, "/merchants/#{merchant_id}/orders/#{args[:order_id]}/transactions", { body: '
|
9
|
+
response = call(:get, "/merchants/#{merchant_id}/orders/#{args[:order_id]}/transactions", { body: '' })
|
10
10
|
JSON.parse(response.body)
|
11
|
-
rescue
|
11
|
+
rescue Failure => ex
|
12
12
|
return { error: ex.message }
|
13
13
|
end
|
14
14
|
|
@@ -8,7 +8,7 @@ module Mobilepay
|
|
8
8
|
check_args(order_id: args[:order_id])
|
9
9
|
response = call(:put, "/merchants/#{merchant_id}/orders/#{args[:order_id]}", { body: args[:body] || '{}' })
|
10
10
|
JSON.parse(response.body)
|
11
|
-
rescue
|
11
|
+
rescue Failure => ex
|
12
12
|
return { error: ex.message }
|
13
13
|
end
|
14
14
|
|
@@ -10,7 +10,7 @@ module Mobilepay
|
|
10
10
|
address += "?customerId=#{args[:customer_id]}" if args[:customer_id]
|
11
11
|
response = call(:get, address, { body: '{}' })
|
12
12
|
JSON.parse(response.body)
|
13
|
-
rescue
|
13
|
+
rescue Failure => ex
|
14
14
|
return { error: ex.message }
|
15
15
|
end
|
16
16
|
|
data/lib/mobilepay/requests.rb
CHANGED
@@ -27,6 +27,7 @@ module Mobilepay
|
|
27
27
|
def generate_headers(req, body)
|
28
28
|
req['Content-Type'] = 'application/json'
|
29
29
|
req['Ocp-Apim-Subscription-Key'] = subscription_key
|
30
|
+
req['AuthenticationSignature'] = generate_signature(req) unless privatekey.nil?
|
30
31
|
req.body = body
|
31
32
|
req
|
32
33
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'digest/sha1'
|
2
|
+
require 'base64'
|
3
|
+
require 'jose'
|
4
|
+
|
5
|
+
module Mobilepay
|
6
|
+
module Requests
|
7
|
+
module GenerateSignature
|
8
|
+
|
9
|
+
# Generate Authentication Signature
|
10
|
+
def generate_signature(request)
|
11
|
+
payload = (request.uri.to_s + request.body.to_s).force_encoding('UTF-8')
|
12
|
+
payload_sha1 = Digest::SHA1.hexdigest(payload)
|
13
|
+
payload_base64 = Base64.encode64(payload_sha1)
|
14
|
+
|
15
|
+
jwk_rs256 = JOSE::JWK.generate_key([:rsa, 1024])
|
16
|
+
jwk_rs256.kty.key = privatekey
|
17
|
+
JOSE::JWS.sign(jwk_rs256, payload_base64, { "alg" => "RS256" }).compact
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/mobilepay/security.rb
CHANGED
@@ -1,18 +1,19 @@
|
|
1
1
|
require 'json'
|
2
2
|
require_relative 'security/public_key'
|
3
3
|
require_relative 'requests'
|
4
|
+
require_relative 'requests/generate_signature'
|
4
5
|
|
5
6
|
module Mobilepay
|
6
7
|
class Security
|
7
8
|
include Mobilepay::Security::PublicKey
|
8
9
|
include Mobilepay::Requests
|
10
|
+
include Mobilepay::Requests::GenerateSignature
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
attr_reader :subscription_key, :base_uri
|
12
|
+
attr_reader :subscription_key, :privatekey, :base_uri
|
13
13
|
|
14
14
|
def initialize(args = {})
|
15
15
|
@subscription_key = args[:subscription_key] || ''
|
16
|
+
@privatekey = nil
|
16
17
|
@base_uri = 'https://api.mobeco.dk/merchantsecurity/api'
|
17
18
|
end
|
18
19
|
|
@@ -26,7 +27,8 @@ module Mobilepay
|
|
26
27
|
|
27
28
|
def check_response(response)
|
28
29
|
if response.code != '200'
|
29
|
-
|
30
|
+
error_message = response.body.empty? ? response.code : JSON.parse(response.body)['message']
|
31
|
+
raise Failure, error_message
|
30
32
|
end
|
31
33
|
end
|
32
34
|
end
|
data/lib/mobilepay/version.rb
CHANGED
data/mobilepay.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ['kortirso@gmail.com']
|
11
11
|
|
12
12
|
spec.summary = 'Gem for interaction with MobilePay API'
|
13
|
-
spec.description = '
|
13
|
+
spec.description = 'Actions with payments in MobilePay system'
|
14
14
|
spec.homepage = 'https://github.com/kortirso/mobilepay'
|
15
15
|
spec.license = 'MIT'
|
16
16
|
|
@@ -23,5 +23,5 @@ Gem::Specification.new do |spec|
|
|
23
23
|
|
24
24
|
spec.add_development_dependency 'bundler', '~> 1.14'
|
25
25
|
spec.add_development_dependency 'rake', '~> 10.0'
|
26
|
-
spec.add_development_dependency '
|
26
|
+
spec.add_development_dependency 'jose', '~> 1.1'
|
27
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mobilepay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anton Bogdanov
|
@@ -39,20 +39,20 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: jose
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '1.1'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
55
|
-
description:
|
54
|
+
version: '1.1'
|
55
|
+
description: Actions with payments in MobilePay system
|
56
56
|
email:
|
57
57
|
- kortirso@gmail.com
|
58
58
|
executables: []
|
@@ -77,6 +77,7 @@ files:
|
|
77
77
|
- lib/mobilepay/client/refund_amount.rb
|
78
78
|
- lib/mobilepay/client/reservations.rb
|
79
79
|
- lib/mobilepay/requests.rb
|
80
|
+
- lib/mobilepay/requests/generate_signature.rb
|
80
81
|
- lib/mobilepay/security.rb
|
81
82
|
- lib/mobilepay/security/public_key.rb
|
82
83
|
- lib/mobilepay/version.rb
|