iyzi 0.0.1

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 (42) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +4 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +84 -0
  9. data/Rakefile +6 -0
  10. data/bin/console +15 -0
  11. data/bin/setup +8 -0
  12. data/examples.md +286 -0
  13. data/iyzi.gemspec +32 -0
  14. data/lib/iyzi.rb +52 -0
  15. data/lib/iyzi/api_error.rb +7 -0
  16. data/lib/iyzi/configuration.rb +38 -0
  17. data/lib/iyzi/endpoints.rb +25 -0
  18. data/lib/iyzi/pki_builder.rb +88 -0
  19. data/lib/iyzi/pki_builders/address.rb +17 -0
  20. data/lib/iyzi/pki_builders/basket_item.rb +25 -0
  21. data/lib/iyzi/pki_builders/basket_items.rb +17 -0
  22. data/lib/iyzi/pki_builders/bin_control.rb +15 -0
  23. data/lib/iyzi/pki_builders/buyer.rb +30 -0
  24. data/lib/iyzi/pki_builders/card_storage.rb +23 -0
  25. data/lib/iyzi/pki_builders/checkout_form.rb +36 -0
  26. data/lib/iyzi/pki_builders/checkout_form_auth.rb +15 -0
  27. data/lib/iyzi/pki_builders/payment_auth.rb +36 -0
  28. data/lib/iyzi/pki_builders/payment_card.rb +23 -0
  29. data/lib/iyzi/pki_builders/store_card.rb +19 -0
  30. data/lib/iyzi/pki_builders/sub_merchant.rb +63 -0
  31. data/lib/iyzi/request.rb +88 -0
  32. data/lib/iyzi/requests/api_test.rb +9 -0
  33. data/lib/iyzi/requests/bin_control.rb +13 -0
  34. data/lib/iyzi/requests/card_storage.rb +30 -0
  35. data/lib/iyzi/requests/checkout_form.rb +13 -0
  36. data/lib/iyzi/requests/checkout_form_auth.rb +13 -0
  37. data/lib/iyzi/requests/payment_auth.rb +13 -0
  38. data/lib/iyzi/requests/sub_merchant.rb +30 -0
  39. data/lib/iyzi/resources.rb +35 -0
  40. data/lib/iyzi/utils.rb +37 -0
  41. data/lib/iyzi/version.rb +3 -0
  42. metadata +210 -0
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'iyzi/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "iyzi"
8
+ spec.version = Iyzi::VERSION
9
+ spec.authors = ["Demirhan Aydin"]
10
+ spec.email = ["demirhanaydin@gmail.com"]
11
+
12
+ spec.summary = %q{Iyzico ruby client}
13
+ spec.description = %q{Iyzico ruby client for api v1.0}
14
+ spec.homepage = "https://github.com/parasutcom/iyzi"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_dependency "faraday", '~> 0.9.2'
23
+ spec.add_dependency "faraday_middleware", '~> 0.10.0'
24
+ spec.add_dependency "activesupport", '~> 4.2'
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.11"
27
+ spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "rspec", "~> 3.0"
29
+ spec.add_development_dependency "awesome_print", '~> 1.6'
30
+ spec.add_development_dependency "webmock", "~> 1.2"
31
+ spec.add_development_dependency "vcr", "~> 3.0"
32
+ end
@@ -0,0 +1,52 @@
1
+ require 'iyzi/version'
2
+ require 'iyzi/configuration'
3
+ require 'iyzi/resources'
4
+ require 'iyzi/endpoints'
5
+ require 'iyzi/api_error'
6
+ require 'iyzi/utils'
7
+
8
+ # PKI Builders
9
+ require 'iyzi/pki_builder'
10
+ require 'iyzi/pki_builders/basket_item'
11
+ require 'iyzi/pki_builders/basket_items'
12
+ require 'iyzi/pki_builders/address'
13
+ require 'iyzi/pki_builders/buyer'
14
+ require 'iyzi/pki_builders/checkout_form'
15
+ require 'iyzi/pki_builders/checkout_form_auth'
16
+ require 'iyzi/pki_builders/sub_merchant'
17
+ require 'iyzi/pki_builders/card_storage'
18
+ require 'iyzi/pki_builders/payment_card'
19
+ require 'iyzi/pki_builders/store_card'
20
+ require 'iyzi/pki_builders/payment_auth'
21
+ require 'iyzi/pki_builders/bin_control'
22
+
23
+ # Requests
24
+ require 'iyzi/request'
25
+ require 'iyzi/requests/api_test'
26
+ require 'iyzi/requests/checkout_form'
27
+ require 'iyzi/requests/checkout_form_auth'
28
+ require 'iyzi/requests/sub_merchant'
29
+ require 'iyzi/requests/card_storage'
30
+ require 'iyzi/requests/payment_auth'
31
+ require 'iyzi/requests/bin_control'
32
+
33
+ # Misc
34
+ require 'active_support/all'
35
+
36
+ module Iyzi
37
+ extend Resources
38
+
39
+ class << self
40
+ def configuration
41
+ @configuration ||= Configuration.new
42
+ end
43
+
44
+ def reset
45
+ @configuration = Configuration.new
46
+ end
47
+
48
+ def configure
49
+ yield(configuration)
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,7 @@
1
+ module Iyzi
2
+ class ApiError < StandardError
3
+ def initialize(message)
4
+ super message
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,38 @@
1
+ module Iyzi
2
+ class Configuration
3
+ BASE_URL = 'https://api.iyzipay.com/'.freeze
4
+ REQUIRED_CONFIG = %i(base_url api_key secret)
5
+ attr_accessor :base_url, :api_key, :secret
6
+
7
+ def initialize(options = {})
8
+ @base_url = options[:base_url] || BASE_URL
9
+ @api_key = options[:api_key]
10
+ @secret = options[:secret]
11
+ end
12
+
13
+ def valid?
14
+ !missing_configs.present?
15
+ end
16
+
17
+ def validate
18
+ return if valid?
19
+ fail "Missing configuration keys: #{missing_configs.collect(&:to_s).join(', ')}"
20
+ end
21
+
22
+ def missing_configs
23
+ REQUIRED_CONFIG - defined_params.keys.collect(&:to_sym)
24
+ end
25
+
26
+ def defined_params
27
+ to_h.select { |k, v| v.present? }
28
+ end
29
+
30
+ def to_h
31
+ {
32
+ base_url: base_url,
33
+ api_key: api_key,
34
+ secret: secret
35
+ }
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,25 @@
1
+ module Iyzi
2
+ module Endpoints
3
+ API_TEST = '/payment/test'.freeze
4
+ BIN_CONTROL = '/payment/bin/check'.freeze
5
+ CHECKOUT_FORM_INITIALIZE = '/payment/iyzipos/checkoutform/initialize/ecom'.freeze
6
+ CHECKOUT_FORM_AUTH = '/payment/iyzipos/checkoutform/auth/ecom/detail'.freeze
7
+ SUB_MERCHANT_CREATE = '/onboarding/submerchant'.freeze
8
+ SUB_MERCHANT_UPDATE = '/onboarding/submerchant'.freeze
9
+ SUB_MERCHANT_DETAIL = '/onboarding/submerchant/detail'.freeze
10
+
11
+ # CARD STORAGE
12
+ CARD_STORAGE_ADD = '/cardstorage/card'.freeze
13
+ CARD_STORAGE_DELETE = '/cardstorage/card'.freeze
14
+ CARD_STORAGE_LIST = '/cardstorage/cards'.freeze
15
+
16
+ # PAYMENT AUTH
17
+ PAYMENT_AUTH_CREATE = '/payment/iyzipos/auth/ecom'.freeze
18
+
19
+ # HTTP VERBS
20
+ HTTP_POST = 'post'.freeze
21
+ HTTP_GET = 'get'.freeze
22
+ HTTP_PUT = 'put'.freeze
23
+ HTTP_DELETE = 'delete'.freeze
24
+ end
25
+ end
@@ -0,0 +1,88 @@
1
+ module Iyzi
2
+ class PkiBuilder
3
+ DEFAULT_ADD_METHOD = 'add'
4
+
5
+ attr_accessor :params, :ordered_keys
6
+
7
+ def initialize(values = {}, ordered_keys = nil, type_cast = {})
8
+ @params = {}
9
+ assign_params(values, type_cast)
10
+ @ordered_keys = ordered_keys
11
+ end
12
+
13
+ def request_string
14
+ str = prepare_request_string
15
+ "[#{str}]" unless str.empty?
16
+ end
17
+
18
+ def prepare_request_string
19
+ ordered_params.join(',')
20
+ end
21
+
22
+ def ordered_params
23
+ orderer.map do |key|
24
+ convert_str(key, params[key]) if params[key].present?
25
+ end.reject(&:nil?)
26
+ end
27
+
28
+ def add_price(key, value)
29
+ add(key, value.to_f.round(2)) if value.to_f != 0
30
+ end
31
+
32
+ def add_array(key, value)
33
+ add(key, "[#{value.join(', ')}]") if value.present?
34
+ end
35
+
36
+ def add_date(key, value)
37
+ add(key, parse_date(value).strftime('%Y-%m-%d %H:%M:%S')) if value.present?
38
+ end
39
+
40
+ def add_buyer(key, value)
41
+ add(key, PkiBuilders::Buyer.new(value).request_string)
42
+ end
43
+
44
+ def add_address(key, value)
45
+ add(key, PkiBuilders::Address.new(value).request_string)
46
+ end
47
+
48
+ def add_basket_items(key, value)
49
+ add_array(key, PkiBuilders::BasketItems.new(value).request_array)
50
+ end
51
+
52
+ def add_payment_card(key, value)
53
+ add(key, PkiBuilders::PaymentCard.new(value).request_string)
54
+ end
55
+
56
+ def add_store_card(key, value)
57
+ add(key, PkiBuilders::StoreCard.new(value).request_string)
58
+ end
59
+
60
+ def add(key, value)
61
+ params[key] = value.to_s unless value.to_s.empty?
62
+ end
63
+
64
+ def convert_str(key, value)
65
+ "#{key}=#{value}"
66
+ end
67
+
68
+ def parse_date(value)
69
+ value.is_a?(String) ? DateTime.parse(value) : value
70
+ end
71
+
72
+ private
73
+
74
+ def orderer
75
+ ordered_keys || params.keys
76
+ end
77
+
78
+ def assign_params(values, type_cast)
79
+ values.each_pair do |key, value|
80
+ send(adder(type_cast[key.to_sym]), key, value)
81
+ end
82
+ end
83
+
84
+ def adder(add_method)
85
+ add_method || DEFAULT_ADD_METHOD
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,17 @@
1
+ module Iyzi
2
+ module PkiBuilders
3
+ class Address < PkiBuilder
4
+ ATTRIBUTES_ORDER = %w{
5
+ address
6
+ zipCode
7
+ contactName
8
+ city
9
+ country
10
+ }.freeze
11
+
12
+ def initialize(values = {})
13
+ super(values, ATTRIBUTES_ORDER)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ module Iyzi
2
+ module PkiBuilders
3
+ class BasketItem < PkiBuilder
4
+ ATTRIBUTES_ORDER = %w{
5
+ id
6
+ price
7
+ name
8
+ category1
9
+ category2
10
+ itemType
11
+ subMerchantKey
12
+ subMerchantPrice
13
+ }.freeze
14
+
15
+ TYPE_CAST = {
16
+ price: 'add_price',
17
+ subMerchantPrice: 'add_price'
18
+ }.freeze
19
+
20
+ def initialize(values = {})
21
+ super(values, ATTRIBUTES_ORDER, TYPE_CAST)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,17 @@
1
+ module Iyzi
2
+ module PkiBuilders
3
+ class BasketItems
4
+ attr_reader :items
5
+
6
+ def initialize(basket_items = [])
7
+ @items = basket_items
8
+ end
9
+
10
+ def request_array
11
+ (items || []).collect do |item|
12
+ BasketItem.new(item).request_string
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ module Iyzi
2
+ module PkiBuilders
3
+ class BinControl < PkiBuilder
4
+ ATTRIBUTES_ORDER = %w{
5
+ locale
6
+ conversationId
7
+ binNumber
8
+ }
9
+
10
+ def initialize(values = {})
11
+ super(values, ATTRIBUTES_ORDER)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,30 @@
1
+ module Iyzi
2
+ module PkiBuilders
3
+ class Buyer < PkiBuilder
4
+ ATTRIBUTES_ORDER = %w{
5
+ id
6
+ name
7
+ surname
8
+ identityNumber
9
+ email
10
+ gsmNumber
11
+ registrationDate
12
+ lastLoginDate
13
+ registrationAddress
14
+ city
15
+ country
16
+ zipCode
17
+ ip
18
+ }.freeze
19
+
20
+ TYPE_CAST = {
21
+ registrationDate: 'add_date',
22
+ lastLoginDate: 'add_date'
23
+ }.freeze
24
+
25
+ def initialize(values = {})
26
+ super(values, ATTRIBUTES_ORDER, TYPE_CAST)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,23 @@
1
+ module Iyzi
2
+ module PkiBuilders
3
+ class CardStorage < PkiBuilder
4
+ ATTRIBUTES_ORDER = %w{
5
+ locale
6
+ conversationId
7
+ externalId
8
+ email
9
+ cardUserKey
10
+ cardToken
11
+ card
12
+ }.freeze
13
+
14
+ TYPE_CAST = {
15
+ card: 'add_store_card'
16
+ }.freeze
17
+
18
+ def initialize(values = {})
19
+ super(values, ATTRIBUTES_ORDER, TYPE_CAST)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,36 @@
1
+ module Iyzi
2
+ module PkiBuilders
3
+ class CheckoutForm < PkiBuilder
4
+ ATTRIBUTES_ORDER = %w{
5
+ locale
6
+ conversationId
7
+ price
8
+ basketId
9
+ paymentGroup
10
+ buyer
11
+ shippingAddress
12
+ billingAddress
13
+ basketItems
14
+ callbackUrl
15
+ paymentSource
16
+ posOrderId
17
+ paidPrice
18
+ forceThreeDS
19
+ cardUserKey
20
+ }.freeze
21
+
22
+ TYPE_CAST = {
23
+ price: 'add_price',
24
+ buyer: 'add_buyer',
25
+ shippingAddress: 'add_address',
26
+ billingAddress: 'add_address',
27
+ basketItems: 'add_basket_items',
28
+ paidPrice: 'add_price'
29
+ }.freeze
30
+
31
+ def initialize(values = {})
32
+ super(values, ATTRIBUTES_ORDER, TYPE_CAST)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,15 @@
1
+ module Iyzi
2
+ module PkiBuilders
3
+ class CheckoutFormAuth < PkiBuilder
4
+ ATTRIBUTES_ORDER = %w{
5
+ locale
6
+ conversationId
7
+ token
8
+ }.freeze
9
+
10
+ def initialize(values = {})
11
+ super(values, ATTRIBUTES_ORDER)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,36 @@
1
+ module Iyzi
2
+ module PkiBuilders
3
+ class PaymentAuth < PkiBuilder
4
+ ATTRIBUTES_ORDER = %w{
5
+ locale
6
+ conversationId
7
+ price
8
+ paidPrice
9
+ installment
10
+ paymentChannel
11
+ basketId
12
+ paymentGroup
13
+ paymentCard
14
+ buyer
15
+ shippingAddress
16
+ billingAddress
17
+ basketItems
18
+ paymentSource
19
+ }.freeze
20
+
21
+ TYPE_CAST = {
22
+ price: 'add_price',
23
+ paidPrice: 'add_price',
24
+ paymentCard: 'add_payment_card',
25
+ buyer: 'add_buyer',
26
+ shippingAddress: 'add_address',
27
+ billingAddress: 'add_address',
28
+ basketItems: 'add_basket_items'
29
+ }.freeze
30
+
31
+ def initialize(values = {})
32
+ super(values, ATTRIBUTES_ORDER, TYPE_CAST)
33
+ end
34
+ end
35
+ end
36
+ end