catarse_pagarme 2.4.10 → 2.5.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 +4 -4
- data/Gemfile.lock +2 -2
- data/README.md +1 -0
- data/app/assets/javascripts/catarse_pagarme/credit_card.js +65 -47
- data/app/controllers/catarse_pagarme/application_controller.rb +0 -1
- data/app/controllers/catarse_pagarme/credit_cards_controller.rb +49 -2
- data/app/controllers/catarse_pagarme/notifications_controller.rb +0 -1
- data/app/models/catarse_pagarme/credit_card_transaction.rb +17 -1
- data/app/models/catarse_pagarme/transaction_base.rb +1 -1
- data/app/views/catarse_pagarme/pagarme/review.html.slim +5 -4
- data/config/routes.rb +0 -2
- data/lib/catarse_pagarme/configuration.rb +2 -1
- data/lib/catarse_pagarme/engine.rb +0 -1
- data/lib/catarse_pagarme/version.rb +1 -1
- data/spec/controllers/catarse_pagarme/credit_cards_controller_spec.rb +2 -15
- data/spec/spec_helper.rb +10 -0
- metadata +2 -10
- data/app/controllers/catarse_pagarme/credit_card_base_controller.rb +0 -53
- data/app/controllers/catarse_pagarme/subscriptions_controller.rb +0 -27
- data/app/models/catarse_pagarme/credit_card_concern.rb +0 -9
- data/app/models/catarse_pagarme/credit_card_delegator.rb +0 -26
- data/app/models/catarse_pagarme/save_credit_card_transaction.rb +0 -33
- data/app/models/catarse_pagarme/subscription_transaction.rb +0 -21
- data/spec/controllers/catarse_pagarme/subscriptions_controller_spec.rb +0 -95
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e52946e7b76e2534a9d25953d63cb5630f6ef1a5
|
4
|
+
data.tar.gz: 824db7ed69c85c3f83bee7c916e7ebee07184b98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7db17756e8ff0b80f92ad14e31e2ad05f0fde8e4be4bb0bb6e58363703730ebd08a2dcb8cb2e760394e5568657db7c8196e27e3c4c4ac47b5f4d330bc8eb690
|
7
|
+
data.tar.gz: ce404a55c7b605940d757e36e6199edd28d07127c7593b90330447fc2624a8daef2634c10d7e1897f28af3535f2aad063ba6847331f818aa0fef0ff3b6a63dbd
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
catarse_pagarme (2.
|
4
|
+
catarse_pagarme (2.5.0)
|
5
5
|
pagarme (~> 1.9.8)
|
6
6
|
rails (~> 4.0)
|
7
7
|
|
@@ -51,7 +51,7 @@ GEM
|
|
51
51
|
treetop (~> 1.4.8)
|
52
52
|
mime-types (1.25.1)
|
53
53
|
minitest (5.4.0)
|
54
|
-
multi_json (1.
|
54
|
+
multi_json (1.11.0)
|
55
55
|
netrc (0.10.3)
|
56
56
|
pagarme (1.9.9)
|
57
57
|
multi_json
|
data/README.md
CHANGED
@@ -24,6 +24,7 @@ create an (config/initializers/pagarme.rb) and configure with:
|
|
24
24
|
```
|
25
25
|
CatarsePagarme.configure do |config|
|
26
26
|
config.api_key = "API_KEY"
|
27
|
+
config.ecr_key = "ENCRYPTION KEY"
|
27
28
|
config.slip_tax = "Slip payment tax"
|
28
29
|
config.credit_card_tax = "Credit card transaction tax don't need to define the 0.39"
|
29
30
|
config.interest_rate = "Interest rate for installments"
|
@@ -35,28 +35,6 @@ App.views.Pagarme.addChild('PaymentCard', _.extend({
|
|
35
35
|
this.$('#payment_card_source').payment('formatCardCVC');
|
36
36
|
},
|
37
37
|
|
38
|
-
getUrl: function(){
|
39
|
-
var that = this;
|
40
|
-
var url = '';
|
41
|
-
|
42
|
-
if(that.$('input#payment_save_card').prop('checked') || that.hasSelectedSomeCard()) {
|
43
|
-
url = '/payment/pagarme/'+that.parent.contributionId+'/pay_with_subscription';
|
44
|
-
} else {
|
45
|
-
url = '/payment/pagarme/'+that.parent.contributionId+'/pay_credit_card';
|
46
|
-
}
|
47
|
-
|
48
|
-
return url;
|
49
|
-
},
|
50
|
-
|
51
|
-
getAjaxType: function() {
|
52
|
-
var type = 'POST';
|
53
|
-
|
54
|
-
if(this.hasSelectedSomeCard()) {
|
55
|
-
type = 'PUT'
|
56
|
-
}
|
57
|
-
return type;
|
58
|
-
},
|
59
|
-
|
60
38
|
selectedCard: function() {
|
61
39
|
return this.$('input:radio[data-stored][name=payment_subscription_card]:checked');
|
62
40
|
},
|
@@ -65,26 +43,6 @@ App.views.Pagarme.addChild('PaymentCard', _.extend({
|
|
65
43
|
return this.selectedCard().length > 0;
|
66
44
|
},
|
67
45
|
|
68
|
-
getPaymentData: function() {
|
69
|
-
var data = {};
|
70
|
-
|
71
|
-
if(this.hasSelectedSomeCard()) {
|
72
|
-
data = {
|
73
|
-
subscription_id: this.selectedCard().val(),
|
74
|
-
payment_card_installments: this.getInstallments() }
|
75
|
-
} else {
|
76
|
-
data = {
|
77
|
-
payment_card_number: this.$('input#payment_card_number').val(),
|
78
|
-
payment_card_name: this.$('input#payment_card_name').val(),
|
79
|
-
payment_card_date: this.$('input#payment_card_date').val(),
|
80
|
-
payment_card_source: this.$('input#payment_card_source').val(),
|
81
|
-
payment_card_installments: this.getInstallments()
|
82
|
-
}
|
83
|
-
}
|
84
|
-
|
85
|
-
return data;
|
86
|
-
},
|
87
|
-
|
88
46
|
getInstallments: function() {
|
89
47
|
if(this.hasSelectedSomeCard()) {
|
90
48
|
return this.$('.my-credit-cards .selected select#payment_card_installments').val();
|
@@ -104,18 +62,77 @@ App.views.Pagarme.addChild('PaymentCard', _.extend({
|
|
104
62
|
$(e.currentTarget).hide();
|
105
63
|
that.parent.loader.show();
|
106
64
|
|
65
|
+
if( that.hasSelectedSomeCard() ) {
|
66
|
+
that.requestPayment({
|
67
|
+
card_id: this.selectedCard().val(),
|
68
|
+
payment_card_installments: that.getInstallments()
|
69
|
+
});
|
70
|
+
} else {
|
71
|
+
PagarMe.encryption_key = this.$('.pagarme-e-key').data('key');
|
72
|
+
|
73
|
+
var creditCard = this.newCreditCard();
|
74
|
+
var fieldErrors = creditCard.fieldErrors();
|
75
|
+
|
76
|
+
if(_.keys(fieldErrors).length > 0) {
|
77
|
+
this.displayErrors(fieldErrors);
|
78
|
+
} else {
|
79
|
+
this.generateCardHash(creditCard);
|
80
|
+
}
|
81
|
+
}
|
82
|
+
|
83
|
+
return false;
|
84
|
+
},
|
85
|
+
|
86
|
+
generateCardHash: function(creditCard){
|
87
|
+
var that = this;
|
88
|
+
creditCard.generateHash(function(cardHash) {
|
89
|
+
that.requestPayment({
|
90
|
+
card_hash: cardHash,
|
91
|
+
payment_card_installments: that.getInstallments(),
|
92
|
+
save_card: that.$('input#payment_save_card').is(':checked')
|
93
|
+
});
|
94
|
+
});
|
95
|
+
},
|
96
|
+
|
97
|
+
displayErrors: function(errors){
|
98
|
+
var msg = [];
|
99
|
+
this.parent.loader.hide();
|
100
|
+
|
101
|
+
$.each(errors, function(i, value){
|
102
|
+
msg.push(value)
|
103
|
+
});
|
104
|
+
|
105
|
+
this.message.find('.message-text').html(msg.join("<br/>"));
|
106
|
+
this.message.slideDown('slow');
|
107
|
+
|
108
|
+
$("#credit_card_submit").show();
|
109
|
+
},
|
110
|
+
|
111
|
+
newCreditCard: function(){
|
112
|
+
var creditCard = new PagarMe.creditCard();
|
113
|
+
creditCard.cardHolderName = this.$('input#payment_card_name').val();
|
114
|
+
creditCard.cardExpirationMonth = $.trim(this.$('input#payment_card_date').val().split('/')[0]);
|
115
|
+
creditCard.cardExpirationYear = $.trim(this.$('input#payment_card_date').val().split('/')[1]);
|
116
|
+
creditCard.cardNumber = this.$('input#payment_card_number').val();
|
117
|
+
creditCard.cardCVV = this.$('input#payment_card_source').val();
|
118
|
+
return creditCard;
|
119
|
+
},
|
120
|
+
|
121
|
+
requestPayment: function(data){
|
122
|
+
var that = this;
|
123
|
+
|
107
124
|
$.ajax({
|
108
|
-
type:
|
109
|
-
url: that.
|
110
|
-
data:
|
125
|
+
type: 'POST',
|
126
|
+
url: '/payment/pagarme/'+that.parent.contributionId+'/pay_credit_card',
|
127
|
+
data: data,
|
111
128
|
success: function(response){
|
112
129
|
that.parent.loader.hide();
|
113
130
|
|
114
131
|
if(response.payment_status == 'failed'){
|
115
132
|
that.message.find('.message-text').html(response.message);
|
116
|
-
that.message.slideDown('slow')
|
133
|
+
that.message.slideDown('slow');
|
117
134
|
|
118
|
-
$(
|
135
|
+
$("#credit_card_submit").show();
|
119
136
|
} else {
|
120
137
|
var thank_you = $('#project_review').data('thank-you-path');
|
121
138
|
|
@@ -127,6 +144,7 @@ App.views.Pagarme.addChild('PaymentCard', _.extend({
|
|
127
144
|
}
|
128
145
|
}
|
129
146
|
});
|
147
|
+
|
130
148
|
},
|
131
149
|
|
132
150
|
onKeyupPaymentCardNumber: function(e){
|
@@ -1,8 +1,55 @@
|
|
1
1
|
module CatarsePagarme
|
2
|
-
class CreditCardsController <
|
2
|
+
class CreditCardsController < CatarsePagarme::ApplicationController
|
3
3
|
|
4
4
|
def create
|
5
|
-
|
5
|
+
transaction = CreditCardTransaction.new(credit_card_attributes, contribution).charge!
|
6
|
+
|
7
|
+
render json: { payment_status: transaction.status }
|
8
|
+
rescue Exception => e
|
9
|
+
render json: { payment_status: 'failed', message: e.message }
|
10
|
+
end
|
11
|
+
|
12
|
+
protected
|
13
|
+
|
14
|
+
def credit_card_attributes
|
15
|
+
hash = {
|
16
|
+
payment_method: 'credit_card',
|
17
|
+
amount: delegator.value_with_installment_tax(get_installment),
|
18
|
+
postback_url: ipn_pagarme_index_url(host: CatarsePagarme.configuration.host,
|
19
|
+
subdomain: CatarsePagarme.configuration.subdomain,
|
20
|
+
protocol: CatarsePagarme.configuration.protocol),
|
21
|
+
installments: get_installment,
|
22
|
+
customer: {
|
23
|
+
email: contribution.user.email,
|
24
|
+
name: contribution.user.name
|
25
|
+
},
|
26
|
+
metadata: {
|
27
|
+
key: contribution.key
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
if params[:card_hash].present?
|
32
|
+
hash[:card_hash] = params[:card_hash]
|
33
|
+
else
|
34
|
+
hash[:card_id] = params[:card_id]
|
35
|
+
end
|
36
|
+
|
37
|
+
if params[:save_card] === "true"
|
38
|
+
hash[:save_card] = true
|
39
|
+
end
|
40
|
+
|
41
|
+
hash
|
6
42
|
end
|
43
|
+
|
44
|
+
def get_installment
|
45
|
+
if contribution.value.to_f < CatarsePagarme.configuration.minimum_value_for_installment.to_f
|
46
|
+
1
|
47
|
+
elsif params[:payment_card_installments].to_i > 0
|
48
|
+
params[:payment_card_installments].to_i
|
49
|
+
else
|
50
|
+
1
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
7
54
|
end
|
8
55
|
end
|
@@ -1,15 +1,31 @@
|
|
1
1
|
module CatarsePagarme
|
2
2
|
class CreditCardTransaction < TransactionBase
|
3
|
+
|
3
4
|
def charge!
|
5
|
+
save_card = self.attributes.delete(:save_card)
|
6
|
+
|
4
7
|
self.transaction = PagarMe::Transaction.new(self.attributes)
|
5
8
|
self.transaction.charge
|
6
9
|
|
10
|
+
change_contribution_state
|
11
|
+
|
7
12
|
if self.transaction.status == 'refused'
|
8
13
|
raise ::PagarMe::PagarMeError.new(I18n.t('projects.contributions.edit.transaction_error'))
|
9
14
|
end
|
10
15
|
|
11
|
-
|
16
|
+
save_user_credit_card if save_card
|
12
17
|
self.transaction
|
13
18
|
end
|
19
|
+
|
20
|
+
def save_user_credit_card
|
21
|
+
card = self.transaction.card
|
22
|
+
|
23
|
+
credit_card = self.user.credit_cards.find_or_initialize_by(card_key: card.id)
|
24
|
+
credit_card.last_digits = card.last_digits
|
25
|
+
credit_card.card_brand = card.brand
|
26
|
+
|
27
|
+
credit_card.save!
|
28
|
+
end
|
29
|
+
|
14
30
|
end
|
15
31
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
= javascript_include_tag 'catarse_pagarme'
|
2
|
-
#catarse_pagarme_form
|
1
|
+
= javascript_include_tag 'catarse_pagarme', 'https://pagar.me/assets/pagarme-v2.min.js'
|
3
2
|
|
3
|
+
#catarse_pagarme_form
|
4
4
|
.next_step_after_valid_document
|
5
5
|
.w-row.list_payment.w-form
|
6
6
|
.w-col.w-col-7.w-col-small-7.back-payment-moip-options-column
|
@@ -16,13 +16,14 @@
|
|
16
16
|
|
17
17
|
#payment_type_credit_card_section.payment_section
|
18
18
|
= form_tag 'javascript:void(0);', :class => 'pagarme' do
|
19
|
+
.pagarme-e-key data-key=CatarsePagarme.configuration.ecr_key
|
19
20
|
div[class="my-credit-cards w-form back-payment-form-creditcard records-choice #{(current_user.credit_cards.present? ? '' : 'w-hidden')}"]
|
20
21
|
- current_user.credit_cards.each_with_index do |credit_card, i|
|
21
|
-
= label_tag "payment_subscription_card_#{credit_card.
|
22
|
+
= label_tag "payment_subscription_card_#{credit_card.card_key}" do
|
22
23
|
.w-row.creditcard-records
|
23
24
|
.w-col.w-col-1
|
24
25
|
.w-radio.w-clearfix.back-payment-credit-card-radio-field
|
25
|
-
= radio_button_tag :payment_subscription_card, credit_card.
|
26
|
+
= radio_button_tag :payment_subscription_card, credit_card.card_key, i == 0, {"data-stored" => true}
|
26
27
|
.w-col.w-col-2
|
27
28
|
.fontsize-small.fontweight-semibold.text-success
|
28
29
|
= credit_card.card_brand.upcase
|
data/config/routes.rb
CHANGED
@@ -6,8 +6,6 @@ CatarsePagarme::Engine.routes.draw do
|
|
6
6
|
put :second_slip, to: 'slip#update'
|
7
7
|
post :pay_credit_card, to: 'credit_cards#create'
|
8
8
|
post :pay_slip, to: 'slip#create'
|
9
|
-
post :pay_with_subscription, to: 'subscriptions#create'
|
10
|
-
put :pay_with_subscription, to: 'subscriptions#update'
|
11
9
|
end
|
12
10
|
|
13
11
|
collection do
|
@@ -3,10 +3,11 @@ module CatarsePagarme
|
|
3
3
|
attr_accessor :api_key, :slip_tax, :credit_card_tax, :interest_rate, :host, :subdomain, :protocol,
|
4
4
|
:max_installments, :minimum_value_for_installment, :credit_card_cents_fee, :pagarme_tax, :stone_tax,
|
5
5
|
:cielo_tax, :cielo_installment_diners_tax, :cielo_installment_not_diners_tax,
|
6
|
-
:cielo_installment_amex_tax, :cielo_installment_not_amex_tax
|
6
|
+
:cielo_installment_amex_tax, :cielo_installment_not_amex_tax, :ecr_key
|
7
7
|
|
8
8
|
def initialize
|
9
9
|
self.api_key = ''
|
10
|
+
self.ecr_key = ''
|
10
11
|
self.slip_tax = 0
|
11
12
|
self.credit_card_tax = 0
|
12
13
|
self.interest_rate = 0
|
@@ -8,7 +8,6 @@ describe CatarsePagarme::CreditCardsController do
|
|
8
8
|
|
9
9
|
let(:project) { create(:project, goal: 10_000, state: 'online') }
|
10
10
|
let(:contribution) { create(:contribution, value: 10, project: project) }
|
11
|
-
let(:credit_card) { create(:credit_card, subscription_id: '1542')}
|
12
11
|
|
13
12
|
describe 'pay with credit card' do
|
14
13
|
context 'without an user' do
|
@@ -27,13 +26,7 @@ describe CatarsePagarme::CreditCardsController do
|
|
27
26
|
before do
|
28
27
|
post :create, {
|
29
28
|
locale: :pt, project_id: project.id, contribution_id: contribution.id, use_route: 'catarse_pagarme',
|
30
|
-
|
31
|
-
payment_card_source: '574', payment_card_installments: '1' }
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'payment_status should be filled' do
|
36
|
-
expect(ActiveSupport::JSON.decode(response.body)['payment_status']).not_to be_nil
|
29
|
+
card_hash: sample_card_hash }
|
37
30
|
end
|
38
31
|
|
39
32
|
it 'and payment_status is not failed' do
|
@@ -44,18 +37,12 @@ describe CatarsePagarme::CreditCardsController do
|
|
44
37
|
context 'with invalid card data' do
|
45
38
|
before do
|
46
39
|
post :create, {
|
47
|
-
locale: :pt, project_id: project.id, contribution_id: contribution.id, use_route: 'catarse_pagarme',
|
48
|
-
payment_card_date: '', payment_card_name: '',
|
49
|
-
payment_card_source: '143', payment_card_installments: '1' }
|
40
|
+
locale: :pt, project_id: project.id, contribution_id: contribution.id, use_route: 'catarse_pagarme', card_hash: "abcd" }
|
50
41
|
end
|
51
42
|
|
52
43
|
it 'payment_status should be failed' do
|
53
44
|
expect(ActiveSupport::JSON.decode(response.body)['payment_status']).to eq('failed')
|
54
45
|
end
|
55
|
-
|
56
|
-
it 'message should be filled' do
|
57
|
-
expect(ActiveSupport::JSON.decode(response.body)['message']).not_to be_nil
|
58
|
-
end
|
59
46
|
end
|
60
47
|
end
|
61
48
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -4,6 +4,7 @@ ENV["RAILS_ENV"] ||= 'test'
|
|
4
4
|
require File.expand_path("../dummy/config/environment", __FILE__)
|
5
5
|
|
6
6
|
require 'pagarme'
|
7
|
+
require 'open-uri'
|
7
8
|
require 'rspec/rails'
|
8
9
|
require 'factory_girl'
|
9
10
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
@@ -34,3 +35,12 @@ RSpec.configure do |config|
|
|
34
35
|
PaymentEngines.stub(:configuration).and_return({})
|
35
36
|
end
|
36
37
|
end
|
38
|
+
|
39
|
+
def sample_card_hash
|
40
|
+
r = open("https://api.pagar.me/1/transactions/card_hash_key/?encryption_key=ek_test_zwAwnRvqD1c9GUERQ7oAP4FPyN9o2v").read
|
41
|
+
json = ActiveSupport::JSON.decode(r)
|
42
|
+
public_key = OpenSSL::PKey::RSA.new(json["public_key"])
|
43
|
+
encode_string = Base64.encode64(public_key.public_encrypt("card_number=4901720080344448&card_holder_name=Usuario de Teste&card_expiration_date=1220&card_cvv=314"))
|
44
|
+
|
45
|
+
"#{json['id']}_#{encode_string}"
|
46
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: catarse_pagarme
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Antônio Roberto Silva
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-03-
|
12
|
+
date: 2015-03-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -103,24 +103,18 @@ files:
|
|
103
103
|
- app/assets/javascripts/catarse_pagarme/payment_slip.js
|
104
104
|
- app/assets/stylesheets/catarse_pagarme/application.css
|
105
105
|
- app/controllers/catarse_pagarme/application_controller.rb
|
106
|
-
- app/controllers/catarse_pagarme/credit_card_base_controller.rb
|
107
106
|
- app/controllers/catarse_pagarme/credit_cards_controller.rb
|
108
107
|
- app/controllers/catarse_pagarme/notifications_controller.rb
|
109
108
|
- app/controllers/catarse_pagarme/pagarme_controller.rb
|
110
109
|
- app/controllers/catarse_pagarme/slip_controller.rb
|
111
|
-
- app/controllers/catarse_pagarme/subscriptions_controller.rb
|
112
110
|
- app/helpers/catarse_pagarme/application_helper.rb
|
113
111
|
- app/models/catarse_pagarme/bank_account_concern.rb
|
114
112
|
- app/models/catarse_pagarme/contribution_concern.rb
|
115
113
|
- app/models/catarse_pagarme/contribution_delegator.rb
|
116
|
-
- app/models/catarse_pagarme/credit_card_concern.rb
|
117
|
-
- app/models/catarse_pagarme/credit_card_delegator.rb
|
118
114
|
- app/models/catarse_pagarme/credit_card_transaction.rb
|
119
115
|
- app/models/catarse_pagarme/fee_calculator_concern.rb
|
120
116
|
- app/models/catarse_pagarme/payment_type.rb
|
121
|
-
- app/models/catarse_pagarme/save_credit_card_transaction.rb
|
122
117
|
- app/models/catarse_pagarme/slip_transaction.rb
|
123
|
-
- app/models/catarse_pagarme/subscription_transaction.rb
|
124
118
|
- app/models/catarse_pagarme/transaction_base.rb
|
125
119
|
- app/views/catarse_pagarme/pagarme/_terms.html.slim
|
126
120
|
- app/views/catarse_pagarme/pagarme/review.html.slim
|
@@ -139,7 +133,6 @@ files:
|
|
139
133
|
- spec/controllers/catarse_pagarme/notifications_controller_spec.rb
|
140
134
|
- spec/controllers/catarse_pagarme/pagarme_controller_spec.rb
|
141
135
|
- spec/controllers/catarse_pagarme/slip_controller_spec.rb
|
142
|
-
- spec/controllers/catarse_pagarme/subscriptions_controller_spec.rb
|
143
136
|
- spec/dummy/README.rdoc
|
144
137
|
- spec/dummy/Rakefile
|
145
138
|
- spec/dummy/app/assets/images/.keep
|
@@ -226,7 +219,6 @@ test_files:
|
|
226
219
|
- spec/controllers/catarse_pagarme/notifications_controller_spec.rb
|
227
220
|
- spec/controllers/catarse_pagarme/pagarme_controller_spec.rb
|
228
221
|
- spec/controllers/catarse_pagarme/slip_controller_spec.rb
|
229
|
-
- spec/controllers/catarse_pagarme/subscriptions_controller_spec.rb
|
230
222
|
- spec/dummy/README.rdoc
|
231
223
|
- spec/dummy/Rakefile
|
232
224
|
- spec/dummy/app/assets/images/.keep
|
@@ -1,53 +0,0 @@
|
|
1
|
-
module CatarsePagarme
|
2
|
-
class CreditCardBaseController < CatarsePagarme::ApplicationController
|
3
|
-
|
4
|
-
protected
|
5
|
-
|
6
|
-
def charge_with_class(kclass)
|
7
|
-
transaction = kclass.new(credit_card_attributes, contribution).charge!
|
8
|
-
|
9
|
-
render json: { payment_status: transaction.status }
|
10
|
-
rescue Exception => e
|
11
|
-
render json: { payment_status: 'failed', message: e.message }
|
12
|
-
end
|
13
|
-
|
14
|
-
def splited_month_and_year
|
15
|
-
params[:payment_card_date].split('/')
|
16
|
-
rescue
|
17
|
-
[0, 0]
|
18
|
-
end
|
19
|
-
|
20
|
-
def get_installment
|
21
|
-
if contribution.value.to_f < CatarsePagarme.configuration.minimum_value_for_installment.to_f
|
22
|
-
1
|
23
|
-
elsif params[:payment_card_installments].to_i > 0
|
24
|
-
params[:payment_card_installments].to_i
|
25
|
-
else
|
26
|
-
1
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def credit_card_attributes
|
31
|
-
{
|
32
|
-
payment_method: 'credit_card',
|
33
|
-
card_number: params[:payment_card_number],
|
34
|
-
card_holder_name: params[:payment_card_name],
|
35
|
-
card_expiration_month: splited_month_and_year[0],
|
36
|
-
card_expiration_year: splited_month_and_year[1],
|
37
|
-
card_cvv: params[:payment_card_source],
|
38
|
-
amount: delegator.value_with_installment_tax(get_installment),
|
39
|
-
postback_url: ipn_pagarme_index_url(host: CatarsePagarme.configuration.host,
|
40
|
-
subdomain: CatarsePagarme.configuration.subdomain,
|
41
|
-
protocol: CatarsePagarme.configuration.protocol),
|
42
|
-
installments: get_installment,
|
43
|
-
customer: {
|
44
|
-
email: contribution.user.email,
|
45
|
-
name: contribution.user.name
|
46
|
-
},
|
47
|
-
metadata: {
|
48
|
-
key: contribution.key
|
49
|
-
}
|
50
|
-
}
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module CatarsePagarme
|
2
|
-
class SubscriptionsController < CreditCardBaseController
|
3
|
-
def create
|
4
|
-
charge_with_class SaveCreditCardTransaction
|
5
|
-
end
|
6
|
-
|
7
|
-
def update
|
8
|
-
charge_with_class SubscriptionTransaction
|
9
|
-
end
|
10
|
-
|
11
|
-
protected
|
12
|
-
|
13
|
-
def credit_card_attributes
|
14
|
-
attributes = super
|
15
|
-
|
16
|
-
if has_subscription?
|
17
|
-
attributes.update({subscription_id: params[:subscription_id]})
|
18
|
-
end
|
19
|
-
|
20
|
-
attributes
|
21
|
-
end
|
22
|
-
|
23
|
-
def has_subscription?
|
24
|
-
params[:subscription_id].present?
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module CatarsePagarme
|
2
|
-
class CreditCardDelegator
|
3
|
-
attr_accessor :credit_card, :subscription
|
4
|
-
|
5
|
-
def initialize(credit_card)
|
6
|
-
configure_pagarme
|
7
|
-
self.credit_card = credit_card
|
8
|
-
end
|
9
|
-
|
10
|
-
def cancel_subscription
|
11
|
-
get_subscription
|
12
|
-
self.subscription.cancel
|
13
|
-
end
|
14
|
-
|
15
|
-
def get_subscription
|
16
|
-
self.subscription ||= ::PagarMe::Subscription.find_by_id(self.credit_card.subscription_id)
|
17
|
-
end
|
18
|
-
|
19
|
-
|
20
|
-
protected
|
21
|
-
|
22
|
-
def configure_pagarme
|
23
|
-
::PagarMe.api_key = CatarsePagarme.configuration.api_key
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module CatarsePagarme
|
2
|
-
class SaveCreditCardTransaction < TransactionBase
|
3
|
-
def charge!
|
4
|
-
installments = self.attributes.delete(:installments)
|
5
|
-
amount = self.attributes.delete(:amount)
|
6
|
-
|
7
|
-
self.subscription = PagarMe::Subscription.new(self.attributes)
|
8
|
-
self.subscription.create
|
9
|
-
|
10
|
-
self.subscription.charge(amount, installments)
|
11
|
-
self.transaction = subscription.current_transaction
|
12
|
-
|
13
|
-
save_user_credit_card
|
14
|
-
change_contribution_state
|
15
|
-
|
16
|
-
|
17
|
-
self.transaction
|
18
|
-
end
|
19
|
-
|
20
|
-
protected
|
21
|
-
|
22
|
-
def save_user_credit_card
|
23
|
-
credit_cards = self.user.credit_cards
|
24
|
-
unless credit_cards.where(subscription_id: self.subscription.id.to_s).present?
|
25
|
-
credit_cards.create!({
|
26
|
-
last_digits: self.subscription.card_last_digits,
|
27
|
-
card_brand: self.subscription.card_brand,
|
28
|
-
subscription_id: self.subscription.id
|
29
|
-
})
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module CatarsePagarme
|
2
|
-
class SubscriptionTransaction < TransactionBase
|
3
|
-
def charge!
|
4
|
-
validate_subscription_id
|
5
|
-
|
6
|
-
self.subscription = PagarMe::Subscription.find_by_id(self.attributes[:subscription_id])
|
7
|
-
self.subscription.charge(self.attributes[:amount], self.attributes[:installments])
|
8
|
-
self.transaction = subscription.current_transaction
|
9
|
-
|
10
|
-
change_contribution_state
|
11
|
-
|
12
|
-
self.transaction
|
13
|
-
end
|
14
|
-
|
15
|
-
def validate_subscription_id
|
16
|
-
unless self.user.credit_cards.where(subscription_id: self.attributes[:subscription_id]).present?
|
17
|
-
raise PagarMe::PagarMeError.new('invalid subscription')
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,95 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe CatarsePagarme::SubscriptionsController do
|
4
|
-
before do
|
5
|
-
PaymentEngines.stub(:find_payment).and_return(contribution)
|
6
|
-
controller.stub(:current_user).and_return(user)
|
7
|
-
end
|
8
|
-
|
9
|
-
let(:project) { create(:project, goal: 10_000, state: 'online') }
|
10
|
-
let(:contribution) { create(:contribution, value: 10, project: project) }
|
11
|
-
let(:credit_card) { create(:credit_card, subscription_id: '1542')}
|
12
|
-
|
13
|
-
describe "pay with a saved credit card" do
|
14
|
-
context 'without an user' do
|
15
|
-
let(:user) { nil }
|
16
|
-
|
17
|
-
it 'should raise a error' do
|
18
|
-
expect {
|
19
|
-
post :create, { locale: :pt, project_id: project.id, contribution_id: contribution.id, use_route: 'catarse_pagarme' }
|
20
|
-
}.to raise_error('invalid user')
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context 'with an user' do
|
25
|
-
let(:user) { contribution.user }
|
26
|
-
context 'when subscription_id not associated with contribution user' do
|
27
|
-
before do
|
28
|
-
put :update, { locale: :pt, subscription_id: '1542', project_id: project.id, contribution_id: contribution.id, use_route: 'catarse_pagarme' }
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'payment_status should be failed' do
|
32
|
-
expect(ActiveSupport::JSON.decode(response.body)['payment_status']).to eq('failed')
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'message should be filled' do
|
36
|
-
expect(ActiveSupport::JSON.decode(response.body)['message']).to eq('invalid subscription')
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe 'pay and save credit card' do
|
43
|
-
context 'without an user' do
|
44
|
-
let(:user) { nil }
|
45
|
-
|
46
|
-
it 'should raise a error' do
|
47
|
-
expect {
|
48
|
-
post :create, { locale: :pt, project_id: project.id, contribution_id: contribution.id, use_route: 'catarse_pagarme' }
|
49
|
-
}.to raise_error('invalid user')
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
context "with an user" do
|
54
|
-
let(:user) { contribution.user }
|
55
|
-
|
56
|
-
context 'with invalid card data' do
|
57
|
-
before do
|
58
|
-
post :create, {
|
59
|
-
locale: :pt, project_id: project.id, contribution_id: contribution.id, use_route: 'catarse_pagarme',
|
60
|
-
payment_card_date: '', payment_card_name: '',
|
61
|
-
payment_card_source: '143', payment_card_installments: '1' }
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'payment_status should be failed' do
|
65
|
-
expect(ActiveSupport::JSON.decode(response.body)['payment_status']).to eq('failed')
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'message should be filled' do
|
69
|
-
expect(ActiveSupport::JSON.decode(response.body)['message']).not_to be_nil
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
context "with valid card data" do
|
74
|
-
before do
|
75
|
-
post :create, {
|
76
|
-
locale: :pt, project_id: project.id, contribution_id: contribution.id, use_route: 'catarse_pagarme',
|
77
|
-
payment_card_date: '10/17', payment_card_number: '4901720080344448', payment_card_name: 'Foo bar',
|
78
|
-
payment_card_source: '143', payment_card_installments: '1' }
|
79
|
-
end
|
80
|
-
|
81
|
-
it "should save card data into user" do
|
82
|
-
expect(user.credit_cards.count).to eq(1)
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'payment_status should be filled and not failed' do
|
86
|
-
expect(ActiveSupport::JSON.decode(response.body)['payment_status']).not_to be_nil
|
87
|
-
end
|
88
|
-
|
89
|
-
it 'and payment_status is not failed' do
|
90
|
-
expect(ActiveSupport::JSON.decode(response.body)['payment_status']).not_to eq('failed')
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|