easypay 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +57 -0
- data/VERSION +1 -1
- data/app/controllers/easypay/notifications_controller.rb +63 -0
- data/app/controllers/easypay/payments_controller.rb +12 -0
- data/app/models/easypay/log.rb +8 -0
- data/app/models/easypay/payment_reference.rb +66 -0
- data/app/views/easypay/notifications/notification_from_mb_payment.xml.builder +4 -0
- data/app/views/easypay/notifications/simple_notification.xml.builder +44 -0
- data/app/views/easypay/payments/complete.html.erb +11 -0
- data/config/routes.rb +4 -8
- data/easypay.gemspec +2 -4
- data/lib/acts_as_payable/base.rb +45 -0
- data/lib/application_controller.rb +2 -2
- data/lib/easypay.rb +1 -0
- data/lib/easypay/client.rb +45 -16
- data/lib/engine.rb +13 -4
- data/lib/rails/generators/easypay/easypay_generator.rb +3 -22
- data/lib/rails/generators/easypay/templates/initializer.rb +4 -1
- data/lib/rails/generators/easypay/templates/migration.rb +58 -0
- data/lib/rails/railties/tasks.rake +8 -0
- metadata +16 -8
- data/README.rdoc +0 -40
- data/app/controllers/easypay/clients_controller.rb +0 -18
- data/app/views/easypay/clients/index.xml.builder +0 -10
data/README.markdown
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
Easypay
|
2
|
+
=========
|
3
|
+
|
4
|
+
_Easypay_ is a Ruby client for [Easypay](http://www.easypay.pt/) payment platform that allows payments with credit cards and (MB references to Portugal)
|
5
|
+
|
6
|
+
Installation
|
7
|
+
------------
|
8
|
+
|
9
|
+
OK. First, you need to talk with people from Easypay to get your credentials!
|
10
|
+
|
11
|
+
Now, let's install the gem via Rubygems:
|
12
|
+
|
13
|
+
$ gem install easypay
|
14
|
+
|
15
|
+
Or in your Gemfile:
|
16
|
+
|
17
|
+
$ gem 'easypay'
|
18
|
+
|
19
|
+
After bundle:
|
20
|
+
|
21
|
+
$ rails generate easypay
|
22
|
+
|
23
|
+
Check on your initializers folder for easypay.rb and change the parameters:
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
config.cin = 'CIN provided by Easypay'
|
27
|
+
config.user = 'USER provided by Easypay'
|
28
|
+
config.entity = 'Entity provided by Easypay'
|
29
|
+
config.code = 'Code is needed only if you don't have validation by IP Address (Configure on Easypay Backoffice)'
|
30
|
+
```
|
31
|
+
|
32
|
+
Usage
|
33
|
+
-----
|
34
|
+
|
35
|
+
Start Easypay call:
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
Easypay::Client.new
|
39
|
+
```
|
40
|
+
|
41
|
+
If you don't configure your easypay.rb with these params, you can start your object like this:
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
Easypay::Client.new(:easypay_cin => xxxx,
|
45
|
+
:easypay_entity => xxxx,
|
46
|
+
:easypay_user => xxxx,
|
47
|
+
:easypay_code => xxxx,
|
48
|
+
:easypay_ref_type => xxx,
|
49
|
+
:easypay_country => xxxx)
|
50
|
+
```
|
51
|
+
|
52
|
+
In order to get one payment reference:
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
Easypay::Client.new.create_reference('token_you_generate', 'value_of_payment', 'client_language', 'client_name', 'client_mobile', 'client_email')
|
56
|
+
```
|
57
|
+
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Easypay
|
2
|
+
class NotificationsController < ApplicationController
|
3
|
+
|
4
|
+
unloadable
|
5
|
+
|
6
|
+
before_filter :register_notification
|
7
|
+
|
8
|
+
def simple_notification
|
9
|
+
# c=PT&e=10611&r=810302231&v=7&l=PT&t_key=
|
10
|
+
@payment_reference = PaymentReference.find_by_ep_reference_and_ep_value(params[:r], params[:v])
|
11
|
+
# preciso de por os dados da morada do cliente, NIF etc
|
12
|
+
respond_to do |format|
|
13
|
+
format.xml
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def notification_to_forward
|
18
|
+
# e=10611&r=810302231&v=7&s=ok&k=C36D4995CBF3574ADD8664BA26514181C9EA8737&t_key=CCCSOKCSO
|
19
|
+
payment_reference = PaymentReference.find_by_ep_reference_and_ep_key(params[:r], params[:t_key])
|
20
|
+
|
21
|
+
if params[:s].starts_with? "ok" and params[:k].present?
|
22
|
+
payment_reference.update_attribute(:o_key, params[:k]) unless payment_reference.nil?
|
23
|
+
|
24
|
+
payment_detail = Easypay::Client.new.request_payment(params[:e], params[:r], params[:v], params[:k])
|
25
|
+
|
26
|
+
payment_reference.update_attributes(:ep_last_status => payment_detail[:ep_status],
|
27
|
+
:ep_message => payment_detail[:ep_message]) unless payment_reference.nil?
|
28
|
+
end
|
29
|
+
|
30
|
+
redirect_to payment_redirect_url(:status => params[:s], :ep_key => params[:t_key])
|
31
|
+
end
|
32
|
+
|
33
|
+
def notification_from_payment
|
34
|
+
#ep_cin=8103&ep_user=OUTITUDE&ep_doc=TESTOUTITUDE0088690520120712152503
|
35
|
+
payment_detail = Easypay::Client.new.get_payment_detail("", params[:ep_doc])
|
36
|
+
|
37
|
+
payment_reference = PaymentReference.find_by_ep_reference_and_ep_key(payment_detail[:ep_reference], payment_detail[:t_key])
|
38
|
+
|
39
|
+
payment_reference.update_attributes(:ep_doc => payment_detail[:ep_doc],
|
40
|
+
:ep_payment_type => payment_detail[:ep_payment_type],
|
41
|
+
:ep_value_fixed => payment_detail[:ep_value_fixed],
|
42
|
+
:ep_value_var => payment_detail[:ep_value_var],
|
43
|
+
:ep_value_tax => payment_detail[:ep_value_tax],
|
44
|
+
:ep_value_transf => payment_detail[:ep_value_transf],
|
45
|
+
:ep_date_transf => payment_detail[:ep_date_transf],
|
46
|
+
:ep_date_read => payment_detail[:ep_date_read],
|
47
|
+
:ep_status_read => payment_detail[:ep_status_read],
|
48
|
+
:o_obs => payment_detail[:o_obs],
|
49
|
+
:ep_date => payment_detail[:ep_date],
|
50
|
+
:ep_status => 'finalized') unless payment_reference.nil?
|
51
|
+
|
52
|
+
respond_to do |format|
|
53
|
+
format.xml
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def register_notification
|
60
|
+
Easypay::Log.create(:request_type => "Notification", :request_url => request.fullpath, :request_remote_ip => request.remote_ip)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Easypay
|
2
|
+
class PaymentReference < ActiveRecord::Base
|
3
|
+
self.table_name = 'easypay_payment_references'
|
4
|
+
|
5
|
+
attr_protected
|
6
|
+
|
7
|
+
def process(object)
|
8
|
+
@object = object
|
9
|
+
|
10
|
+
if compliant?
|
11
|
+
self.update_attributes(handle_model_methods)
|
12
|
+
|
13
|
+
payment_reference = Easypay::Client.new.create_reference(self)
|
14
|
+
|
15
|
+
self.update_attributes( :ep_message => payment_reference[:ep_message],
|
16
|
+
:ep_reference => payment_reference[:ep_reference],
|
17
|
+
:ep_cin => payment_reference[:ep_cin],
|
18
|
+
:ep_user => payment_reference[:ep_user],
|
19
|
+
:ep_entity => payment_reference[:ep_entity],
|
20
|
+
:ep_link => payment_reference[:payment_link],
|
21
|
+
:ep_last_status => payment_reference[:ep_status],
|
22
|
+
:request_log => payment_reference[:raw])
|
23
|
+
|
24
|
+
return payment_reference
|
25
|
+
else
|
26
|
+
nil
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
protected
|
31
|
+
|
32
|
+
def handle_model_methods
|
33
|
+
attributes = {}
|
34
|
+
model_attributes.each do |attribute_name, method_name|
|
35
|
+
if @object.respond_to? method_name
|
36
|
+
attributes[attribute_name] = @object.send(method_name)
|
37
|
+
elsif !attribute_name.to_s.match("ep_key").nil?
|
38
|
+
attributes[attribute_name] = method_name
|
39
|
+
end
|
40
|
+
end
|
41
|
+
return attributes
|
42
|
+
end
|
43
|
+
|
44
|
+
def model_attributes
|
45
|
+
{
|
46
|
+
:payable_id => @object.easypay_options[:payable_id],
|
47
|
+
:ep_key => generate_ep_key,
|
48
|
+
:ep_value => @object.easypay_options[:ep_value],
|
49
|
+
:ep_language => @object.easypay_options[:ep_language],
|
50
|
+
:o_name => @object.easypay_options[:o_name],
|
51
|
+
:o_description => @object.easypay_options[:o_description],
|
52
|
+
:o_obs => @object.easypay_options[:o_obs],
|
53
|
+
:o_email => @object.easypay_options[:o_email],
|
54
|
+
:o_mobile => @object.easypay_options[:o_mobile]
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
def compliant?
|
59
|
+
!(@object.send(@object.easypay_options[:ep_language]).blank? && @object.send(@object.easypay_options[:ep_value]).blank?)
|
60
|
+
end
|
61
|
+
|
62
|
+
def generate_ep_key
|
63
|
+
Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{@object.easypay_options[:ep_value]}--#{@object.easypay_options[:ep_language]}--")[8..32]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
xml.instruct! :xml, :version => "1.0", :encoding => "ISO-8859-1"
|
2
|
+
xml.get_detail do
|
3
|
+
if @payment_reference.nil?
|
4
|
+
xml.ep_status "err"
|
5
|
+
xml.ep_message "error mensage"
|
6
|
+
xml.ep_entity "x1"
|
7
|
+
xml.ep_ref "x2"
|
8
|
+
xml.ep_value "x3"
|
9
|
+
else
|
10
|
+
xml.ep_status "ok"
|
11
|
+
xml.ep_message "success message"
|
12
|
+
xml.ep_entity @payment_reference.ep_entity
|
13
|
+
xml.ep_reference @payment_reference.ep_reference
|
14
|
+
xml.ep_value @payment_reference.ep_value
|
15
|
+
xml.t_key @payment_reference.ep_key
|
16
|
+
xml.order_info do
|
17
|
+
xml.total_taxes "100.00"
|
18
|
+
xml.total_including_taxes @payment_reference.ep_value
|
19
|
+
|
20
|
+
xml.bill_fiscal_number "PT123456789"
|
21
|
+
xml.bill_name "Billing Test Name"
|
22
|
+
xml.bill_address_1 "Billing address line 1"
|
23
|
+
xml.bill_address_2 "Billing address line 2"
|
24
|
+
xml.bill_city "Billing city"
|
25
|
+
xml.bill_zip_code "Billing zip code"
|
26
|
+
xml.bill_country "Billing country"
|
27
|
+
|
28
|
+
xml.ship_fiscal_number "PT123456789"
|
29
|
+
xml.shipp_name "Shipping Test Name"
|
30
|
+
xml.shipp_address_1 "Shipping address line 1"
|
31
|
+
xml.shipp_address_2 "Shipping address line 2"
|
32
|
+
xml.shipp_city "Shipping city"
|
33
|
+
xml.shipp_zip_code "Shipping zip code"
|
34
|
+
xml.shipp_country "Shipping coutry"
|
35
|
+
end
|
36
|
+
xml.order_detail do
|
37
|
+
xml.item do
|
38
|
+
xml.item_description "description of item 1"
|
39
|
+
xml.item_quantity "5"
|
40
|
+
xml.item_total @payment_reference.ep_value
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/config/routes.rb
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
Rails.application.routes.draw do
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
match
|
3
|
+
match Easypay::Engine.config.easypay_notification_path => 'easypay/notifications#simple_notification'
|
4
|
+
match Easypay::Engine.config.easypay_forward_path => 'easypay/notifications#notification_to_forward'
|
5
|
+
match Easypay::Engine.config.easypay_payment_path => 'easypay/notifications#notification_from_payment'
|
6
|
+
match Easypay::Engine.config.redirect_after_payment_path => 'easypay/payments#complete', :as => :payment_redirect
|
6
7
|
|
7
|
-
resources :clients, :only => [ :index ],
|
8
|
-
:controller => "easypay/clients",
|
9
|
-
:path_prefix => mount_at,
|
10
|
-
:name_prefix => "easypay_"
|
11
|
-
|
12
8
|
end
|
data/easypay.gemspec
CHANGED
@@ -3,15 +3,13 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "easypay"
|
6
|
-
s.version = "0.0.
|
6
|
+
s.version = "0.0.4"
|
7
7
|
s.authors = ["Guilherme Pereira"]
|
8
8
|
s.email = ["guiferrpereira@gmail.com"]
|
9
9
|
s.homepage = ""
|
10
10
|
s.summary = %q{This Gem provides connection to easypay API}
|
11
11
|
s.description = %q{This Gem provides connection to easypay API, that allow you to use credit cards and MB references to Portugal}
|
12
|
-
s.extra_rdoc_files = [
|
13
|
-
"README.rdoc"
|
14
|
-
]
|
12
|
+
s.extra_rdoc_files = ["README.markdown"]
|
15
13
|
|
16
14
|
s.rubyforge_project = "easypay"
|
17
15
|
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Easypay
|
2
|
+
module ActsAsPayable
|
3
|
+
|
4
|
+
## Define ModelMethods
|
5
|
+
module Base
|
6
|
+
def self.included(klass)
|
7
|
+
klass.class_eval do
|
8
|
+
extend Config
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module Config
|
13
|
+
def acts_as_payable args = {}
|
14
|
+
has_many :payment_references, :class_name => 'Easypay::PaymentReference', :foreign_key => "payable_id"
|
15
|
+
|
16
|
+
define_method "easypay_options" do
|
17
|
+
{
|
18
|
+
:payable_id => args[:id] || "id",
|
19
|
+
:ep_value => args[:value] || "value",
|
20
|
+
:ep_language => args[:language] || "language",
|
21
|
+
:o_name => args[:name] || "name",
|
22
|
+
:o_description => args[:description] || "description",
|
23
|
+
:o_obs => args[:obs] || "obs",
|
24
|
+
:o_email => args[:email] || "email",
|
25
|
+
:o_mobile => args[:mobile] || "mobile"
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
include Easypay::ActsAsPayable::Base::InstanceMethods
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
module InstanceMethods
|
34
|
+
|
35
|
+
def create_payment_reference
|
36
|
+
Easypay::PaymentReference.new.process(self)
|
37
|
+
end
|
38
|
+
|
39
|
+
end # InstanceMethods
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
::ActiveRecord::Base.send :include, Easypay::ActsAsPayable::Base
|
@@ -9,14 +9,14 @@ module Easypay
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def test_controller_instance_method
|
12
|
-
puts "###### This text is coming from an application_controller before_filter that is being declared and triggered from inside the engine. This before_filter is automatically integrated in when the engine is installed into an app. Look inside lib/application_controller.rb to find it. ######"
|
12
|
+
# puts "###### This text is coming from an application_controller before_filter that is being declared and triggered from inside the engine. This before_filter is automatically integrated in when the engine is installed into an app. Look inside lib/application_controller.rb to find it. ######"
|
13
13
|
end
|
14
14
|
|
15
15
|
# This method is available inside application_controller but it is not being
|
16
16
|
# automatically executed. Notice the before_filter line above that is automatically
|
17
17
|
# executing the first method.
|
18
18
|
def second_controller_instance_method
|
19
|
-
puts "###### This method is not automatically run inside application_controller, but it is available inside application_controller. To see this example add 'before_filter :second_controller_instance_method' at the top of your app's application_controller.rb ######"
|
19
|
+
# puts "###### This method is not automatically run inside application_controller, but it is available inside application_controller. To see this example add 'before_filter :second_controller_instance_method' at the top of your app's application_controller.rb ######"
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
data/lib/easypay.rb
CHANGED
data/lib/easypay/client.rb
CHANGED
@@ -32,35 +32,39 @@ module Easypay
|
|
32
32
|
|
33
33
|
# API methods
|
34
34
|
|
35
|
-
def create_reference(token, value, lang, client_name=nil, client_mobile=nil, client_email=nil)
|
35
|
+
# def create_reference(token, value, lang, client_name=nil, client_mobile=nil, client_email=nil, client_observation=nil, item_description=nil)
|
36
|
+
def create_reference(object)
|
37
|
+
|
36
38
|
get "01BG",
|
37
|
-
:t_key =>
|
38
|
-
:t_value =>
|
39
|
-
:ep_language =>
|
40
|
-
:o_name =>
|
41
|
-
:
|
42
|
-
:
|
39
|
+
:t_key => object.ep_key,
|
40
|
+
:t_value => object.ep_value,
|
41
|
+
:ep_language => object.ep_language.upcase,
|
42
|
+
:o_name => object.o_name.nil? ? "" : URI.escape(object.o_name),
|
43
|
+
:o_description => object.o_description.nil? ? "" : URI.escape(object.o_description),
|
44
|
+
:o_obs => object.o_obs.nil? ? "" : URI.escape(object.o_obs),
|
45
|
+
:o_mobile => object.o_mobile.nil? ? "" : object.o_mobile,
|
46
|
+
:o_email => object.o_email.nil? ? "" : URI.escape(object.o_email)
|
43
47
|
# :ep_rec => "yes", # Reccurrence stuff
|
44
48
|
# :ep_rec_freq => recurrence,
|
45
49
|
# :ep_rec_url => url_notification_cc
|
46
50
|
end
|
47
51
|
|
48
|
-
def get_payment_detail(ep_key,ep_doc)
|
52
|
+
def get_payment_detail(ep_key, ep_doc)
|
49
53
|
get "03AG",
|
50
54
|
:ep_key => ep_key,
|
51
55
|
:ep_doc => ep_doc
|
52
56
|
end
|
53
57
|
|
54
|
-
def
|
58
|
+
def get_payment_list(type="last", detail=10, format="xml")
|
55
59
|
get "040BG1",
|
56
60
|
:o_list_type => type,
|
57
61
|
:o_ini => detail,
|
58
62
|
:type => format
|
59
63
|
end
|
60
64
|
|
61
|
-
def
|
65
|
+
def request_payment(entity, reference, value, identifier)
|
62
66
|
get "05AG",
|
63
|
-
:e =>
|
67
|
+
:e => entity,
|
64
68
|
:r => reference,
|
65
69
|
:v => value,
|
66
70
|
:k => identifier
|
@@ -116,11 +120,13 @@ module Easypay
|
|
116
120
|
response = create_http.get(url, nil)
|
117
121
|
|
118
122
|
result = { :endpoint => EASYPAY_SERVICE_URL, :url => url, :raw => response.body }
|
119
|
-
|
123
|
+
|
124
|
+
Easypay::Log.create(:request_type => "Request", :request_url => "#{EASYPAY_SERVICE_URL}#{url}", :raw => response.body)
|
125
|
+
|
120
126
|
return parse_content(result)
|
121
127
|
|
122
128
|
rescue Exception => ex
|
123
|
-
return { :success => false, :
|
129
|
+
return { :success => false, :ep_message => ex.message }
|
124
130
|
end
|
125
131
|
end
|
126
132
|
|
@@ -128,14 +134,37 @@ module Easypay
|
|
128
134
|
doc = Nokogiri::XML(result[:raw])
|
129
135
|
|
130
136
|
if doc.at("ep_status").nil? or !doc.at("ep_status").text.starts_with? "ok"
|
131
|
-
result[:
|
137
|
+
result[:ep_message] = doc.at("ep_message").nil? ? "Invalid xml format" : doc.at("ep_message").text
|
132
138
|
result[:success] = false
|
133
139
|
else
|
134
|
-
result[:
|
135
|
-
result[:reference] = doc.at("ep_reference").text unless doc.at("ep_reference").nil?
|
140
|
+
result[:ep_message] = doc.at("ep_message").nil? ? "Success" : doc.at("ep_message").text
|
136
141
|
result[:success] = true
|
142
|
+
result[:payment_link] = doc.at("ep_link").text unless doc.at("ep_link").nil?
|
143
|
+
result[:ep_reference] = doc.at("ep_reference").text unless doc.at("ep_reference").nil?
|
137
144
|
end
|
138
145
|
|
146
|
+
result[:ep_status] = doc.at("ep_status").text unless doc.at("ep_status").nil?
|
147
|
+
result[:ep_cin] = doc.at("ep_cin").text unless doc.at("ep_cin").nil?
|
148
|
+
result[:ep_user] = doc.at("ep_user").text unless doc.at("ep_user").nil?
|
149
|
+
result[:ep_entity] = doc.at("ep_entity").text unless doc.at("ep_entity").nil?
|
150
|
+
|
151
|
+
|
152
|
+
result[:t_key] = doc.at("t_key").text unless doc.at("t_key").nil?
|
153
|
+
result[:ep_doc] = doc.at("ep_doc").text unless doc.at("ep_doc").nil?
|
154
|
+
result[:ep_payment_type] = doc.at("ep_payment_type").text unless doc.at("ep_payment_type").nil?
|
155
|
+
result[:ep_value] = doc.at("ep_value").text unless doc.at("ep_value").nil?
|
156
|
+
result[:ep_value_fixed] = doc.at("ep_value_fixed").text unless doc.at("ep_value_fixed").nil?
|
157
|
+
result[:ep_value_var] = doc.at("ep_value_var").text unless doc.at("ep_value_var").nil?
|
158
|
+
result[:ep_value_tax] = doc.at("ep_value_tax").text unless doc.at("ep_value_tax").nil?
|
159
|
+
result[:ep_value_transf] = doc.at("ep_value_transf").text unless doc.at("ep_value_transf").nil?
|
160
|
+
result[:ep_date_transf] = doc.at("ep_date_transf").text unless doc.at("ep_date_transf").nil?
|
161
|
+
result[:ep_date_read] = doc.at("ep_date_read").text unless doc.at("ep_date_read").nil?
|
162
|
+
result[:ep_status_read] = doc.at("ep_status_read").text unless doc.at("ep_status_read").nil?
|
163
|
+
result[:o_obs] = doc.at("o_obs").text unless doc.at("o_obs").nil?
|
164
|
+
result[:o_email] = doc.at("o_email").text unless doc.at("o_email").nil?
|
165
|
+
result[:o_mobile] = doc.at("o_mobile").text unless doc.at("o_mobile").nil?
|
166
|
+
result[:ep_date] = doc.at("ep_date").text unless doc.at("ep_date").nil?
|
167
|
+
|
139
168
|
return result
|
140
169
|
end
|
141
170
|
end
|
data/lib/engine.rb
CHANGED
@@ -7,8 +7,14 @@ module Easypay
|
|
7
7
|
class Engine < Rails::Engine
|
8
8
|
|
9
9
|
# Config defaults
|
10
|
-
config.
|
11
|
-
config.
|
10
|
+
config.easypay_notification_path = '/easypay/notifications.:format'
|
11
|
+
config.easypay_forward_path = '/easypay/forwards.:format'
|
12
|
+
config.easypay_payment_path = '/easypay/payments.:format'
|
13
|
+
config.redirect_after_payment_path = '/easypay/completed'
|
14
|
+
config.cin = 'cin provided by Easypay'
|
15
|
+
config.user = 'user provided by Easypay'
|
16
|
+
config.entity = 'entity provided by Easypay'
|
17
|
+
config.code = ''
|
12
18
|
|
13
19
|
# Load rake tasks
|
14
20
|
rake_tasks do
|
@@ -18,8 +24,11 @@ module Easypay
|
|
18
24
|
# Check the gem config
|
19
25
|
initializer "check config" do |app|
|
20
26
|
|
21
|
-
# make sure
|
22
|
-
config.
|
27
|
+
# make sure all routes end with trailing slash
|
28
|
+
config.easypay_notification_path += '/' unless config.easypay_notification_path.last == '/'
|
29
|
+
config.easypay_forward_path += '/' unless config.easypay_forward_path.last == '/'
|
30
|
+
config.easypay_payment_path += '/' unless config.easypay_payment_path.last == '/'
|
31
|
+
config.redirect_after_payment_path += '/' unless config.redirect_after_payment_path.last == '/'
|
23
32
|
end
|
24
33
|
|
25
34
|
initializer "static assets" do |app|
|
@@ -15,29 +15,10 @@ class EasypayGenerator < Rails::Generators::Base
|
|
15
15
|
"%.3d" % (current_migration_number(dirname) + 1)
|
16
16
|
end
|
17
17
|
end
|
18
|
-
|
19
|
-
|
20
|
-
# Every method that is declared below will be automatically executed when the generator is run
|
21
18
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
#
|
26
|
-
# schema.gsub!(/ActiveRecord::Schema.*\n/, '')
|
27
|
-
# schema.gsub!(/^end\n*$/, '')
|
28
|
-
#
|
29
|
-
# f = File.open File.join(File.dirname(__FILE__), 'templates', 'migration.rb')
|
30
|
-
# migration = f.read; f.close
|
31
|
-
# migration.gsub!(/SCHEMA_AUTO_INSERTED_HERE/, schema)
|
32
|
-
#
|
33
|
-
# tmp = File.open "tmp/~migration_ready.rb", "w"
|
34
|
-
# tmp.write migration
|
35
|
-
# tmp.close
|
36
|
-
#
|
37
|
-
# migration_template '../../../tmp/~migration_ready.rb',
|
38
|
-
# 'db/migrate/create_easypay_tables.rb'
|
39
|
-
# remove_file 'tmp/~migration_ready.rb'
|
40
|
-
# end
|
19
|
+
def create_migration_file
|
20
|
+
migration_template 'migration.rb', 'db/migrate/create_easypay_tables.rb'
|
21
|
+
end
|
41
22
|
|
42
23
|
def copy_initializer_file
|
43
24
|
copy_file 'initializer.rb', 'config/initializers/easypay.rb'
|
@@ -1,7 +1,10 @@
|
|
1
1
|
module Easypay
|
2
2
|
class Engine < Rails::Engine
|
3
3
|
|
4
|
-
config.
|
4
|
+
config.easypay_notification_path = '/easypay/notifications.:format'
|
5
|
+
config.easypay_forward_path = '/easypay/forwards.:format'
|
6
|
+
config.easypay_payment_path = '/easypay/payments.:format'
|
7
|
+
config.redirect_after_payment_path = '/easypay/completed'
|
5
8
|
config.cin = 'cin provided by Easypay'
|
6
9
|
config.user = 'user provided by Easypay'
|
7
10
|
config.entity = 'entity provided by Easypay'
|
@@ -0,0 +1,58 @@
|
|
1
|
+
class CreateEasypayTables < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :easypay_payment_references, :force => true do |t|
|
4
|
+
t.integer :payable_id
|
5
|
+
t.string :ep_key
|
6
|
+
t.string :ep_doc
|
7
|
+
t.string :ep_cin
|
8
|
+
t.string :ep_user
|
9
|
+
t.string :ep_language
|
10
|
+
t.timestamp :ep_date
|
11
|
+
t.string :ep_status, :default => 'pending'
|
12
|
+
t.string :ep_entity
|
13
|
+
t.string :ep_reference
|
14
|
+
t.decimal :ep_value
|
15
|
+
t.string :ep_payment_type
|
16
|
+
t.decimal :ep_value_fixed, :precision => 16, :scale => 2
|
17
|
+
t.decimal :ep_value_var, :precision => 16, :scale => 2
|
18
|
+
t.decimal :ep_value_tax, :precision => 16, :scale => 2
|
19
|
+
t.decimal :ep_value_transf, :precision => 16, :scale => 2
|
20
|
+
t.timestamp :ep_date_transf
|
21
|
+
t.timestamp :ep_date_read
|
22
|
+
t.string :ep_status_read
|
23
|
+
t.string :ep_invoice_number
|
24
|
+
t.string :ep_transf_number
|
25
|
+
t.text :ep_message
|
26
|
+
t.text :request_log
|
27
|
+
t.string :ep_last_status
|
28
|
+
t.text :ep_link
|
29
|
+
|
30
|
+
t.string :o_key
|
31
|
+
t.string :o_name
|
32
|
+
t.string :o_description
|
33
|
+
t.text :o_obs
|
34
|
+
t.string :o_email
|
35
|
+
t.string :o_mobile
|
36
|
+
|
37
|
+
t.timestamps
|
38
|
+
end
|
39
|
+
|
40
|
+
create_table :easypay_logs, :force => true do |t|
|
41
|
+
t.string :request_type
|
42
|
+
t.string :request_remote_ip
|
43
|
+
t.text :request_url
|
44
|
+
t.text :raw
|
45
|
+
|
46
|
+
t.timestamps
|
47
|
+
end
|
48
|
+
|
49
|
+
add_index :easypay_payment_references, :payable_id
|
50
|
+
add_index :easypay_payment_references, :ep_key, :unique => true
|
51
|
+
add_index :easypay_payment_references, :ep_doc, :unique => true
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.down
|
55
|
+
drop_table :easypay_payment_references
|
56
|
+
drop_table :easypay_requests
|
57
|
+
end
|
58
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: easypay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Guilherme Pereira
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-07-
|
18
|
+
date: 2012-07-12 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: nokogiri
|
@@ -39,17 +39,23 @@ executables: []
|
|
39
39
|
extensions: []
|
40
40
|
|
41
41
|
extra_rdoc_files:
|
42
|
-
- README.
|
42
|
+
- README.markdown
|
43
43
|
files:
|
44
44
|
- .gitignore
|
45
45
|
- Gemfile
|
46
|
-
- README.
|
46
|
+
- README.markdown
|
47
47
|
- Rakefile
|
48
48
|
- VERSION
|
49
|
-
- app/controllers/easypay/
|
50
|
-
- app/
|
49
|
+
- app/controllers/easypay/notifications_controller.rb
|
50
|
+
- app/controllers/easypay/payments_controller.rb
|
51
|
+
- app/models/easypay/log.rb
|
52
|
+
- app/models/easypay/payment_reference.rb
|
53
|
+
- app/views/easypay/notifications/notification_from_mb_payment.xml.builder
|
54
|
+
- app/views/easypay/notifications/simple_notification.xml.builder
|
55
|
+
- app/views/easypay/payments/complete.html.erb
|
51
56
|
- config/routes.rb
|
52
57
|
- easypay.gemspec
|
58
|
+
- lib/acts_as_payable/base.rb
|
53
59
|
- lib/application_controller.rb
|
54
60
|
- lib/application_helper.rb
|
55
61
|
- lib/easypay.rb
|
@@ -57,6 +63,8 @@ files:
|
|
57
63
|
- lib/engine.rb
|
58
64
|
- lib/rails/generators/easypay/easypay_generator.rb
|
59
65
|
- lib/rails/generators/easypay/templates/initializer.rb
|
66
|
+
- lib/rails/generators/easypay/templates/migration.rb
|
67
|
+
- lib/rails/railties/tasks.rake
|
60
68
|
homepage: ""
|
61
69
|
licenses: []
|
62
70
|
|
data/README.rdoc
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
== Overview
|
2
|
-
|
3
|
-
This gem enables connection with Easypay API (www.easypay.pt)
|
4
|
-
|
5
|
-
Installation:
|
6
|
-
|
7
|
-
In your gemfile:
|
8
|
-
|
9
|
-
* gem 'easypay'
|
10
|
-
|
11
|
-
After bundle:
|
12
|
-
|
13
|
-
* rails generate easypay
|
14
|
-
|
15
|
-
Check on your initializers folder for easypay.rb and change the parameters:
|
16
|
-
|
17
|
-
* config.cin = CIN provided by Easypay
|
18
|
-
* config.user = USER provided by Easypay
|
19
|
-
* config.entity = Entity provided by Easypay
|
20
|
-
* config.code = Code is needed only if you don't have validation by IP Address (Configure on Easypay Backoffice)
|
21
|
-
|
22
|
-
Usage:
|
23
|
-
|
24
|
-
Start Easypay call:
|
25
|
-
|
26
|
-
* Easypay::Client.new
|
27
|
-
|
28
|
-
If you don't configure your easypay.rb with these params, you can start your object like this:
|
29
|
-
|
30
|
-
* Easypay::Client.new(:easypay_cin => xxxx,
|
31
|
-
:easypay_entity => xxxx,
|
32
|
-
:easypay_user => xxxx,
|
33
|
-
:easypay_code => xxxx,
|
34
|
-
:easypay_ref_type => xxx,
|
35
|
-
:easypay_country => xxxx)
|
36
|
-
|
37
|
-
|
38
|
-
In order to get one payment reference:
|
39
|
-
* Easypay::Client.new.create_reference('token_you_generate', 'value_of_payment', 'client_language', 'client_name', 'client_mobile', 'client_email')
|
40
|
-
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module Easypay
|
2
|
-
class ClientsController < ApplicationController
|
3
|
-
|
4
|
-
unloadable
|
5
|
-
|
6
|
-
def index
|
7
|
-
@atts = params
|
8
|
-
|
9
|
-
@atts[:ep_entity] = params[:e]
|
10
|
-
@atts[:ep_reference] = params[:r]
|
11
|
-
@atts[:ep_value] = params[:v]
|
12
|
-
|
13
|
-
respond_to do |format|
|
14
|
-
format.xml #{ render :xml => render_to_string(:template => 'easypay/notify.xml.builder', :layout => false), :content_type => 'plain/text'}
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
xml.instruct! :xml, :version => "1.0", :encoding => "ISO-8859-1"
|
2
|
-
xml.get_detail do
|
3
|
-
xml.ep_status "ok0"
|
4
|
-
xml.ep_message " "
|
5
|
-
xml.ep_entity @atts[:ep_entity]
|
6
|
-
xml.ep_reference @atts[:ep_reference]
|
7
|
-
xml.ep_value @atts[:ep_value]
|
8
|
-
xml.ep_key 12345
|
9
|
-
xml.ep_d( :PT => "" , :EN => "" , :ES => "" , :v => "" )
|
10
|
-
end
|