catarse_paypal_express 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/catarse_paypal_express/paypal_express_controller.rb +22 -2
- data/config/initializers/active_merchant.rb +1 -1
- data/config/initializers/register.rb +10 -1
- data/config/locales/en.yml +3 -0
- data/config/locales/pt.yml +3 -0
- data/config/routes.rb +1 -0
- data/lib/catarse_paypal_express/version.rb +1 -1
- data/spec/controllers/catarse_paypal_express/paypal_express_controller_spec.rb +67 -13
- data/test/dummy/config/database.yml +3 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 462880b88a69a04cb38588b2ef1cf645a3e5f2a5
|
4
|
+
data.tar.gz: d8b93811dc10e125d1de20db10d92d4afc4b2fc6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f312249be9030a40ee51e0f8e4a4e48ce488fb45609c1a169b4a1c65284dc003fc8eaa9972710cc4ed5816471bc1ec49758c05eace37cd6afce539798ed7fd2c
|
7
|
+
data.tar.gz: 4a3630047639182d35448adce5da2a78cbe0d21948d60d62b98d4755b22b0a89365130856a52e227cbe56db75b891e9240c0256998ea5be3c5196dccb9cee3aa
|
@@ -1,4 +1,6 @@
|
|
1
1
|
class CatarsePaypalExpress::PaypalExpressController < ApplicationController
|
2
|
+
include ActiveMerchant::Billing::Integrations
|
3
|
+
|
2
4
|
skip_before_filter :force_http
|
3
5
|
SCOPE = "projects.backers.checkout"
|
4
6
|
layout :false
|
@@ -6,15 +8,27 @@ class CatarsePaypalExpress::PaypalExpressController < ApplicationController
|
|
6
8
|
def review
|
7
9
|
end
|
8
10
|
|
11
|
+
def refund
|
12
|
+
refund_request = gateway.refund(nil, backer.payment_id)
|
13
|
+
|
14
|
+
if refund_request.success?
|
15
|
+
flash[:notice] = I18n.t('projects.backers.refund.success')
|
16
|
+
else
|
17
|
+
flash[:alert] = I18n.t('projects.backers.refund.error')
|
18
|
+
end
|
19
|
+
|
20
|
+
redirect_to main_app.admin_backers_path
|
21
|
+
end
|
22
|
+
|
9
23
|
def ipn
|
10
|
-
if backer
|
24
|
+
if backer && notification.acknowledge
|
11
25
|
process_paypal_message params
|
12
26
|
backer.update_attributes({
|
13
27
|
:payment_service_fee => params['mc_fee'],
|
14
28
|
:payer_email => params['payer_email']
|
15
29
|
})
|
16
30
|
else
|
17
|
-
return render status: 500,
|
31
|
+
return render status: 500, nothing: true
|
18
32
|
end
|
19
33
|
return render status: 200, nothing: true
|
20
34
|
rescue Exception => e
|
@@ -110,4 +124,10 @@ class CatarsePaypalExpress::PaypalExpressController < ApplicationController
|
|
110
124
|
puts "[PayPal] An API Certificate or API Signature is required to make requests to PayPal"
|
111
125
|
end
|
112
126
|
end
|
127
|
+
|
128
|
+
protected
|
129
|
+
|
130
|
+
def notification
|
131
|
+
@notification ||= Paypal::Notification.new(request.raw_post)
|
132
|
+
end
|
113
133
|
end
|
@@ -1,2 +1,2 @@
|
|
1
|
-
ActiveMerchant::Billing::PaypalExpressGateway.default_currency = 'BRL'
|
1
|
+
ActiveMerchant::Billing::PaypalExpressGateway.default_currency = (PaymentEngines.configuration[:currency_charge] rescue nil) || 'BRL'
|
2
2
|
ActiveMerchant::Billing::Base.mode = :test if (PaymentEngines.configuration[:paypal_test] == 'true' rescue nil)
|
@@ -1,5 +1,14 @@
|
|
1
1
|
begin
|
2
|
-
PaymentEngines.register({
|
2
|
+
PaymentEngines.register({
|
3
|
+
name: 'paypal',
|
4
|
+
review_path: ->(backer) {
|
5
|
+
CatarsePaypalExpress::Engine.routes.url_helpers.review_paypal_express_path(backer)
|
6
|
+
},
|
7
|
+
refund_path: ->(backer) {
|
8
|
+
CatarsePaypalExpress::Engine.routes.url_helpers.refund_paypal_express_path(backer)
|
9
|
+
},
|
10
|
+
locale: 'en'
|
11
|
+
})
|
3
12
|
rescue Exception => e
|
4
13
|
puts "Error while registering payment engine: #{e}"
|
5
14
|
end
|
data/config/locales/en.yml
CHANGED
data/config/locales/pt.yml
CHANGED
data/config/routes.rb
CHANGED
@@ -40,6 +40,21 @@ describe CatarsePaypalExpress::PaypalExpressController do
|
|
40
40
|
address_phone_number: '123'
|
41
41
|
}) }
|
42
42
|
|
43
|
+
describe "POST refund" do
|
44
|
+
before do
|
45
|
+
success_refund = double
|
46
|
+
success_refund.stub(:success?).and_return(true)
|
47
|
+
|
48
|
+
main_app.should_receive(:admin_backers_path).and_return('admin_backers_path')
|
49
|
+
|
50
|
+
gateway.should_receive(:refund).with(nil, backer.payment_id).and_return(success_refund)
|
51
|
+
|
52
|
+
post :refund, id: backer.id, use_route: 'catarse_paypal_express'
|
53
|
+
end
|
54
|
+
|
55
|
+
it { should redirect_to('admin_backers_path') }
|
56
|
+
end
|
57
|
+
|
43
58
|
describe "GET review" do
|
44
59
|
before do
|
45
60
|
get :review, id: backer.id, use_route: 'catarse_paypal_express'
|
@@ -49,24 +64,63 @@ describe CatarsePaypalExpress::PaypalExpressController do
|
|
49
64
|
|
50
65
|
describe "POST ipn" do
|
51
66
|
let(:ipn_data){ {"mc_gross"=>"50.00", "protection_eligibility"=>"Eligible", "address_status"=>"unconfirmed", "payer_id"=>"S7Q8X88KMGX5S", "tax"=>"0.00", "address_street"=>"Rua Tatui, 40 ap 81\r\nJardins", "payment_date"=>"09:03:01 Nov 05, 2012 PST", "payment_status"=>"Completed", "charset"=>"windows-1252", "address_zip"=>"01409-010", "first_name"=>"Paula", "mc_fee"=>"3.30", "address_country_code"=>"BR", "address_name"=>"Paula Rizzo", "notify_version"=>"3.7", "custom"=>"", "payer_status"=>"verified", "address_country"=>"Brazil", "address_city"=>"Sao Paulo", "quantity"=>"1", "verify_sign"=>"ALBe4QrXe2sJhpq1rIN8JxSbK4RZA.Kfc5JlI9Jk4N1VQVTH5hPYOi2S", "payer_email"=>"paula.rizzo@gmail.com", "txn_id"=>"3R811766V4891372K", "payment_type"=>"instant", "last_name"=>"Rizzo", "address_state"=>"SP", "receiver_email"=>"financeiro@catarse.me", "payment_fee"=>"", "receiver_id"=>"BVUB4EVC7YCWL", "txn_type"=>"express_checkout", "item_name"=>"Back project", "mc_currency"=>"BRL", "item_number"=>"", "residence_country"=>"BR", "handling_amount"=>"0.00", "transaction_subject"=>"Back project", "payment_gross"=>"", "shipping"=>"0.00", "ipn_track_id"=>"5865649c8c27"} }
|
52
|
-
|
53
67
|
let(:backer){ double(:backer, :payment_id => ipn_data['txn_id'] ) }
|
68
|
+
let(:notification) { double }
|
54
69
|
|
55
70
|
before do
|
56
|
-
|
57
|
-
backer.should_receive(:update_attributes).with({
|
58
|
-
payment_service_fee: ipn_data['mc_fee'],
|
59
|
-
payer_email: ipn_data['payer_email']
|
60
|
-
})
|
61
|
-
controller.should_receive(:process_paypal_message).with(ipn_data.merge({
|
62
|
-
"controller"=>"catarse_paypal_express/paypal_express",
|
63
|
-
"action"=>"ipn"
|
64
|
-
}))
|
65
|
-
post :ipn, params
|
71
|
+
controller.stub(:notification).and_return(notification)
|
66
72
|
end
|
67
73
|
|
68
|
-
|
69
|
-
|
74
|
+
context "when is a valid ipn data" do
|
75
|
+
before do
|
76
|
+
params = ipn_data.merge({ use_route: 'catarse_paypal_express' })
|
77
|
+
|
78
|
+
notification.stub(:acknowledge).and_return(true)
|
79
|
+
|
80
|
+
backer.should_receive(:update_attributes).with({
|
81
|
+
payment_service_fee: ipn_data['mc_fee'],
|
82
|
+
payer_email: ipn_data['payer_email']
|
83
|
+
})
|
84
|
+
controller.should_receive(:process_paypal_message).with(ipn_data.merge({
|
85
|
+
"controller"=>"catarse_paypal_express/paypal_express",
|
86
|
+
"action"=>"ipn"
|
87
|
+
}))
|
88
|
+
|
89
|
+
notification.should_receive(:acknowledge)
|
90
|
+
|
91
|
+
post :ipn, params
|
92
|
+
end
|
93
|
+
|
94
|
+
its(:status){ should == 200 }
|
95
|
+
its(:body){ should == ' ' }
|
96
|
+
end
|
97
|
+
|
98
|
+
context "when is not valid ipn data" do
|
99
|
+
let(:ipn_data){ {"mc_gross"=>"50.00", "payment_status" => 'confirmed', "txn_id" => "3R811766V4891372K", 'payer_email' => 'fake@email.com', 'mc_fee' => '0.0'} }
|
100
|
+
|
101
|
+
before do
|
102
|
+
params = ipn_data.merge({ use_route: 'catarse_paypal_express' })
|
103
|
+
|
104
|
+
notification.stub(:acknowledge).and_return(false)
|
105
|
+
|
106
|
+
backer.should_receive(:update_attributes).with({
|
107
|
+
payment_service_fee: ipn_data['mc_fee'],
|
108
|
+
payer_email: ipn_data['payer_email']
|
109
|
+
}).never
|
110
|
+
|
111
|
+
controller.should_receive(:process_paypal_message).with(ipn_data.merge({
|
112
|
+
"controller"=>"catarse_paypal_express/paypal_express",
|
113
|
+
"action"=>"ipn"
|
114
|
+
})).never
|
115
|
+
|
116
|
+
notification.should_receive(:acknowledge)
|
117
|
+
|
118
|
+
post :ipn, params
|
119
|
+
end
|
120
|
+
|
121
|
+
its(:status){ should == 500 }
|
122
|
+
its(:body){ should == ' ' }
|
123
|
+
end
|
70
124
|
end
|
71
125
|
|
72
126
|
describe "POST pay" do
|
@@ -9,6 +9,7 @@
|
|
9
9
|
# Choose the win32 build.
|
10
10
|
# Install PostgreSQL and put its /bin directory on your path.
|
11
11
|
development:
|
12
|
+
host: localhost
|
12
13
|
adapter: postgresql
|
13
14
|
encoding: utf-8
|
14
15
|
database: catarse_development
|
@@ -35,6 +36,7 @@ development:
|
|
35
36
|
# re-generated from your development database when you run "rake".
|
36
37
|
# Do not set this db to the same as development or production.
|
37
38
|
test: &test
|
39
|
+
host: localhost
|
38
40
|
adapter: postgresql
|
39
41
|
encoding: utf-8
|
40
42
|
database: catarse_test
|
@@ -43,6 +45,7 @@ test: &test
|
|
43
45
|
|
44
46
|
|
45
47
|
production:
|
48
|
+
host: localhost
|
46
49
|
adapter: postgresql
|
47
50
|
encoding: utf-8
|
48
51
|
database: catarse_production
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: catarse_paypal_express
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Antônio Roberto Silva
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-11-29 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -186,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
186
186
|
version: '0'
|
187
187
|
requirements: []
|
188
188
|
rubyforge_project:
|
189
|
-
rubygems_version: 2.
|
189
|
+
rubygems_version: 2.1.10
|
190
190
|
signing_key:
|
191
191
|
specification_version: 4
|
192
192
|
summary: PaypalExpress integration with Catarse
|