mobilepay 1.1.5 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +46 -0
- data/Gemfile +2 -0
- data/README.md +1 -3
- data/Rakefile +1 -1
- data/lib/mobilepay.rb +1 -0
- data/lib/mobilepay/client.rb +13 -26
- data/lib/mobilepay/client/cancel_reservation.rb +4 -6
- data/lib/mobilepay/client/capture_amount.rb +5 -6
- data/lib/mobilepay/client/payment_status.rb +4 -6
- data/lib/mobilepay/client/payment_transactions.rb +4 -6
- data/lib/mobilepay/client/refund_amount.rb +5 -6
- data/lib/mobilepay/client/reservations.rb +6 -8
- data/lib/mobilepay/requests.rb +19 -26
- data/lib/mobilepay/requests/generate_signature.rb +5 -7
- data/lib/mobilepay/security.rb +11 -22
- data/lib/mobilepay/security/public_key.rb +5 -7
- data/lib/mobilepay/version.rb +1 -1
- data/mobilepay.gemspec +4 -1
- metadata +32 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 911b78597309b66a9038aeffb8eb9f51120d02b6
|
4
|
+
data.tar.gz: 210a253262c808ee88a804bda67eb27df0696594
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 654cf5c7761405cd849eca10ceeeb035d3a7ac644cd73b3408ed20967411a50915834fab738dade4f95d905234913d7ef669619a7655d934d53ddb1d090d4c93
|
7
|
+
data.tar.gz: 6cdc421f794cee4370551affcef507600ce29ac68963efd7676f03974d615d5f862ea33751996f94710811f58e2f5b0762b3ce7af3d44f64a0ca35f463b0e573
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
AllCops:
|
2
|
+
Exclude:
|
3
|
+
- bin/*
|
4
|
+
|
5
|
+
Metrics/AbcSize:
|
6
|
+
Enabled: false
|
7
|
+
|
8
|
+
Metrics/BlockLength:
|
9
|
+
Enabled: false
|
10
|
+
|
11
|
+
Metrics/ClassLength:
|
12
|
+
Enabled: false
|
13
|
+
|
14
|
+
Metrics/LineLength:
|
15
|
+
Enabled: false
|
16
|
+
|
17
|
+
Metrics/MethodLength:
|
18
|
+
Enabled: false
|
19
|
+
|
20
|
+
Metrics/ModuleLength:
|
21
|
+
Enabled: false
|
22
|
+
|
23
|
+
Metrics/CyclomaticComplexity:
|
24
|
+
Max: 20
|
25
|
+
|
26
|
+
Layout/IndentationWidth:
|
27
|
+
Width: 4
|
28
|
+
|
29
|
+
Layout/CaseIndentation:
|
30
|
+
EnforcedStyle: case
|
31
|
+
SupportedStyles:
|
32
|
+
- case
|
33
|
+
- end
|
34
|
+
IndentOneStep: true
|
35
|
+
|
36
|
+
Layout/AlignHash:
|
37
|
+
Enabled: false
|
38
|
+
|
39
|
+
Style/GuardClause:
|
40
|
+
Enabled: false
|
41
|
+
|
42
|
+
Style/FileName:
|
43
|
+
Enabled: false
|
44
|
+
|
45
|
+
Style/FormatStringToken:
|
46
|
+
EnforcedStyle: template
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -7,7 +7,6 @@ Actions with payments in MobilePay system.
|
|
7
7
|
Add this line to your application's Gemfile:
|
8
8
|
|
9
9
|
```ruby
|
10
|
-
gem 'jose'
|
11
10
|
gem 'mobilepay'
|
12
11
|
```
|
13
12
|
|
@@ -25,7 +24,7 @@ Or install it yourself as:
|
|
25
24
|
|
26
25
|
```ruby
|
27
26
|
require 'mobilepay'
|
28
|
-
security = Mobilepay::Security.new subscription_key: 'subscription_key'
|
27
|
+
security = Mobilepay::Security.new subscription_key: 'subscription_key', privatekey: 'key.pvk'
|
29
28
|
```
|
30
29
|
merchant_id - Merchant ID, required
|
31
30
|
|
@@ -33,7 +32,6 @@ Or install it yourself as:
|
|
33
32
|
|
34
33
|
```ruby
|
35
34
|
require 'mobilepay'
|
36
|
-
require 'jose'
|
37
35
|
client = Mobilepay::Client.new merchant_id: 'merchant_id', subscription_key: 'subscription_key', privatekey: 'key.pvk', test_mode: true
|
38
36
|
```
|
39
37
|
subscription_key - Subscription Key for MobilePay, required
|
data/Rakefile
CHANGED
data/lib/mobilepay.rb
CHANGED
data/lib/mobilepay/client.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'httparty'
|
2
2
|
require_relative 'client/payment_status'
|
3
3
|
require_relative 'client/payment_transactions'
|
4
4
|
require_relative 'client/reservations'
|
@@ -9,7 +9,9 @@ require_relative 'requests'
|
|
9
9
|
require_relative 'requests/generate_signature'
|
10
10
|
|
11
11
|
module Mobilepay
|
12
|
+
# Clients requests
|
12
13
|
class Client
|
14
|
+
include HTTParty
|
13
15
|
include Mobilepay::Client::PaymentStatus
|
14
16
|
include Mobilepay::Client::PaymentTransactions
|
15
17
|
include Mobilepay::Client::Reservations
|
@@ -19,35 +21,20 @@ module Mobilepay
|
|
19
21
|
include Mobilepay::Requests
|
20
22
|
include Mobilepay::Requests::GenerateSignature
|
21
23
|
|
22
|
-
|
24
|
+
base_uri 'https://api.mobeco.dk/appswitch/api/v1'
|
25
|
+
format :json
|
26
|
+
|
27
|
+
attr_reader :privatekey, :headers, :merchant_id, :body
|
23
28
|
|
24
29
|
def initialize(args = {})
|
25
|
-
@merchant_id = args[:merchant_id] || ''
|
26
|
-
@subscription_key = args[:subscription_key] || ''
|
27
30
|
@privatekey = args[:privatekey]
|
28
|
-
@
|
29
|
-
@
|
30
|
-
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
def call(req, address, args = {})
|
35
|
-
response = case req
|
36
|
-
when :get, :put, :delete then http_request(req, address, args)
|
37
|
-
else raise Failure, 'Undefined type for call'
|
38
|
-
end
|
39
|
-
check_response(response)
|
40
|
-
response
|
41
|
-
end
|
42
|
-
|
43
|
-
def check_response(response)
|
44
|
-
if response.code != '200'
|
45
|
-
error_message = response.body.empty? ? response.code : response.body
|
46
|
-
raise Failure, error_message
|
47
|
-
end
|
31
|
+
@headers = { 'Ocp-Apim-Subscription-Key' => args[:subscription_key], 'Content-Type' => 'application/json' }
|
32
|
+
@merchant_id = args[:merchant_id]
|
33
|
+
headers['Test-mode'] = 'true' if args[:test_mode] == true
|
34
|
+
@body = ''
|
48
35
|
end
|
49
36
|
|
50
|
-
def check_args(args)
|
37
|
+
private def check_args(args)
|
51
38
|
args.each do |arg_name, value|
|
52
39
|
if value.nil?
|
53
40
|
raise Failure, "Invalid argument '#{arg_name}', must be string"
|
@@ -55,4 +42,4 @@ module Mobilepay
|
|
55
42
|
end
|
56
43
|
end
|
57
44
|
end
|
58
|
-
end
|
45
|
+
end
|
@@ -1,17 +1,15 @@
|
|
1
1
|
module Mobilepay
|
2
2
|
class Client
|
3
|
+
# Reservations_CancelReservation
|
3
4
|
module CancelReservation
|
4
|
-
|
5
|
-
# Reservations_CancelReservation
|
6
5
|
# Cancels a specific reservation
|
7
6
|
def cancel_reservation(args = {})
|
8
7
|
check_args(order_id: args[:order_id])
|
9
|
-
response =
|
10
|
-
|
8
|
+
response = request(:delete, "/reservations/merchants/#{merchant_id}/orders/#{args[:order_id]}")
|
9
|
+
response.parsed_response
|
11
10
|
rescue Failure => ex
|
12
11
|
return { error: ex.message }
|
13
12
|
end
|
14
|
-
|
15
13
|
end
|
16
14
|
end
|
17
|
-
end
|
15
|
+
end
|
@@ -1,17 +1,16 @@
|
|
1
1
|
module Mobilepay
|
2
2
|
class Client
|
3
|
+
# Reservations_CaptureAmount
|
3
4
|
module CaptureAmount
|
4
|
-
|
5
|
-
# Reservations_CaptureAmount
|
6
5
|
# Captures a previously reserved amount, either in full or partially
|
7
6
|
def capture_amount(args = {})
|
8
7
|
check_args(order_id: args[:order_id])
|
9
|
-
|
10
|
-
|
8
|
+
@body = args[:body]
|
9
|
+
response = request(:put, "/reservations/merchants/#{merchant_id}/orders/#{args[:order_id]}")
|
10
|
+
response.parsed_response
|
11
11
|
rescue Failure => ex
|
12
12
|
return { error: ex.message }
|
13
13
|
end
|
14
|
-
|
15
14
|
end
|
16
15
|
end
|
17
|
-
end
|
16
|
+
end
|
@@ -1,17 +1,15 @@
|
|
1
1
|
module Mobilepay
|
2
2
|
class Client
|
3
|
+
# Merchants_GetPaymentStatus
|
3
4
|
module PaymentStatus
|
4
|
-
|
5
|
-
# Merchants_GetPaymentStatus
|
6
5
|
# Gets the status of a given order
|
7
6
|
def payment_status(args = {})
|
8
7
|
check_args(order_id: args[:order_id])
|
9
|
-
response =
|
10
|
-
|
8
|
+
response = request(:get, "/merchants/#{merchant_id}/orders/#{args[:order_id]}")
|
9
|
+
response.parsed_response
|
11
10
|
rescue Failure => ex
|
12
11
|
return { error: ex.message }
|
13
12
|
end
|
14
|
-
|
15
13
|
end
|
16
14
|
end
|
17
|
-
end
|
15
|
+
end
|
@@ -1,17 +1,15 @@
|
|
1
1
|
module Mobilepay
|
2
2
|
class Client
|
3
|
+
# Merchants_GetPaymentTransactions
|
3
4
|
module PaymentTransactions
|
4
|
-
|
5
|
-
# Merchants_GetPaymentTransactions
|
6
5
|
# Gets the transactions for a given order
|
7
6
|
def payment_transactions(args = {})
|
8
7
|
check_args(order_id: args[:order_id])
|
9
|
-
response =
|
10
|
-
|
8
|
+
response = request(:get, "/merchants/#{merchant_id}/orders/#{args[:order_id]}/transactions")
|
9
|
+
response.parsed_response
|
11
10
|
rescue Failure => ex
|
12
11
|
return { error: ex.message }
|
13
12
|
end
|
14
|
-
|
15
13
|
end
|
16
14
|
end
|
17
|
-
end
|
15
|
+
end
|
@@ -1,17 +1,16 @@
|
|
1
1
|
module Mobilepay
|
2
2
|
class Client
|
3
|
+
# Merchants_RefundAmount
|
3
4
|
module RefundAmount
|
4
|
-
|
5
|
-
# Merchants_RefundAmount
|
6
5
|
# Refunds an amount to the customer based on an order id
|
7
6
|
def refund_amount(args = {})
|
8
7
|
check_args(order_id: args[:order_id])
|
9
|
-
|
10
|
-
|
8
|
+
@body = args[:body]
|
9
|
+
response = request(:put, "/merchants/#{merchant_id}/orders/#{args[:order_id]}")
|
10
|
+
response.parsed_response
|
11
11
|
rescue Failure => ex
|
12
12
|
return { error: ex.message }
|
13
13
|
end
|
14
|
-
|
15
14
|
end
|
16
15
|
end
|
17
|
-
end
|
16
|
+
end
|
@@ -1,19 +1,17 @@
|
|
1
1
|
module Mobilepay
|
2
2
|
class Client
|
3
|
+
# Reservations_GetReservations
|
3
4
|
module Reservations
|
4
|
-
|
5
|
-
# Reservations_GetReservations
|
6
5
|
# Get the reservations for a particular date/time interval, and alternatively also for a specific customer
|
7
6
|
def reservations(args = {})
|
8
7
|
check_args(datetime_from: args[:datetime_from], datetime_to: args[:datetime_to])
|
9
|
-
|
10
|
-
|
11
|
-
response =
|
12
|
-
|
8
|
+
uri = "/reservations/merchants/#{merchant_id}/#{args[:datetime_from]}/#{args[:datetime_to]}"
|
9
|
+
uri += "?customerId=#{args[:customer_id]}" if args[:customer_id]
|
10
|
+
response = request(:get, uri)
|
11
|
+
response.parsed_response
|
13
12
|
rescue Failure => ex
|
14
13
|
return { error: ex.message }
|
15
14
|
end
|
16
|
-
|
17
15
|
end
|
18
16
|
end
|
19
|
-
end
|
17
|
+
end
|
data/lib/mobilepay/requests.rb
CHANGED
@@ -1,37 +1,30 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
|
3
1
|
module Mobilepay
|
2
|
+
# Common requests for classes
|
4
3
|
module Requests
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
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) }
|
4
|
+
private def request(type, uri)
|
5
|
+
add_signature(uri)
|
6
|
+
response = send_request(type, uri)
|
7
|
+
check_response(response)
|
8
|
+
response
|
13
9
|
end
|
14
10
|
|
15
|
-
def
|
16
|
-
|
11
|
+
private def add_signature(uri)
|
12
|
+
headers['AuthenticationSignature'] = generate_signature(uri)
|
17
13
|
end
|
18
14
|
|
19
|
-
def
|
20
|
-
case
|
21
|
-
when :get then
|
22
|
-
when :put then
|
23
|
-
when :delete then
|
15
|
+
private def send_request(type, uri)
|
16
|
+
case type
|
17
|
+
when :get then self.class.get(uri, query: {}, headers: headers)
|
18
|
+
when :put then self.class.put(uri, query: {}, headers: headers)
|
19
|
+
when :delete then self.class.delete(uri, query: {}, headers: headers)
|
24
20
|
end
|
25
21
|
end
|
26
22
|
|
27
|
-
def
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
req.body = body
|
33
|
-
req
|
23
|
+
private def check_response(response)
|
24
|
+
if response.code != 200
|
25
|
+
error_message = response.message.empty? ? response.code : response.message
|
26
|
+
raise Failure, error_message
|
27
|
+
end
|
34
28
|
end
|
35
|
-
|
36
29
|
end
|
37
|
-
end
|
30
|
+
end
|
@@ -4,18 +4,16 @@ require 'jose'
|
|
4
4
|
|
5
5
|
module Mobilepay
|
6
6
|
module Requests
|
7
|
+
# Generate signature module
|
7
8
|
module GenerateSignature
|
8
|
-
|
9
9
|
# Generate Authentication Signature
|
10
|
-
def generate_signature(
|
11
|
-
payload = (
|
10
|
+
def generate_signature(uri)
|
11
|
+
payload = (Mobilepay::Client.base_uri + uri + body.to_s).encode('UTF-8')
|
12
12
|
payload_sha1 = Digest::SHA1.digest(payload)
|
13
13
|
payload_base64 = Base64.strict_encode64(payload_sha1)
|
14
|
-
|
15
14
|
jwk = JOSE::JWK.from_pem_file(privatekey)
|
16
|
-
JOSE::JWS.sign(jwk, payload_base64,
|
15
|
+
JOSE::JWS.sign(jwk, payload_base64, 'alg' => 'RS256', 'typ' => 'JWT').compact
|
17
16
|
end
|
18
|
-
|
19
17
|
end
|
20
18
|
end
|
21
|
-
end
|
19
|
+
end
|
data/lib/mobilepay/security.rb
CHANGED
@@ -1,36 +1,25 @@
|
|
1
|
-
require '
|
1
|
+
require 'httparty'
|
2
2
|
require_relative 'security/public_key'
|
3
3
|
require_relative 'requests'
|
4
4
|
require_relative 'requests/generate_signature'
|
5
5
|
|
6
6
|
module Mobilepay
|
7
|
+
# Security requests
|
7
8
|
class Security
|
9
|
+
include HTTParty
|
8
10
|
include Mobilepay::Security::PublicKey
|
9
11
|
include Mobilepay::Requests
|
10
12
|
include Mobilepay::Requests::GenerateSignature
|
11
13
|
|
12
|
-
|
14
|
+
base_uri 'https://api.mobeco.dk/merchantsecurity/api'
|
15
|
+
format :json
|
13
16
|
|
14
|
-
|
15
|
-
@subscription_key = args[:subscription_key] || ''
|
16
|
-
@privatekey = nil
|
17
|
-
@test_mode = false
|
18
|
-
@base_uri = 'https://api.mobeco.dk/merchantsecurity/api'
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
17
|
+
attr_reader :privatekey, :headers, :body
|
22
18
|
|
23
|
-
def
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
def check_response(response)
|
30
|
-
if response.code != '200'
|
31
|
-
error_message = response.body.empty? ? response.code : JSON.parse(response.body)['message']
|
32
|
-
raise Failure, error_message
|
33
|
-
end
|
19
|
+
def initialize(args = {})
|
20
|
+
@privatekey = args[:privatekey]
|
21
|
+
@headers = { 'Ocp-Apim-Subscription-Key' => args[:subscription_key], 'Content-Type' => 'application/json' }
|
22
|
+
@body = ''
|
34
23
|
end
|
35
24
|
end
|
36
|
-
end
|
25
|
+
end
|
@@ -1,16 +1,14 @@
|
|
1
1
|
module Mobilepay
|
2
2
|
class Security
|
3
|
+
# Security_PublicKey
|
3
4
|
module PublicKey
|
4
|
-
|
5
|
-
# Secutiry_PublicKey
|
6
|
-
# Get MobilePay's public key to use when signing up new merchants
|
5
|
+
# Gets the public key
|
7
6
|
def public_key
|
8
|
-
response =
|
9
|
-
|
7
|
+
response = request(:get, '/publickey')
|
8
|
+
response.parsed_response
|
10
9
|
rescue Failure => ex
|
11
10
|
return { error: ex.message }
|
12
11
|
end
|
13
|
-
|
14
12
|
end
|
15
13
|
end
|
16
|
-
end
|
14
|
+
end
|
data/lib/mobilepay/version.rb
CHANGED
data/mobilepay.gemspec
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
|
2
3
|
lib = File.expand_path('../lib', __FILE__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'mobilepay/version'
|
@@ -23,5 +24,7 @@ Gem::Specification.new do |spec|
|
|
23
24
|
|
24
25
|
spec.add_development_dependency 'bundler', '~> 1.14'
|
25
26
|
spec.add_development_dependency 'rake', '~> 10.0'
|
26
|
-
spec.add_development_dependency '
|
27
|
+
spec.add_development_dependency 'rubocop', '~> 0.49.1'
|
28
|
+
spec.add_dependency 'jose', '~> 1.1'
|
29
|
+
spec.add_dependency 'httparty', '~> 0.15'
|
27
30
|
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.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- JungleCoders
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-12-
|
12
|
+
date: 2017-12-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -39,6 +39,20 @@ dependencies:
|
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '10.0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rubocop
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 0.49.1
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 0.49.1
|
42
56
|
- !ruby/object:Gem::Dependency
|
43
57
|
name: jose
|
44
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -46,13 +60,27 @@ dependencies:
|
|
46
60
|
- - "~>"
|
47
61
|
- !ruby/object:Gem::Version
|
48
62
|
version: '1.1'
|
49
|
-
type: :
|
63
|
+
type: :runtime
|
50
64
|
prerelease: false
|
51
65
|
version_requirements: !ruby/object:Gem::Requirement
|
52
66
|
requirements:
|
53
67
|
- - "~>"
|
54
68
|
- !ruby/object:Gem::Version
|
55
69
|
version: '1.1'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: httparty
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0.15'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0.15'
|
56
84
|
description: Actions with payments in MobilePay system
|
57
85
|
email:
|
58
86
|
- kortirso@gmail.com
|
@@ -62,6 +90,7 @@ extra_rdoc_files: []
|
|
62
90
|
files:
|
63
91
|
- ".gitignore"
|
64
92
|
- ".rspec"
|
93
|
+
- ".rubocop.yml"
|
65
94
|
- ".travis.yml"
|
66
95
|
- Gemfile
|
67
96
|
- LICENSE.txt
|