solidus_mp_dois 1.2.1 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 270a496690a53091010e01305e437ee0e63a2f458691bb1fd14b8e2dc99b9268
4
- data.tar.gz: 0ef233a65d5fd6d4546255d412e62c8059e3807e5abe9966ab4030e79ffc7b08
3
+ metadata.gz: 178d8a185c0cafe8fa3256b2d1d1af0f3a0118bf5bf1b87e8e3af5cbe19a2954
4
+ data.tar.gz: c2b7f34d1dd4fd768d9cc3d2efdbb4497316f81378c1eb381d322ce1ee4d4c2a
5
5
  SHA512:
6
- metadata.gz: 7a75820fed304f3504fe7a42575d6e3b231aa90403f4ffcd4b166dbca1981903bb48a4e691da28d24d1c743e396cc159fb84c1dd02550a651ecf58dab92a3381
7
- data.tar.gz: d110949556d293f91ae421771abedeaef5802f083b93dfdba270dd38269e224de156d2c840bb2d17ece67987e3d3b1161e005d40eb1d48c5b31cee8d4dc50b1d
6
+ metadata.gz: 7e90c59e19923a322ad0cc606a7eb4392bde64ba92b4696d3bd2090069222bf7f3ef38ae32f63b36c49da770c1135393d957304198a2b8172848915de7630f36
7
+ data.tar.gz: 4221ea9ecf6f4035a09e685fd6b3b0398803907bd804ba5eedccbeba2d4e02829f8c558ad176d590e1634232d759912336da8da18990c20c9103755306655313
@@ -1,5 +1,10 @@
1
1
  module SolidusMpDois
2
2
  class Card < ApplicationRecord
3
3
  belongs_to :customer
4
+
5
+ def delete_from_api(access_token)
6
+ request = Typhoeus.delete("https://api.mercadopago.com/v1/customers/#{customer.external_id}/cards/#{external_id}", headers: { "Authorization" => "Bearer #{access_token}", "Content-Type" => "application/json" })
7
+ request.success?
8
+ end
4
9
  end
5
10
  end
@@ -1,6 +1,6 @@
1
1
  module SolidusMpDois
2
2
  class Customer < ApplicationRecord
3
3
  has_many :cards
4
- belongs_to :spree_user, class_name: "Spree::User"
4
+ # Removi a associação com modelo de usuarios pois atualmente algumas lojas usam modelos diferentes (User e Spree::User)
5
5
  end
6
6
  end
@@ -31,7 +31,7 @@ module SolidusMpDois
31
31
 
32
32
  def create_payment order, source_params
33
33
  customer = find_or_create_customer(order, source_params)
34
- save_credit_card(source_params[:token], customer) if customer
34
+ save_credit_card(source_params[:token], customer) if customer && source_params[:saved_card] == "false" # Se o cartão usado ja for um cartão salvo, não é necessario executar save_credit_card
35
35
 
36
36
  payment = order.payments.new(amount: order.total, payment_method: self)
37
37
  payment.source = init_source(order, source_params, customer)
@@ -91,10 +91,15 @@ module SolidusMpDois
91
91
  end
92
92
 
93
93
  def find_or_create_customer(order, source_params)
94
- return unless order.user
95
- customer = SolidusMpDois::Customer.find_by(spree_user_id: order.user.id)
94
+ order_user = order.try(:store_user) || order&.user # Para suportar lojas que usam Spree::User e User
95
+ return unless order_user
96
+
97
+ customer = SolidusMpDois::Customer.find_by(spree_user_id: order_user.id)
96
98
  if customer.blank?
97
- mp_customer = create_mp_customer(order, source_params)
99
+ mp_customer = create_mp_customer(order, source_params, order_user)
100
+ if mp_customer.error_detail&.dig(0, "code") == "101" # Não achou no banco de dados mas está criado na API
101
+ mp_customer = find_mp_customer(order_user)
102
+ end
98
103
  if mp_customer.error.blank?
99
104
  customer = SolidusMpDois::Customer.create(
100
105
  external_id: mp_customer.external_id,
@@ -102,23 +107,34 @@ module SolidusMpDois
102
107
  first_name: mp_customer.first_name,
103
108
  identification_type: mp_customer.identification_type,
104
109
  tax_id: mp_customer.identification_number,
105
- spree_user_id: order.user.id
110
+ spree_user_id: order_user.id
106
111
  )
107
112
  end
108
113
  end
109
114
  customer
110
115
  end
111
116
 
112
- def create_mp_customer(order, source_params)
117
+ def create_mp_customer(order, source_params, user)
113
118
  MpApi.configuration.access_token = preferences[:access_token]
119
+ email = user.try(:email) || user.try(:email_address)
114
120
  MpApi::Customer.new(
115
- email: order.email,
121
+ email: email,
116
122
  first_name: order.ship_address.name,
117
123
  identification_type: source_params[:payer_identification_type],
118
124
  identification_number: source_params[:tax_id]
119
125
  ).create
120
126
  end
121
127
 
128
+ # A versão da MpApi nessa gem é limitada ("< 1.3.0") então não posso atualizar a mp_api.
129
+ # Por conta disso, precisei definir esse metodo aqui
130
+ def find_mp_customer(user)
131
+ email = user.try(:email) || user.try(:email_address)
132
+ search_req = Typhoeus.get("https://api.mercadopago.com/v1/customers/search?email=#{email}", headers: { "Authorization" => "Bearer #{preferences[:access_token]}" })
133
+ search_response = JSON.parse(search_req.body)
134
+ customer_json = search_response["results"].find { |r| r.dig("email") == email }
135
+ MpApi::Customer.new(**MpApi::Customer.build_hash(customer_json))
136
+ end
137
+
122
138
  def save_credit_card(card_token, customer)
123
139
  return if customer.nil?
124
140
  MpApi.configuration.access_token = preferences[:access_token]
@@ -0,0 +1,6 @@
1
+ class RemoveSolidusMpDoisCustomerForeignKey < ActiveRecord::Migration[8.0]
2
+ def change
3
+ # Removi a foreign key com a tabela spree_users pois atualmente algumas lojas usam modelos diferentes (User e Spree::User)
4
+ remove_foreign_key :solidus_mp_dois_customers, :spree_users
5
+ end
6
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solidus_mp_dois
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todas Essas Coisas
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-07-03 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: solidus_brazilian_adaptations
@@ -63,6 +63,7 @@ files:
63
63
  - db/migrate/20241125201926_create_solidus_mp_dois_cards.rb
64
64
  - db/migrate/20241209174725_create_solidus_mp_dois_pix_sources.rb
65
65
  - db/migrate/20250214170355_add_internal_details_to_solidus_mp_dois_credit_card_sources.rb
66
+ - db/migrate/20250722183651_remove_solidus_mp_dois_customer_foreign_key.rb
66
67
  - lib/generators/solidus_mp_dois/install/install_generator.rb
67
68
  - lib/generators/solidus_mp_dois/install/templates/app/javascript/controllers/card_payment_brick_controller.js
68
69
  - lib/generators/solidus_mp_dois/install/templates/app/javascript/controllers/payment_brick_controller.js
@@ -86,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
87
  - !ruby/object:Gem::Version
87
88
  version: '0'
88
89
  requirements: []
89
- rubygems_version: 3.6.2
90
+ rubygems_version: 3.6.9
90
91
  specification_version: 4
91
92
  summary: ''
92
93
  test_files: []