mobilepay 1.1.5 → 1.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 +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
|