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.
Files changed (84) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +31 -7
  3. data/.travis.yml +8 -4
  4. data/Gemfile +3 -1
  5. data/Gemfile.lock +39 -33
  6. data/LICENSE.txt +1 -1
  7. data/README.md +211 -61
  8. data/lib/tikkie/api.rb +52 -25
  9. data/lib/tikkie/api/amount.rb +35 -0
  10. data/lib/tikkie/api/client.rb +16 -8
  11. data/lib/tikkie/api/clients/base.rb +16 -0
  12. data/lib/tikkie/api/clients/payment_requests.rb +25 -0
  13. data/lib/tikkie/api/clients/payment_requests_subscription.rb +20 -0
  14. data/lib/tikkie/api/clients/payments.rb +20 -0
  15. data/lib/tikkie/api/clients/refunds.rb +20 -0
  16. data/lib/tikkie/api/clients/sandbox_apps.rb +15 -0
  17. data/lib/tikkie/api/configuration.rb +8 -47
  18. data/lib/tikkie/api/exception.rb +28 -8
  19. data/lib/tikkie/api/request.rb +51 -27
  20. data/lib/tikkie/api/resources/base.rb +66 -0
  21. data/lib/tikkie/api/{responses → resources}/error.rb +11 -9
  22. data/lib/tikkie/api/resources/list.rb +52 -0
  23. data/lib/tikkie/api/resources/payment.rb +68 -0
  24. data/lib/tikkie/api/resources/payment_request.rb +97 -0
  25. data/lib/tikkie/api/resources/payment_requests.rb +40 -0
  26. data/lib/tikkie/api/resources/payment_requests_subscription.rb +24 -0
  27. data/lib/tikkie/api/resources/payments.rb +48 -0
  28. data/lib/tikkie/api/resources/refund.rb +71 -0
  29. data/lib/tikkie/api/resources/sandbox_app.rb +20 -0
  30. data/lib/tikkie/api/response.rb +64 -0
  31. data/lib/tikkie/api/v1/access_token.rb +21 -0
  32. data/lib/tikkie/api/v1/authentication.rb +67 -0
  33. data/lib/tikkie/api/v1/client.rb +26 -0
  34. data/lib/tikkie/api/v1/configuration.rb +64 -0
  35. data/lib/tikkie/api/v1/exception.rb +24 -0
  36. data/lib/tikkie/api/v1/request.rb +59 -0
  37. data/lib/tikkie/api/v1/requests/payment_requests.rb +59 -0
  38. data/lib/tikkie/api/v1/requests/platforms.rb +34 -0
  39. data/lib/tikkie/api/v1/requests/users.rb +33 -0
  40. data/lib/tikkie/api/v1/responses/bank_account.rb +24 -0
  41. data/lib/tikkie/api/v1/responses/base.rb +69 -0
  42. data/lib/tikkie/api/v1/responses/error.rb +36 -0
  43. data/lib/tikkie/api/v1/responses/pagination.rb +22 -0
  44. data/lib/tikkie/api/v1/responses/payment.rb +50 -0
  45. data/lib/tikkie/api/v1/responses/payment_request.rb +68 -0
  46. data/lib/tikkie/api/v1/responses/payment_request_created.rb +24 -0
  47. data/lib/tikkie/api/v1/responses/payment_requests.rb +44 -0
  48. data/lib/tikkie/api/v1/responses/platform.rb +46 -0
  49. data/lib/tikkie/api/v1/responses/platforms.rb +34 -0
  50. data/lib/tikkie/api/v1/responses/user.rb +43 -0
  51. data/lib/tikkie/api/v1/responses/users.rb +38 -0
  52. data/lib/tikkie/api/v1/types/payment_request_status.rb +17 -0
  53. data/lib/tikkie/api/v1/types/payment_status.rb +16 -0
  54. data/lib/tikkie/api/v1/types/platform_status.rb +14 -0
  55. data/lib/tikkie/api/v1/types/platform_usage.rb +14 -0
  56. data/lib/tikkie/api/v1/types/user_status.rb +14 -0
  57. data/lib/tikkie/api/version.rb +1 -1
  58. data/lib/tikkie/notification.rb +23 -0
  59. data/lib/tikkie/notifications/bundle_notification.rb +28 -0
  60. data/lib/tikkie/notifications/payment_notification.rb +32 -0
  61. data/lib/tikkie/notifications/refund_notification.rb +36 -0
  62. data/tikkie-api.gemspec +4 -3
  63. metadata +69 -44
  64. data/lib/tikkie/api/access_token.rb +0 -19
  65. data/lib/tikkie/api/authentication.rb +0 -60
  66. data/lib/tikkie/api/requests/payment_requests.rb +0 -56
  67. data/lib/tikkie/api/requests/platforms.rb +0 -32
  68. data/lib/tikkie/api/requests/users.rb +0 -31
  69. data/lib/tikkie/api/responses/bank_account.rb +0 -22
  70. data/lib/tikkie/api/responses/base.rb +0 -53
  71. data/lib/tikkie/api/responses/pagination.rb +0 -20
  72. data/lib/tikkie/api/responses/payment.rb +0 -48
  73. data/lib/tikkie/api/responses/payment_request.rb +0 -64
  74. data/lib/tikkie/api/responses/payment_request_created.rb +0 -22
  75. data/lib/tikkie/api/responses/payment_requests.rb +0 -42
  76. data/lib/tikkie/api/responses/platform.rb +0 -44
  77. data/lib/tikkie/api/responses/platforms.rb +0 -30
  78. data/lib/tikkie/api/responses/user.rb +0 -39
  79. data/lib/tikkie/api/responses/users.rb +0 -34
  80. data/lib/tikkie/api/types/payment_request_status.rb +0 -15
  81. data/lib/tikkie/api/types/payment_status.rb +0 -14
  82. data/lib/tikkie/api/types/platform_status.rb +0 -12
  83. data/lib/tikkie/api/types/platform_usage.rb +0 -12
  84. 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