paypal_permissions 0.0.3.1 → 0.0.3.2
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.
data/README.md
CHANGED
@@ -35,3 +35,15 @@ This generator will:
|
|
35
35
|
- create a controller.
|
36
36
|
- insert routes into config/routes.rb
|
37
37
|
|
38
|
+
|
39
|
+
## Rolling your own
|
40
|
+
|
41
|
+
### Routes
|
42
|
+
|
43
|
+
`match 'paypal_perms/request_permissions_callback' => 'paypal_perms#request_permissions_callback',
|
44
|
+
:via => [ :get ], :as => :paypal_perms_request_permissions_callback`
|
45
|
+
`resources :paypal_perms, :only => [ :index, :new, :create, :show ]`
|
46
|
+
|
47
|
+
### Models, migrations, and controllers
|
48
|
+
|
49
|
+
See the `examples` directory.
|
@@ -0,0 +1,136 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
class PaypalPermsController < ApplicationController
|
4
|
+
respond_to :html, :json
|
5
|
+
|
6
|
+
def index
|
7
|
+
render :text => "paypal perms"
|
8
|
+
end
|
9
|
+
|
10
|
+
def new
|
11
|
+
school_id = session[:school_id]
|
12
|
+
@paypal_perms = PaypalPerm.new(:school_id => school_id)
|
13
|
+
end
|
14
|
+
|
15
|
+
def create
|
16
|
+
school = School.find_by_id params[:paypal_perm][:school_id]
|
17
|
+
if school
|
18
|
+
paypal_perms = PaypalPerm.new(:school => school)
|
19
|
+
if paypal_perms.save
|
20
|
+
g = ::PAYPAL_PERMISSIONS_GATEWAY
|
21
|
+
callback_url = if false && (Rails.env.development? || Rails.env.test?)
|
22
|
+
"http://sandbox.agentfriday.com:3080/paypal_perms/request_permissions_callback"
|
23
|
+
else
|
24
|
+
paypal_perms_request_permissions_callback_url
|
25
|
+
end
|
26
|
+
# Make @paypal_response an instance variable just to facilitate testing
|
27
|
+
@paypal_response = g.request_permissions URI.encode(callback_url), 'DIRECT_PAYMENT'
|
28
|
+
if @paypal_response[:ack] == 'Success'
|
29
|
+
token = @paypal_response[:token]
|
30
|
+
if token.present?
|
31
|
+
paypal_perms.update_attribute :request_permissions_request_token, token
|
32
|
+
url = g.redirect_user_to_paypal_url(token)
|
33
|
+
redirect_to url
|
34
|
+
return
|
35
|
+
else
|
36
|
+
# this should never happen, hence, it's pretty much unrecoverable
|
37
|
+
raise
|
38
|
+
end
|
39
|
+
else
|
40
|
+
message = @paypal_response[:errors][0][:message] # TODO: need a method to find error messages or display a generic message
|
41
|
+
flash[:error] = message
|
42
|
+
redirect_to new_paypal_perm_path
|
43
|
+
end
|
44
|
+
else
|
45
|
+
message = "unable to create paypal_perms object"
|
46
|
+
flash[:error] = message
|
47
|
+
redirect_to new_paypal_perm_path
|
48
|
+
end
|
49
|
+
else
|
50
|
+
message = "can't find that school"
|
51
|
+
flash[:error] = message
|
52
|
+
redirect_to new_paypal_perm_path
|
53
|
+
end
|
54
|
+
=begin
|
55
|
+
{
|
56
|
+
:errors=>[
|
57
|
+
{
|
58
|
+
:parameters=>[
|
59
|
+
"http://test.host/paypal_perms/request_permissions_callback"
|
60
|
+
],
|
61
|
+
:error_id=>"580028",
|
62
|
+
:domain=>"PLATFORM",
|
63
|
+
:subdomain=>"Application",
|
64
|
+
:severity=>"Error",
|
65
|
+
:category=>"Application",
|
66
|
+
:message=>"The URL http://test.host/paypal_perms/request_permissions_callback is malformed"
|
67
|
+
}
|
68
|
+
],
|
69
|
+
:timestamp=>"2012-02-13T16:47:04.779-08:00",
|
70
|
+
:ack=>"Failure",
|
71
|
+
:correlation_id=>"c99412dc3ab23"
|
72
|
+
}
|
73
|
+
=end
|
74
|
+
end
|
75
|
+
|
76
|
+
# Really, request_permissions_callback should do all this.
|
77
|
+
def update
|
78
|
+
paypal_perms = PaypalPerm.find_by_request_permissions_request_token params[:request_token]
|
79
|
+
if paypal_perms
|
80
|
+
g = ::PAYPAL_PERMISSIONS_GATEWAY
|
81
|
+
# Make @paypal_response an instance variable just to facilitate testing
|
82
|
+
@paypal_response = g.get_access_token paypal_perms.request_permissions_request_token, paypal_perms.request_permissions_callback_verifier
|
83
|
+
if @paypal_response[:ack] == 'Success'
|
84
|
+
paypal_perms.update_attributes({
|
85
|
+
:get_access_token_access_token => @paypal_response[:token],
|
86
|
+
:get_access_token_verifier => @paypal_response[:tokenSecret],
|
87
|
+
})
|
88
|
+
render :text => 'thanks for the access token'
|
89
|
+
else
|
90
|
+
flash[:error] = @paypal_response[:errors][0][:message] # TODO: need a method to find error messages or display a generic message
|
91
|
+
redirect_to new_paypal_perm_path
|
92
|
+
end
|
93
|
+
else
|
94
|
+
render :text => "that permission doesn't exist"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def show
|
99
|
+
if params[:id] == 'request_permissions_callback'
|
100
|
+
render :text => "We're sorry to see that you haven't given us permission to execute payment transactions."
|
101
|
+
else
|
102
|
+
respond_with PaypalPerm.find_by_id(params[:id])
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def request_permissions_callback
|
107
|
+
# http://sandbox.agentfriday.com:3080/paypal_perms/request_permissions_callback?request_token=AAAAAAAVP73FnqglEbHC&verification_code=x5xKy65PotWILQNKE0ypgg
|
108
|
+
perms = PaypalPerm.find_by_request_permissions_request_token params[:request_token]
|
109
|
+
if perms
|
110
|
+
if perms.valid?
|
111
|
+
if perms.update_attribute :request_permissions_callback_verifier, params[:verification_code]
|
112
|
+
update
|
113
|
+
else
|
114
|
+
render :text => "thanks for the permission, but i've got problems"
|
115
|
+
end
|
116
|
+
else
|
117
|
+
render :text => "perms wasn't valid: #{perms.errors}"
|
118
|
+
end
|
119
|
+
else
|
120
|
+
if Rails.env.development? || Rails.env.test?
|
121
|
+
perms = PaypalPerm.create({
|
122
|
+
:school_id => session[:school_id],
|
123
|
+
:request_permissions_request_token => params[:request_token],
|
124
|
+
:request_permissions_callback_verifier => params[:verification_code],
|
125
|
+
})
|
126
|
+
if perms
|
127
|
+
render :text => "that permission doesn't exist, but to facilitate testing i created it"
|
128
|
+
else
|
129
|
+
render :text => "that permission doesn't exist, and i couldn't create it, not even for testing"
|
130
|
+
end
|
131
|
+
else
|
132
|
+
render :text => "perms isn't valid: #{perms.errors.inspect}"
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class PaypalPerm < ActiveRecord::Base
|
2
|
+
belongs_to :school, :inverse_of => :paypal_perms
|
3
|
+
|
4
|
+
validates :school, :presence => true
|
5
|
+
# validates :request_permissions_ack, :presence => true
|
6
|
+
|
7
|
+
attr_accessible :school, :school_id,
|
8
|
+
:request_permissions_ack, :request_permissions_correlation_id, :request_permissions_request_token,
|
9
|
+
:request_permissions_verifier, :request_permissions_envelope_timestamp,
|
10
|
+
:request_permissions_errors, :request_permissions_raw_response,
|
11
|
+
:request_permissions_callback_ack, :request_permissions_callback_correlation_id, :request_permissions_callback_request_token,
|
12
|
+
:request_permissions_callback_verifier, :request_permissions_callback_envelope_timestamp,
|
13
|
+
:request_permissions_callback_errors, :request_permissions_callback_raw_response,
|
14
|
+
:get_access_token_ack, :get_access_token_correlation_id, :get_access_token_access_token,
|
15
|
+
:get_access_token_verifier, :get_access_token_envelope_timestamp,
|
16
|
+
:get_access_token_errors, :get_access_token_raw_response
|
17
|
+
|
18
|
+
public
|
19
|
+
def as_json(opts = {})
|
20
|
+
opts ||= {}
|
21
|
+
super({ :only => %w[id request_permissions_ack request_permissions_correlation_id request_permissions_request_token
|
22
|
+
request_permissions_verifier request_permissions_envelope_timestamp
|
23
|
+
request_permissions_errors request_permissions_raw_response
|
24
|
+
request_permissions_callback_ack request_permissions_callback_correlation_id request_permissions_callback_request_token
|
25
|
+
request_permissions_callback_verifier request_permissions_callback_envelope_timestamp
|
26
|
+
request_permissions_callback_errors request_permissions_callback_raw_response
|
27
|
+
get_access_token_ack get_access_token_correlation_id get_access_token_access_token
|
28
|
+
get_access_token_verifier get_access_token_envelope_timestamp
|
29
|
+
get_access_token_errors get_access_token_raw_response
|
30
|
+
] }.merge(opts))
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class PaypalPermissionsCreatePaypalPerms < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table(:paypal_perms) do |t|
|
4
|
+
t.integer "school_id", :null => false
|
5
|
+
|
6
|
+
# RequestPermissions response fields
|
7
|
+
t.string :request_permissions_ack
|
8
|
+
t.string :request_permissions_correlation_id
|
9
|
+
t.string :request_permissions_request_token
|
10
|
+
t.datetime :request_permissions_envelope_timestamp
|
11
|
+
t.text :request_permissions_errors
|
12
|
+
t.text :request_permissions_raw_response
|
13
|
+
|
14
|
+
# RequestPermissions callback fields
|
15
|
+
t.string :request_permissions_callback_ack
|
16
|
+
t.string :request_permissions_callback_correlation_id
|
17
|
+
t.string :request_permissions_callback_verifier
|
18
|
+
t.datetime :request_permissions_callback_envelope_timestamp
|
19
|
+
t.text :request_permissions_callback_errors
|
20
|
+
t.text :request_permissions_callback_raw_response
|
21
|
+
|
22
|
+
# GetAccessToken response fields
|
23
|
+
t.string :get_access_token_ack
|
24
|
+
t.string :get_access_token_correlation_id
|
25
|
+
t.string :get_access_token_access_token
|
26
|
+
t.string :get_access_token_verifier
|
27
|
+
t.datetime :get_access_token_envelope_timestamp
|
28
|
+
t.text :get_access_token_errors
|
29
|
+
t.text :get_access_token_raw_response
|
30
|
+
|
31
|
+
t.timestamps
|
32
|
+
end
|
33
|
+
|
34
|
+
add_index :paypal_perms, :request_permissions_request_token
|
35
|
+
add_index :paypal_perms, :get_access_token_access_token
|
36
|
+
end
|
37
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paypal_permissions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.3.
|
4
|
+
version: 0.0.3.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-03-06 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152408140 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2152408140
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: vcr
|
27
|
-
requirement: &
|
27
|
+
requirement: &2152407540 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '1.11'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2152407540
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: railties
|
38
|
-
requirement: &
|
38
|
+
requirement: &2152406940 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '3.0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2152406940
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: activesupport
|
49
|
-
requirement: &
|
49
|
+
requirement: &2152406380 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '3.0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2152406380
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: activemerchant
|
60
|
-
requirement: &
|
60
|
+
requirement: &2152405900 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2152405900
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
|
-
requirement: &
|
71
|
+
requirement: &2152405260 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '2.6'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2152405260
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: ammeter
|
82
|
-
requirement: &
|
82
|
+
requirement: &2152404740 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2152404740
|
91
91
|
description: ! '"A gem to support PayPal Permissions API for Rails applications using
|
92
92
|
ActiveMerchant."'
|
93
93
|
email:
|
@@ -101,6 +101,9 @@ files:
|
|
101
101
|
- README.md
|
102
102
|
- Rakefile
|
103
103
|
- config/locales/en.yml
|
104
|
+
- examples/app/controllers/paypal_perms_controller.rb
|
105
|
+
- examples/app/models/paypal_perm.rb
|
106
|
+
- examples/db/migrate/paypal_permissions_create_paypal_perms.rb
|
104
107
|
- lib/active_merchant.rb
|
105
108
|
- lib/active_merchant/billing.rb
|
106
109
|
- lib/active_merchant/billing/gateways.rb
|
@@ -134,7 +137,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
134
137
|
version: '0'
|
135
138
|
segments:
|
136
139
|
- 0
|
137
|
-
hash: -
|
140
|
+
hash: -2295600929205441820
|
138
141
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
142
|
none: false
|
140
143
|
requirements:
|
@@ -143,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
146
|
version: '0'
|
144
147
|
segments:
|
145
148
|
- 0
|
146
|
-
hash: -
|
149
|
+
hash: -2295600929205441820
|
147
150
|
requirements: []
|
148
151
|
rubyforge_project: paypal_permissions
|
149
152
|
rubygems_version: 1.8.10
|