tikkie-api 0.1.0 → 2.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 +5 -5
- data/.rubocop.yml +31 -7
- data/.travis.yml +8 -4
- data/Gemfile +3 -1
- data/Gemfile.lock +39 -33
- data/LICENSE.txt +1 -1
- data/README.md +211 -61
- data/lib/tikkie/api.rb +52 -25
- data/lib/tikkie/api/amount.rb +35 -0
- data/lib/tikkie/api/client.rb +16 -8
- data/lib/tikkie/api/clients/base.rb +16 -0
- data/lib/tikkie/api/clients/payment_requests.rb +25 -0
- data/lib/tikkie/api/clients/payment_requests_subscription.rb +20 -0
- data/lib/tikkie/api/clients/payments.rb +20 -0
- data/lib/tikkie/api/clients/refunds.rb +20 -0
- data/lib/tikkie/api/clients/sandbox_apps.rb +15 -0
- data/lib/tikkie/api/configuration.rb +8 -47
- data/lib/tikkie/api/exception.rb +28 -8
- data/lib/tikkie/api/request.rb +51 -27
- data/lib/tikkie/api/resources/base.rb +66 -0
- data/lib/tikkie/api/{responses → resources}/error.rb +11 -9
- data/lib/tikkie/api/resources/list.rb +52 -0
- data/lib/tikkie/api/resources/payment.rb +68 -0
- data/lib/tikkie/api/resources/payment_request.rb +97 -0
- data/lib/tikkie/api/resources/payment_requests.rb +40 -0
- data/lib/tikkie/api/resources/payment_requests_subscription.rb +24 -0
- data/lib/tikkie/api/resources/payments.rb +48 -0
- data/lib/tikkie/api/resources/refund.rb +71 -0
- data/lib/tikkie/api/resources/sandbox_app.rb +20 -0
- data/lib/tikkie/api/response.rb +64 -0
- data/lib/tikkie/api/v1/access_token.rb +21 -0
- data/lib/tikkie/api/v1/authentication.rb +67 -0
- data/lib/tikkie/api/v1/client.rb +26 -0
- data/lib/tikkie/api/v1/configuration.rb +64 -0
- data/lib/tikkie/api/v1/exception.rb +24 -0
- data/lib/tikkie/api/v1/request.rb +59 -0
- data/lib/tikkie/api/v1/requests/payment_requests.rb +59 -0
- data/lib/tikkie/api/v1/requests/platforms.rb +34 -0
- data/lib/tikkie/api/v1/requests/users.rb +33 -0
- data/lib/tikkie/api/v1/responses/bank_account.rb +24 -0
- data/lib/tikkie/api/v1/responses/base.rb +69 -0
- data/lib/tikkie/api/v1/responses/error.rb +36 -0
- data/lib/tikkie/api/v1/responses/pagination.rb +22 -0
- data/lib/tikkie/api/v1/responses/payment.rb +50 -0
- data/lib/tikkie/api/v1/responses/payment_request.rb +68 -0
- data/lib/tikkie/api/v1/responses/payment_request_created.rb +24 -0
- data/lib/tikkie/api/v1/responses/payment_requests.rb +44 -0
- data/lib/tikkie/api/v1/responses/platform.rb +46 -0
- data/lib/tikkie/api/v1/responses/platforms.rb +34 -0
- data/lib/tikkie/api/v1/responses/user.rb +43 -0
- data/lib/tikkie/api/v1/responses/users.rb +38 -0
- data/lib/tikkie/api/v1/types/payment_request_status.rb +17 -0
- data/lib/tikkie/api/v1/types/payment_status.rb +16 -0
- data/lib/tikkie/api/v1/types/platform_status.rb +14 -0
- data/lib/tikkie/api/v1/types/platform_usage.rb +14 -0
- data/lib/tikkie/api/v1/types/user_status.rb +14 -0
- data/lib/tikkie/api/version.rb +1 -1
- data/lib/tikkie/notification.rb +23 -0
- data/lib/tikkie/notifications/bundle_notification.rb +28 -0
- data/lib/tikkie/notifications/payment_notification.rb +32 -0
- data/lib/tikkie/notifications/refund_notification.rb +36 -0
- data/tikkie-api.gemspec +4 -3
- metadata +69 -44
- data/lib/tikkie/api/access_token.rb +0 -19
- data/lib/tikkie/api/authentication.rb +0 -60
- data/lib/tikkie/api/requests/payment_requests.rb +0 -56
- data/lib/tikkie/api/requests/platforms.rb +0 -32
- data/lib/tikkie/api/requests/users.rb +0 -31
- data/lib/tikkie/api/responses/bank_account.rb +0 -22
- data/lib/tikkie/api/responses/base.rb +0 -53
- data/lib/tikkie/api/responses/pagination.rb +0 -20
- data/lib/tikkie/api/responses/payment.rb +0 -48
- data/lib/tikkie/api/responses/payment_request.rb +0 -64
- data/lib/tikkie/api/responses/payment_request_created.rb +0 -22
- data/lib/tikkie/api/responses/payment_requests.rb +0 -42
- data/lib/tikkie/api/responses/platform.rb +0 -44
- data/lib/tikkie/api/responses/platforms.rb +0 -30
- data/lib/tikkie/api/responses/user.rb +0 -39
- data/lib/tikkie/api/responses/users.rb +0 -34
- data/lib/tikkie/api/types/payment_request_status.rb +0 -15
- data/lib/tikkie/api/types/payment_status.rb +0 -14
- data/lib/tikkie/api/types/platform_status.rb +0 -12
- data/lib/tikkie/api/types/platform_usage.rb +0 -12
- data/lib/tikkie/api/types/user_status.rb +0 -12
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Tikkie
|
4
|
-
module Api
|
5
|
-
# Access token that can be used to make API calls.
|
6
|
-
class AccessToken
|
7
|
-
attr_accessor :token
|
8
|
-
|
9
|
-
def initialize(token, expires_in)
|
10
|
-
@token = token
|
11
|
-
@expires_at = Time.now + expires_in.to_i
|
12
|
-
end
|
13
|
-
|
14
|
-
def expired?
|
15
|
-
Time.now > @expires_at
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'json'
|
4
|
-
require 'jwt'
|
5
|
-
require 'net/http'
|
6
|
-
require 'uri'
|
7
|
-
|
8
|
-
module Tikkie
|
9
|
-
module Api
|
10
|
-
# Provides authentication for the ABN AMRO OAuth API.
|
11
|
-
# see https://developer.abnamro.com/get-started#authentication
|
12
|
-
class Authentication
|
13
|
-
def initialize(config)
|
14
|
-
@config = config
|
15
|
-
end
|
16
|
-
|
17
|
-
def authenticate
|
18
|
-
uri = URI.parse(File.join(@config.api_url, "/oauth/token"))
|
19
|
-
|
20
|
-
request = Net::HTTP::Post.new(uri)
|
21
|
-
request["Api-Key"] = @config.api_key
|
22
|
-
|
23
|
-
request.set_form_data(
|
24
|
-
client_assertion: jwt_token,
|
25
|
-
client_assertion_type: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
|
26
|
-
grant_type: "client_credentials",
|
27
|
-
scope: "tikkie"
|
28
|
-
)
|
29
|
-
|
30
|
-
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
|
31
|
-
http.request(request)
|
32
|
-
end
|
33
|
-
|
34
|
-
if response.is_a?(Net::HTTPSuccess)
|
35
|
-
json = JSON.parse(response.body, symbolize_names: true)
|
36
|
-
|
37
|
-
Tikkie::Api::AccessToken.new(json[:access_token], json[:expires_in])
|
38
|
-
else
|
39
|
-
raise Tikkie::Api::AuthenticationException, response
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
|
-
def jwt_token
|
46
|
-
now = Time.now.to_i
|
47
|
-
|
48
|
-
payload = {
|
49
|
-
nbf: now - 120,
|
50
|
-
exp: now + 120, # Token is valid for 2 minutes
|
51
|
-
iss: "Ruby Tikkie client",
|
52
|
-
sub: @config.api_key,
|
53
|
-
aud: @config.oauth_token_url
|
54
|
-
}
|
55
|
-
|
56
|
-
JWT.encode(payload, @config.private_data, @config.jwt_hashing_algorithm, typ: "JWT")
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'bigdecimal'
|
4
|
-
|
5
|
-
module Tikkie
|
6
|
-
module Api
|
7
|
-
module Requests
|
8
|
-
# Payment requests operations at Tikkie.
|
9
|
-
class PaymentRequests
|
10
|
-
def initialize(request)
|
11
|
-
@request = request
|
12
|
-
end
|
13
|
-
|
14
|
-
def list(platform_token, user_token, options = {})
|
15
|
-
offset = options[:offset] || 0
|
16
|
-
limit = options[:limit] || 20
|
17
|
-
from_date = options[:from_date]
|
18
|
-
to_date = options[:to_date]
|
19
|
-
|
20
|
-
params = { offset: offset, limit: limit }
|
21
|
-
params[:fromDate] = from_date.respond_to?(:utc) ? from_date.utc.iso8601 : from_date if from_date
|
22
|
-
params[:toDate] = to_date.respond_to?(:utc) ? to_date.utc.iso8601 : to_date if to_date
|
23
|
-
|
24
|
-
response = @request.get("/tikkie/platforms/#{platform_token}/users/#{user_token}/paymentrequests", params)
|
25
|
-
Tikkie::Api::Responses::PaymentRequests.new(response, offset: offset, limit: limit)
|
26
|
-
end
|
27
|
-
|
28
|
-
def get(platform_token, user_token, payment_request_token)
|
29
|
-
response = @request.get("/tikkie/platforms/#{platform_token}/users/#{user_token}/paymentrequests/#{payment_request_token}")
|
30
|
-
|
31
|
-
Tikkie::Api::Responses::PaymentRequest.new(response)
|
32
|
-
end
|
33
|
-
|
34
|
-
def create(platform_token, user_token, bank_account_token, options = {})
|
35
|
-
params = {
|
36
|
-
amountInCents: to_cents(options.fetch(:amount)),
|
37
|
-
currency: options.fetch(:currency),
|
38
|
-
description: options.fetch(:description),
|
39
|
-
externalId: options[:external_id]
|
40
|
-
}
|
41
|
-
response = @request.post("/tikkie/platforms/#{platform_token}/users/#{user_token}/bankaccounts/#{bank_account_token}/paymentrequests", params)
|
42
|
-
|
43
|
-
Tikkie::Api::Responses::PaymentRequestCreated.new(response)
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
def to_cents(amount)
|
49
|
-
decimal = BigDecimal.new(amount.to_s)
|
50
|
-
decimal *= 100 # to cents
|
51
|
-
decimal.to_i
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Tikkie
|
4
|
-
module Api
|
5
|
-
module Requests
|
6
|
-
# Platforms operations at Tikkie.
|
7
|
-
class Platforms
|
8
|
-
def initialize(request)
|
9
|
-
@request = request
|
10
|
-
end
|
11
|
-
|
12
|
-
def list
|
13
|
-
response = @request.get("/tikkie/platforms")
|
14
|
-
Tikkie::Api::Responses::Platforms.new(response)
|
15
|
-
end
|
16
|
-
|
17
|
-
def create(options = {})
|
18
|
-
params = {
|
19
|
-
name: options.fetch(:name),
|
20
|
-
phoneNumber: options.fetch(:phone_number),
|
21
|
-
platformUsage: options.fetch(:platform_usage),
|
22
|
-
email: options[:email],
|
23
|
-
notificationUrl: options[:notification_url]
|
24
|
-
}
|
25
|
-
response = @request.post("/tikkie/platforms", params)
|
26
|
-
|
27
|
-
Tikkie::Api::Responses::Platform.new(response)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Tikkie
|
4
|
-
module Api
|
5
|
-
module Requests
|
6
|
-
# Users operations at Tikkie.
|
7
|
-
class Users
|
8
|
-
def initialize(request)
|
9
|
-
@request = request
|
10
|
-
end
|
11
|
-
|
12
|
-
def list(platform_token)
|
13
|
-
response = @request.get("/tikkie/platforms/#{platform_token}/users")
|
14
|
-
Tikkie::Api::Responses::Users.new(response)
|
15
|
-
end
|
16
|
-
|
17
|
-
def create(platform_token, options = {})
|
18
|
-
params = {
|
19
|
-
name: options.fetch(:name),
|
20
|
-
phoneNumber: options.fetch(:phone_number),
|
21
|
-
iban: options.fetch(:iban),
|
22
|
-
bankAccountLabel: options.fetch(:bank_account_label)
|
23
|
-
}
|
24
|
-
response = @request.post("/tikkie/platforms/#{platform_token}/users", params)
|
25
|
-
|
26
|
-
Tikkie::Api::Responses::User.new(response)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Tikkie
|
4
|
-
module Api
|
5
|
-
module Responses
|
6
|
-
# Bank account of a user.
|
7
|
-
class BankAccount < Base
|
8
|
-
def bank_account_token
|
9
|
-
data[:bankAccountToken]
|
10
|
-
end
|
11
|
-
|
12
|
-
def bank_account_label
|
13
|
-
data[:bankAccountLabel]
|
14
|
-
end
|
15
|
-
|
16
|
-
def iban
|
17
|
-
data[:iban]
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'json'
|
4
|
-
|
5
|
-
module Tikkie
|
6
|
-
module Api
|
7
|
-
module Responses
|
8
|
-
# Base class for all responses.
|
9
|
-
class Base
|
10
|
-
attr_reader :response, :data
|
11
|
-
|
12
|
-
def initialize(response)
|
13
|
-
if response.respond_to?(:body)
|
14
|
-
@response = response
|
15
|
-
@data = JSON.parse(response.body, symbolize_names: true)
|
16
|
-
else
|
17
|
-
@data = response
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def response_code
|
22
|
-
response.code.to_i if response
|
23
|
-
end
|
24
|
-
|
25
|
-
def success?
|
26
|
-
response_code == 200 || response_code == 201
|
27
|
-
end
|
28
|
-
|
29
|
-
def error?
|
30
|
-
!success?
|
31
|
-
end
|
32
|
-
|
33
|
-
def trace_id
|
34
|
-
response["Trace-Id"] if response
|
35
|
-
end
|
36
|
-
|
37
|
-
def errors
|
38
|
-
@errors ||= begin
|
39
|
-
errors = []
|
40
|
-
|
41
|
-
if data[:errors]
|
42
|
-
data[:errors].each do |error|
|
43
|
-
errors << Tikkie::Api::Responses::Error.new(error)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
errors
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Tikkie
|
4
|
-
module Api
|
5
|
-
module Responses
|
6
|
-
# Helper for paginated responses.
|
7
|
-
module Pagination
|
8
|
-
attr_accessor :offset, :limit, :elements, :total_elements
|
9
|
-
|
10
|
-
def more_elements?
|
11
|
-
@total_elements && @total_elements > @offset + @elements
|
12
|
-
end
|
13
|
-
|
14
|
-
def next_offset
|
15
|
-
@offset + @limit if more_elements?
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'bigdecimal'
|
4
|
-
require 'time'
|
5
|
-
|
6
|
-
module Tikkie
|
7
|
-
module Api
|
8
|
-
module Responses
|
9
|
-
# Payment that is associated with a payment request.
|
10
|
-
class Payment < Base
|
11
|
-
def payment_token
|
12
|
-
data[:paymentToken]
|
13
|
-
end
|
14
|
-
|
15
|
-
def counter_party_name
|
16
|
-
data[:counterPartyName]
|
17
|
-
end
|
18
|
-
|
19
|
-
def amount
|
20
|
-
decimal = BigDecimal.new(data[:amountInCents])
|
21
|
-
decimal /= 100.0
|
22
|
-
decimal
|
23
|
-
end
|
24
|
-
|
25
|
-
def currency
|
26
|
-
data[:amountCurrency]
|
27
|
-
end
|
28
|
-
|
29
|
-
def description
|
30
|
-
data[:description]
|
31
|
-
end
|
32
|
-
|
33
|
-
def created_at
|
34
|
-
Time.parse(data[:created]) if data[:created]
|
35
|
-
end
|
36
|
-
|
37
|
-
# See PaymentStatus
|
38
|
-
def online_payment_status
|
39
|
-
data[:onlinePaymentStatus]
|
40
|
-
end
|
41
|
-
|
42
|
-
def paid?
|
43
|
-
online_payment_status == Tikkie::Api::Types::PaymentStatus::PAID
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'bigdecimal'
|
4
|
-
require 'time'
|
5
|
-
|
6
|
-
module Tikkie
|
7
|
-
module Api
|
8
|
-
module Responses
|
9
|
-
# Response for a payment request.
|
10
|
-
class PaymentRequest < Base
|
11
|
-
def payment_request_token
|
12
|
-
data[:paymentRequestToken]
|
13
|
-
end
|
14
|
-
|
15
|
-
def amount
|
16
|
-
decimal = BigDecimal.new(data[:amountInCents])
|
17
|
-
decimal /= 100.0
|
18
|
-
decimal
|
19
|
-
end
|
20
|
-
|
21
|
-
def currency
|
22
|
-
data[:currency]
|
23
|
-
end
|
24
|
-
|
25
|
-
def created_at
|
26
|
-
Time.parse(data[:created]) if data[:created]
|
27
|
-
end
|
28
|
-
|
29
|
-
def expired_at
|
30
|
-
Time.parse(data[:expired]) if data[:expired]
|
31
|
-
end
|
32
|
-
|
33
|
-
# see PaymentRequestStatus
|
34
|
-
def status
|
35
|
-
data[:status]
|
36
|
-
end
|
37
|
-
|
38
|
-
def expired?
|
39
|
-
status == Tikkie::Api::Types::PaymentRequestStatus::EXPIRED
|
40
|
-
end
|
41
|
-
|
42
|
-
def bank_account_yielded_too_fast?
|
43
|
-
data[:bankAccountYieldedTooFast]
|
44
|
-
end
|
45
|
-
|
46
|
-
def external_id
|
47
|
-
data[:externalId]
|
48
|
-
end
|
49
|
-
|
50
|
-
def payments
|
51
|
-
@payments ||= begin
|
52
|
-
payments = []
|
53
|
-
|
54
|
-
data[:payments].each do |data|
|
55
|
-
payments << Tikkie::Api::Responses::Payment.new(data)
|
56
|
-
end
|
57
|
-
|
58
|
-
payments
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Tikkie
|
4
|
-
module Api
|
5
|
-
module Responses
|
6
|
-
# Response when creating a payment request.
|
7
|
-
class PaymentRequestCreated < Base
|
8
|
-
def payment_request_url
|
9
|
-
data[:paymentRequestUrl]
|
10
|
-
end
|
11
|
-
|
12
|
-
def payment_request_token
|
13
|
-
data[:paymentRequestToken]
|
14
|
-
end
|
15
|
-
|
16
|
-
def external_id
|
17
|
-
data[:externalId]
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Tikkie
|
4
|
-
module Api
|
5
|
-
module Responses
|
6
|
-
# Response when requesting payment requests (list).
|
7
|
-
class PaymentRequests < Base
|
8
|
-
include Enumerable
|
9
|
-
include Tikkie::Api::Responses::Pagination
|
10
|
-
|
11
|
-
def initialize(response, options = {})
|
12
|
-
super(response)
|
13
|
-
|
14
|
-
@offset = options[:offset]
|
15
|
-
@limit = options[:limit]
|
16
|
-
@total_elements = data[:totalElements]
|
17
|
-
@elements = payment_requests.count
|
18
|
-
end
|
19
|
-
|
20
|
-
def each(&block)
|
21
|
-
payment_requests.each(&block)
|
22
|
-
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
def payment_requests
|
27
|
-
@payment_requests ||= begin
|
28
|
-
payment_requests = []
|
29
|
-
|
30
|
-
if data[:paymentRequests]
|
31
|
-
data[:paymentRequests].each do |payment_request|
|
32
|
-
payment_requests << Tikkie::Api::Responses::PaymentRequest.new(payment_request)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
payment_requests
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|