mp_api 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 41b57c5bd90138e2152481283d9d873c550e4e019cf904d7ea4eb9332535cab6
4
- data.tar.gz: 9d48cc465911ca89738e30116bc7634b3430d4fc96b5404d5d812fb8a0cd0751
3
+ metadata.gz: c7b356595131871a92d83ed3c6b65dadc8e291b02c1a1ad4b53db37b60496ca7
4
+ data.tar.gz: 3a46534f5c479ccf7030b241923ef61d70c8d2348083df66b1f69b690fe47064
5
5
  SHA512:
6
- metadata.gz: 48911409a2221b723a972067988d02ebc7db00128f3863c445ef3ec171dd3f38812b25bf50f44a69e6b53ea57c93277df4d6e1326bd4f2fc9ef18cb0459eea1a
7
- data.tar.gz: c75af862f424527d5034f4feeca1a6526339e80864fcf2fa340e275c82c1478594f78ef284eba99cb4be804fc6582e2c2c717da2af1f0d57232b1f979833c26c
6
+ metadata.gz: e4730a189dc028ff8fb7ec793a579ab0c01ec8e3b2d3be7c930044d3c2a116783b2c8106d8376ed2eef8197f8febe1bca66f82d603d5cf206e0154c8406980ab
7
+ data.tar.gz: 0736ee512a1748cd78e44367b1fc349accaf3fe40e8d9dd1a8582f694b75553291c348ee3703d34c614d9b48b0f85fb02f168769d09316ad6c108cc63a7f325c
data/README.md CHANGED
@@ -1,35 +1,19 @@
1
- # MercadoPagoApi
2
-
3
- TODO: Delete this and the text below, and describe your gem
4
-
5
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/mercado_pago_api`. To experiment with that code, run `bin/console` for an interactive prompt.
1
+ # MpApi
6
2
 
7
3
  ## Installation
8
4
 
9
- TODO: Replace `UPDATE_WITH_YOUR_GEM_NAME_PRIOR_TO_RELEASE_TO_RUBYGEMS_ORG` with your gem name right after releasing it to RubyGems.org. Please do not do it earlier due to security reasons. Alternatively, replace this section with instructions to install your gem from git if you don't plan to release to RubyGems.org.
10
-
11
- Install the gem and add to the application's Gemfile by executing:
12
-
13
- $ bundle add UPDATE_WITH_YOUR_GEM_NAME_PRIOR_TO_RELEASE_TO_RUBYGEMS_ORG
14
-
15
- If bundler is not being used to manage dependencies, install the gem by executing:
16
-
17
- $ gem install UPDATE_WITH_YOUR_GEM_NAME_PRIOR_TO_RELEASE_TO_RUBYGEMS_ORG
18
-
19
- ## Usage
20
-
21
- TODO: Write usage instructions here
22
-
23
- ## Development
24
-
25
- After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
5
+ Add solidus_bling to your Gemfile:
26
6
 
27
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
7
+ ```ruby
8
+ gem 'mp_api'
9
+ ```
28
10
 
29
- ## Contributing
11
+ Bundle your dependencies and run the installation generator:
30
12
 
31
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/mercado_pago_api.
13
+ ```shell
14
+ bin/rails generate mp_api:install
15
+ ```
32
16
 
33
17
  ## License
34
18
 
35
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
19
+ Copyright (c) 2023 CaioGarcia1, released under the New BSD License.
data/lib/mp_api/client.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module MpApi
2
2
  class Client < Ac::Base
3
3
  BASE_URL = "https://api.mercadopago.com/v1/"
4
- MAX_RETRIES = 2
4
+ MAX_RETRIES = 1
5
5
  attr_reader :access_token
6
6
  def initialize(access_token=MpApi.configuration.access_token)
7
7
  @headers = {
@@ -12,48 +12,30 @@ module MpApi
12
12
  end
13
13
 
14
14
  def create_payment(body)
15
- response = post("/payments", body: body, headers: @headers) do |response|
16
- p response.json unless response.success?
17
- ![500, 429].include?(response.code) || response['id']
18
- end
19
- raise RequestError.new(response.json['message']) if ![200,201].include?(response.code)
20
- response.json
15
+ post("/payments", body: body, headers: @headers) { |response| validate_response(response, 'id')}
21
16
  end
22
17
 
23
18
  def get_payment(payment_id)
24
- response = get("/payments/#{payment_id}") do |response|
25
- p response.json unless response.success?
26
- ![500, 429].include?(response.code) || response['id']
27
- end
28
- raise RequestError.new(response.json['message']) if ![200,201].include?(response.code)
29
- response.json
19
+ get("/payments/#{payment_id}") { |response| validate_response(response, 'id')}
30
20
  end
31
21
 
32
22
  def create_token(card_token_data)
33
- response = post("/card_tokens", body: card_token_data, headers: @headers) do |response|
34
- p response.json unless response.success?
35
- ![500, 429].include?(response.code) || response['id']
36
- end
37
- raise RequestError.new(response.json['message']) if ![200,201].include?(response.code)
38
- response.json
23
+ post("/card_tokens", body: card_token_data, headers: @headers) { |response| validate_response(response, 'id')}
39
24
  end
40
25
 
41
26
  def search_payment_methods(query)
42
- response = get("/payment_methods/search", params: query) do |response|
43
- p response.json unless response.success?
44
- ![500, 429].include?(response.code) || response.json['results'][0]
45
- end
46
- raise RequestError.new(response.json['message']) if ![200,201].include?(response.code)
47
- response.json
27
+ get("/payment_methods/search", params: query) { |response| validate_response(response, ['results', 0])}
48
28
  end
49
29
 
50
30
  def get_payment_methods
51
- response = get("/payment_methods") do |response|
52
- p response.json unless response.success?
53
- ![500, 429].include?(response.code) || response['id']
54
- end
55
- raise RequestError.new(response.json['message']) if ![200,201].include?(response.code)
56
- response.json
31
+ get("/payment_methods") { |response| validate_response(response, 'id')}
32
+ end
33
+
34
+ private
35
+
36
+ def validate_response(response, required_response_key)
37
+ puts response.json unless response.success?
38
+ ![500, 429].include?(response.code) || response.json.dig(*required_response_key)
57
39
  end
58
40
 
59
41
  end
@@ -1,17 +1,8 @@
1
1
  module MpApi
2
2
  class Payment
3
-
4
- def self.find_by_id(payment_id)
5
- begin
6
- response = Client.new.get_payment(payment_id)
7
- rescue RuntimeError => e
8
- e.message == 'Too many retries' ? raise(TooManyRequestsError) : raise(e)
9
- end
10
- new(**build_hash(response))
11
- end
12
3
 
13
- attr_reader :status_detail, :three_ds_info_creq, :three_ds_info_external_resource_url, :three_d_secure_mode, :id, :description, :date_approved, :date_created, :money_release_date, :payer_email, :payer_identification_type, :payer_identification_number, :payment_method, :payment_type, :qr_code, :qr_code_base_64, :transaction_id, :ticket_url, :status, :amount, :token, :issuer_id, :installments, :statement_descriptor, :items
14
- def initialize(status_detail:nil, three_ds_info_creq:nil, three_ds_info_external_resource_url:nil, three_d_secure_mode:nil, id:nil, description:nil, date_approved:nil, date_created:nil, money_release_date:nil, payer_email:, payer_identification_type:, payer_identification_number:, payment_method:, payment_type:nil, qr_code:nil, qr_code_base_64:nil, transaction_id:nil, ticket_url:nil, status:nil, amount:, token:nil, issuer_id:nil, installments:nil, items:nil, statement_descriptor:nil)
4
+ attr_reader :status_detail, :three_ds_info_creq, :three_ds_info_external_resource_url, :three_d_secure_mode, :id, :description, :date_approved, :date_created, :money_release_date, :payer_email, :payer_identification_type, :payer_identification_number, :payment_method, :payment_type, :qr_code, :qr_code_base_64, :transaction_id, :ticket_url, :status, :amount, :token, :issuer_id, :installments, :statement_descriptor, :items, :errors
5
+ def initialize(status_detail:nil, three_ds_info_creq:nil, three_ds_info_external_resource_url:nil, three_d_secure_mode:nil, id:nil, description:nil, date_approved:nil, date_created:nil, money_release_date:nil, payer_email:, payer_identification_type:, payer_identification_number:, payment_method:, payment_type:nil, qr_code:nil, qr_code_base_64:nil, transaction_id:nil, ticket_url:nil, status:nil, amount:, token:nil, issuer_id:nil, installments:nil, items:nil, statement_descriptor:nil, errors:nil)
15
6
  @id = id
16
7
  @description = description
17
8
  @date_approved = date_approved
@@ -37,14 +28,7 @@ module MpApi
37
28
  @status_detail = status_detail
38
29
  @statement_descriptor = statement_descriptor
39
30
  @items = items
40
- # Array example:
41
- # {
42
- # id: "100002",
43
- # title: "Retrovisor Jeep",
44
- # picture_url: "https://http2.mlstatic.com/D_NQ_NP_2X_754724-MLB73109764910_122023-F.webp",
45
- # quantity: 4,
46
- # unit_price: 3
47
- # }
31
+ @errors = errors
48
32
  end
49
33
 
50
34
  def build_json
@@ -80,12 +64,13 @@ module MpApi
80
64
  end
81
65
 
82
66
  def create
83
- begin
84
- response = Client.new.create_payment(JSON.dump(build_json))
85
- rescue RuntimeError => e
86
- e.message == 'Too many retries' ? raise(TooManyRequestsError) : raise(e)
87
- end
88
- self.class.new(**self.class.build_hash(response))
67
+ response = Client.new.create_payment(JSON.dump(build_json))
68
+ self.class.new(**self.class.build_hash(response.json))
69
+ end
70
+
71
+ def self.find_by_id(payment_id)
72
+ response = Client.new.get_payment(payment_id)
73
+ new(**build_hash(response.json))
89
74
  end
90
75
 
91
76
  def self.build_hash json_response
@@ -108,9 +93,9 @@ module MpApi
108
93
  ticket_url: json_response.dig('point_of_interaction', 'transaction_data', 'ticket_url'),
109
94
  status: json_response.dig('status'),
110
95
  status_detail: json_response.dig('status_detail'),
111
- amount: json_response.dig('transaction_amount')
96
+ amount: json_response.dig('transaction_amount'),
97
+ errors: PaymentError.new(json_response: json_response).errors
112
98
  }
113
99
  end
114
-
115
100
  end
116
101
  end
@@ -0,0 +1,107 @@
1
+ module MpApi
2
+ class PaymentError
3
+
4
+ attr_reader :json_response
5
+ def initialize(json_response:)
6
+ @json_response = json_response
7
+ end
8
+
9
+ def errors
10
+ return nil unless json_response['error']
11
+ json_response['cause'].map {|cause| message_by_error_code(cause['code']) || cause['description']}
12
+ end
13
+
14
+ private
15
+ def message_by_error_code(code)
16
+ {
17
+ 1 => "Erro nos parâmetros.",
18
+ 3 => "O token deve ser de teste.",
19
+ 5 => "É necessário fornecer seu access_token para prosseguir.",
20
+ 23 => "Os seguintes parâmetros devem ter uma data válida e no formato (aaaa-MM-dd'T'HH:mm:ssz) date_of_expiration.",
21
+ 1000 => "Número de linhas excedeu os limites.",
22
+ 1001 => "O formato da data deve ser aaaa-MM-dd'T'HH:mm:ss.SSSZ.",
23
+ 2001 => "Já foi enviada a mesma solicitação no último minuto.",
24
+ 2002 => "Cliente não encontrado.",
25
+ 2004 => "Falha ao enviar POST para a API de Transações do Gateway.",
26
+ 2006 => "Token do cartão não encontrado.",
27
+ 2007 => "Falha na conexão com a API de Token do Cartão.",
28
+ 2009 => "O emissor do token do cartão não pode ser nulo.",
29
+ 2011 => "Id do método de pagamento inválido.",
30
+ 2034 => "Erro estranho do mercado pago de usuarios envolvidos, normalmente causado pelo email do pagador.",
31
+ 2060 => "O cliente não pode ser igual ao coletor.",
32
+ 2062 => "Token do cartão inválido.",
33
+ 2067 => "Número de identificação do usuário inválido.",
34
+ 2072 => "Valor inválido para transaction_amount.",
35
+ 2077 => "Captura diferida não suportada.",
36
+ 2123 => "Operadores inválidos envolvidos.",
37
+ 2131 => "Não é possível inferir o Método de Pagamento.",
38
+ 3000 => "Você deve fornecer o nome do titular do cartão com seus dados do cartão.",
39
+ 3001 => "Você deve fornecer o id do emissor do cartão com seus dados do cartão.",
40
+ 3003 => "Id do token do cartão inválido.",
41
+ 3004 => "Parâmetro site_id inválido.",
42
+ 3005 => "Ação inválida, o recurso está em um estado que não permite esta operação. Para mais informações, consulte o estado que o recurso possui.",
43
+ 3006 => "Parâmetro id do token do cartão inválido.",
44
+ 3007 => "O parâmetro client_id não pode ser nulo ou vazio.",
45
+ 3008 => "Token do Cartão não encontrado.",
46
+ 3009 => "client_id não autorizado.",
47
+ 3010 => "Cartão não encontrado na lista branca.",
48
+ 3011 => "Método de pagamento não encontrado.",
49
+ 3012 => "Parâmetro comprimento do código de segurança inválido.",
50
+ 3013 => "O parâmetro código de segurança é um campo obrigatório e não pode ser nulo ou vazio.",
51
+ 3014 => "Parâmetro método de pagamento inválido.",
52
+ 3015 => "Parâmetro comprimento do número do cartão inválido.",
53
+ 3016 => "Parâmetro número do cartão inválido.",
54
+ 3017 => "O parâmetro id do número do cartão não pode ser nulo ou vazio.",
55
+ 3018 => "O parâmetro mês de vencimento não pode ser nulo ou vazio.",
56
+ 3019 => "O parâmetro ano de vencimento não pode ser nulo ou vazio.",
57
+ 3020 => "O parâmetro nome do titular do cartão não pode ser nulo ou vazio.",
58
+ 3021 => "O parâmetro número do documento do titular do cartão não pode ser nulo ou vazio.",
59
+ 3022 => "O parâmetro tipo de documento do titular do cartão não pode ser nulo ou vazio.",
60
+ 3023 => "O parâmetro subtipo de documento do titular do cartão não pode ser nulo ou vazio.",
61
+ 3024 => "Ação inválida - reembolso parcial não suportado para esta transação.",
62
+ 3025 => "Código de autenticação inválido.",
63
+ 3026 => "Id do cartão inválido para este id do método de pagamento.",
64
+ 3027 => "Id do tipo de pagamento inválido.",
65
+ 3028 => "Id do método de pagamento inválido.",
66
+ 3029 => "Mês de vencimento do cartão inválido.",
67
+ 3030 => "Ano de vencimento do cartão inválido.",
68
+ 3031 => "Secure_code_id não pode ser nulo.",
69
+ 3032 => "Comprimento inválido do código de segurança 3033 3034 - Validação do número do cartão inválida.",
70
+ 4000 => "Atributo do cartão não pode ser nulo.",
71
+ 4001 => "Atributo do id do método de pagamento não pode ser nulo.",
72
+ 4002 => "Atributo do valor da transação não pode ser nulo.",
73
+ 4003 => "Atributo do valor da transação deve ser numérico.",
74
+ 4004 => "Atributo de parcelas não pode ser nulo.",
75
+ 4005 => "Atributo de parcelas deve ser numérico.",
76
+ 4006 => "Atributo do pagador está malformado.",
77
+ 4007 => "Atributo do site_id não pode ser nulo.",
78
+ 4012 => "Atributo do id do pagador não pode ser nulo.",
79
+ 4013 => "Atributo do tipo de pagador não pode ser nulo.",
80
+ 4015 => "Atributo do id de referência do método de pagamento não pode ser nulo.",
81
+ 4016 => "Atributo do id de referência do método de pagamento deve ser numérico.",
82
+ 4017 => "Atributo do status não pode ser nulo.",
83
+ 4018 => "Atributo do id do pagamento não pode ser nulo.",
84
+ 4019 => "Atributo do id do pagamento deve ser numérico.",
85
+ 4020 => "Atributo notificaction_url deve ser uma URL válida.",
86
+ 4021 => "Atributo notificaction_url deve ter menos de 500 caracteres.",
87
+ 4022 => "Atributo metadata deve ser um JSON válido.",
88
+ 4023 => "Atributo do valor da transação não pode ser nulo.",
89
+ 4024 => "Atributo do valor da transação deve ser numérico.",
90
+ 4025 => "Id do reembolso não pode ser nulo.",
91
+ 4026 => "Valor do cupom inválido.",
92
+ 4027 => "Atributo do id da campanha deve ser numérico.",
93
+ 4028 => "Atributo do valor do cupom deve ser numérico.",
94
+ 4029 => "Tipo de pagador inválido.",
95
+ 4037 => "Valor da transação inválido.",
96
+ 4038 => "A taxa de aplicação não pode ser maior que o valor da transação.",
97
+ 4039 => "A taxa de aplicação não pode ser um valor negativo.",
98
+ 4049 => "Atributo do valor da transação deve ser positivo.",
99
+ 4050 => "O email do pagador deve ser um email válido.",
100
+ 4051 => "O email do pagador deve ter menos de 254 caracteres.",
101
+ 6033 => "Usuário indisponível.",
102
+ 7523 => "Data de vencimento inválida."
103
+ }[code]
104
+ end
105
+
106
+ end
107
+ end
@@ -1,14 +1,18 @@
1
1
  module MpApi
2
2
 
3
3
  class PaymentMethod
4
-
4
+
5
+ attr_reader :payment_method_id, :issuer_id, :installments, :errors
6
+ def initialize(payment_method_id: , issuer_id: , installments:, errors:nil)
7
+ @payment_method_id = payment_method_id
8
+ @issuer_id = issuer_id
9
+ @installments = installments
10
+ @errors = errors
11
+ end
12
+
5
13
  def self.find_by_first_six_digits(first_six_digits, credit: true)
6
- begin
7
- response = Client.new.search_payment_methods(build_query(first_six_digits))
8
- rescue RuntimeError => e
9
- e.message == 'Too many retries' ? raise(TooManyRequestsError) : raise(e)
10
- end
11
- new(**build_hash(response, credit))
14
+ response = Client.new.search_payment_methods(build_query(first_six_digits))
15
+ new(**build_hash(response.json, credit))
12
16
  end
13
17
 
14
18
  def self.build_query(first_six_digits)
@@ -21,21 +25,15 @@ module MpApi
21
25
 
22
26
  def self.build_hash(response, credit)
23
27
  payment_type_id = credit ? 'credit_card' : 'debit_card'
24
- payment_method = response.dig('results').find {|pm| pm['payment_type_id'] == payment_type_id}
28
+ payment_method = response.dig('results')&.find {|pm| pm['payment_type_id'] == payment_type_id}
25
29
  {
26
- payment_method_id: payment_method.dig('id'),
27
- issuer_id: payment_method.dig('issuer', 'id'),
28
- installments: payment_method.dig('payer_costs')
30
+ payment_method_id: payment_method&.dig('id'),
31
+ issuer_id: payment_method&.dig('issuer', 'id'),
32
+ installments: payment_method&.dig('payer_costs'),
33
+ errors: response.dig('message')
29
34
  }
30
35
  end
31
36
 
32
- attr_reader :payment_method_id, :issuer_id, :installments
33
- def initialize(payment_method_id: , issuer_id: , installments:)
34
- @payment_method_id = payment_method_id
35
- @issuer_id = issuer_id
36
- @installments = installments
37
- end
38
-
39
37
  end
40
38
 
41
39
  end
data/lib/mp_api/token.rb CHANGED
@@ -2,14 +2,15 @@ module MpApi
2
2
 
3
3
  class Token
4
4
 
5
- attr_reader :card_number, :expiration_year, :expiration_month, :security_code, :cardholder_name, :id
6
- def initialize(card_number:nil, expiration_year:nil, expiration_month:nil, security_code:nil, cardholder_name:nil, id:nil)
5
+ attr_reader :card_number, :expiration_year, :expiration_month, :security_code, :cardholder_name, :id, :errors
6
+ def initialize(card_number:, expiration_year:, expiration_month:, security_code:, cardholder_name:, id:nil, errors:nil)
7
7
  @card_number = card_number
8
8
  @expiration_year = expiration_year
9
9
  @expiration_month = expiration_month
10
10
  @security_code = security_code
11
11
  @cardholder_name = cardholder_name
12
12
  @id = id
13
+ @errors = errors
13
14
  end
14
15
 
15
16
  def build_json
@@ -25,12 +26,8 @@ module MpApi
25
26
  end
26
27
 
27
28
  def create
28
- begin
29
- response = Client.new.create_token(JSON.dump(build_json))
30
- self.class.new(**self.class.build_hash(response))
31
- rescue RuntimeError => e
32
- e.message == 'Too many retries' ? raise(TooManyRequestsError) : raise(e)
33
- end
29
+ response = Client.new.create_token(JSON.dump(build_json))
30
+ self.class.new(**self.class.build_hash(response.json))
34
31
  end
35
32
 
36
33
  def self.build_hash(response)
@@ -38,25 +35,12 @@ module MpApi
38
35
  id: response['id'],
39
36
  expiration_year: response['expiration_year'],
40
37
  expiration_month: response['expiration_month'],
41
- cardholder_name: response['cardholder']['name']
38
+ cardholder_name: response.dig('cardholder', 'name'),
39
+ card_number: response['card_number'],
40
+ security_code: response['security_code'],
41
+ errors: response['error']
42
42
  }
43
43
  end
44
44
 
45
45
  end
46
46
  end
47
-
48
- # {"id"=>"78558e7bbb73b8939df27269fb6dcbf5",
49
- # "first_six_digits"=>"503143",
50
- # "expiration_month"=>11,
51
- # "expiration_year"=>2025,
52
- # "last_four_digits"=>"6351",
53
- # "cardholder"=>{"identification"=>{}, "name"=>"APRO"},
54
- # "status"=>"active",
55
- # "date_created"=>"2023-11-27T09:42:13.887-04:00",
56
- # "date_last_updated"=>"2023-11-27T09:42:13.887-04:00",
57
- # "date_due"=>"2023-12-05T09:42:13.887-04:00",
58
- # "luhn_validation"=>true,
59
- # "live_mode"=>false,
60
- # "require_esc"=>false,
61
- # "card_number_length"=>16,
62
- # "security_code_length"=>3}
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MpApi
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
data/lib/mp_api.rb CHANGED
@@ -3,17 +3,12 @@
3
3
  require "ac"
4
4
  require_relative "mp_api/client"
5
5
  require_relative "mp_api/payment"
6
+ require_relative "mp_api/payment_error"
6
7
  require_relative "mp_api/token"
7
8
  require_relative "mp_api/payment_method"
8
9
  require_relative "mp_api/version"
9
10
  module MpApi
10
11
  class Error < StandardError; end
11
-
12
- class TooManyRequestsError < StandardError
13
- def message
14
- "Too many requests"
15
- end
16
- end
17
12
 
18
13
  class RequestError < StandardError
19
14
  def initialize(message="Request error")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mp_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - caio
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-21 00:00:00.000000000 Z
11
+ date: 2024-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ac
@@ -39,6 +39,7 @@ files:
39
39
  - lib/mp_api.rb
40
40
  - lib/mp_api/client.rb
41
41
  - lib/mp_api/payment.rb
42
+ - lib/mp_api/payment_error.rb
42
43
  - lib/mp_api/payment_method.rb
43
44
  - lib/mp_api/token.rb
44
45
  - lib/mp_api/version.rb