ecconnect_rails 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +155 -0
- data/app/controllers/ecconnect_rails/base_controller.rb +4 -164
- data/lib/ecconnect_rails.rb +3 -3
- data/{app/models/ecconnect_rails/ecconnect_payment.rb → lib/ecconnect_rails/base_model.rb} +21 -69
- data/lib/ecconnect_rails/controller_actions.rb +169 -0
- data/lib/ecconnect_rails/controller_defaults.rb +14 -0
- data/lib/ecconnect_rails/version.rb +1 -1
- data/spec/controllers/ecconnect_payments_controller_spec.rb +38 -41
- data/spec/dummy/Gemfile.lock +1 -3
- data/spec/dummy/app/controllers/ecconnect_payments_controller.rb +3 -2
- data/spec/dummy/app/models/ecconnect_payment.rb +35 -0
- data/spec/dummy/app/models/user.rb +5 -0
- data/{app/views/ecconnect_rails → spec/dummy/app/views}/ecconnect_payments/failure.html.erb +0 -0
- data/{app/views/ecconnect_rails → spec/dummy/app/views}/ecconnect_payments/new.html.erb +0 -0
- data/{app/views/ecconnect_rails → spec/dummy/app/views}/ecconnect_payments/notify.html.erb +0 -0
- data/{app/views/ecconnect_rails → spec/dummy/app/views}/ecconnect_payments/show.html.erb +0 -0
- data/{app/views/ecconnect_rails → spec/dummy/app/views}/ecconnect_payments/success.html.erb +0 -0
- data/spec/dummy/config/routes.rb +8 -1
- data/spec/dummy/log/test.log +46 -0
- data/spec/factories/econnect_payment.rb +3 -1
- data/spec/features/ecconnect_payments_spec.rb +4 -4
- data/spec/models/ecconnect_rails/ecconnect_payment_spec.rb +2 -2
- data/spec/routing/ecconnect_rails/ecconnect_payments_routing_spec.rb +8 -8
- metadata +24 -41
- data/README.rdoc +0 -5
- data/app/controllers/ecconnect_rails/application_controller.rb +0 -4
- data/app/controllers/ecconnect_rails/ecconnect_payments_controller.rb +0 -4
- data/config/routes.rb +0 -9
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OTlkMmVlZjQ1MzEzZjgyNDM1ZWUzMTYzNGEyODdmMWNhZTZjNjM0NA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OGY3ZjI5ZGU1NWQyM2QyNDkwNzUxNDBhNTg3MzNjZWJlMTE2MTQzYQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YmFmNGY5YjkwODg1MDlmNzAwMWZjNTdhMGU0OWQyNjU5NGRmMzdkNWFhZjM4
|
10
|
+
YTcxMmVkM2JiNTU5NjczMGU4NDg2MGFiZDMwZGNjMTZiN2QzMGZiNDBkZWE3
|
11
|
+
NmQ2Njg2MDYwNmYyNjc3MDdhODdjMzcwZjg1Mjc3YjU3OTNlYWE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NzU0NDdhY2Y5MzVmZTNhODRkYjZkZTk1ZDIwYzQ4NWIxY2NjYTNhNDg3OTEw
|
14
|
+
NDhjYTBjMmVkYTA3NGI0ZjIyODk5OWIxNzU0M2YxMWM4ZTFhMzZhNzY4MGQ3
|
15
|
+
NjhiOTgxYTUxMjg1ZWQzYTI5ZTM1MjBlOTlhNDdjMTVkMGE0NjE=
|
data/README.md
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
#Ecconnect Rails
|
2
|
+
|
3
|
+
Rails engine for integration with eCommerceConnect
|
4
|
+
|
5
|
+
##Installation
|
6
|
+
|
7
|
+
You can let bundler install Ecconnect Rails by adding this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'ecconnect_rails'
|
11
|
+
```
|
12
|
+
And then execute:
|
13
|
+
```sh
|
14
|
+
$ bundle install
|
15
|
+
```
|
16
|
+
Or install it yourself with:
|
17
|
+
```sh
|
18
|
+
$ gem install ecconnect_rails
|
19
|
+
```
|
20
|
+
|
21
|
+
##Basic Usage
|
22
|
+
|
23
|
+
### Add initiliazer
|
24
|
+
|
25
|
+
|
26
|
+
config/initiliazers/ecconnect_rails.rb
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
EcconnectRails.default_options = { merchant_id: "merchant_id",
|
30
|
+
terminal_id: "terminal_id",
|
31
|
+
request_url: "url",
|
32
|
+
cert_path: Rails.root.join(paht_to_cert)
|
33
|
+
pem_path: Rails.root.join(paht_to_pem)
|
34
|
+
currency_id: currency_number }
|
35
|
+
```
|
36
|
+
|
37
|
+
Example
|
38
|
+
```ruby
|
39
|
+
EcconnectRails.default_options = { merchant_id: "12345",
|
40
|
+
terminal_id: "E1234",
|
41
|
+
request_url: "https://secure.upc.ua/ecgtest/enter",
|
42
|
+
cert_path: Rails.root.join('certs/test-server.cert')
|
43
|
+
pem_path: Rails.root.join('certs/12345.pem')
|
44
|
+
currency_id: 980 }
|
45
|
+
```
|
46
|
+
|
47
|
+
### Create model
|
48
|
+
|
49
|
+
#### Mongoid
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
require 'autoinc'
|
53
|
+
|
54
|
+
class EcconnectPayment
|
55
|
+
include EcconnectRails::BaseModel
|
56
|
+
include Mongoid::Document
|
57
|
+
include Mongoid::Timestamps
|
58
|
+
include Mongoid::Autoinc
|
59
|
+
|
60
|
+
field :delay, type: Boolean
|
61
|
+
field :merchant_id, type: Integer
|
62
|
+
field :terminal_id, type: String
|
63
|
+
field :tran_code, type: String
|
64
|
+
field :approval_code, type: Integer
|
65
|
+
field :locale, type: String
|
66
|
+
field :proxy_pan, type: String
|
67
|
+
field :currency_id, type: Integer
|
68
|
+
field :alt_currency_id, type: Integer
|
69
|
+
field :amount, type: Float
|
70
|
+
field :alt_amount, type: Integer
|
71
|
+
field :order_id, type: Integer
|
72
|
+
field :income_signature, type: String
|
73
|
+
field :purchase_desc, type: String
|
74
|
+
field :email, type: String
|
75
|
+
field :sd, type: String
|
76
|
+
field :xid, type: String
|
77
|
+
field :rrn, type: String
|
78
|
+
|
79
|
+
increments :order_id, seed: 1
|
80
|
+
|
81
|
+
ecconnect_payment
|
82
|
+
end
|
83
|
+
```
|
84
|
+
#### ActiveRecord
|
85
|
+
|
86
|
+
### Create controller
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
class EcconnectPaymentsController < EcconnectRails::BaseController
|
90
|
+
|
91
|
+
private
|
92
|
+
def success_right_signature ecconnect_payment
|
93
|
+
#Job after recieved success request with right signature
|
94
|
+
end
|
95
|
+
end
|
96
|
+
```
|
97
|
+
|
98
|
+
You can override other private methods
|
99
|
+
```ruby
|
100
|
+
private
|
101
|
+
def success_wrong_signature ecconnect_payment
|
102
|
+
#Job after recieved success request with wrong signature
|
103
|
+
end
|
104
|
+
|
105
|
+
def failure_right_signature ecconnect_payment
|
106
|
+
#Job after recieved failure request with right signature
|
107
|
+
end
|
108
|
+
|
109
|
+
def failure_wrong_signature ecconnect_payment
|
110
|
+
#Job after recieved failure request with wrong signature
|
111
|
+
end
|
112
|
+
|
113
|
+
def notify_right_signature ecconnect_payment
|
114
|
+
#Job after recieved notify request with right signature and wrong code
|
115
|
+
end
|
116
|
+
|
117
|
+
def notify_right_signature_and_code ecconnect_payment
|
118
|
+
#Job after recieved notify request with right signature and code
|
119
|
+
end
|
120
|
+
|
121
|
+
def notify_wrong_signature ecconnect_payment
|
122
|
+
#Job after recieved notify request with wrong signature
|
123
|
+
end
|
124
|
+
|
125
|
+
def forward_url_success
|
126
|
+
#Return success url for notify
|
127
|
+
end
|
128
|
+
|
129
|
+
def forward_url_failure
|
130
|
+
#Return failure url for notify
|
131
|
+
end
|
132
|
+
```
|
133
|
+
### Add routes
|
134
|
+
|
135
|
+
```ruby
|
136
|
+
resources :ecconnect_payments, only: [:new, :create, :show] do
|
137
|
+
collection do
|
138
|
+
post 'success'
|
139
|
+
post 'failure'
|
140
|
+
post 'notify'
|
141
|
+
end
|
142
|
+
end
|
143
|
+
```
|
144
|
+
|
145
|
+
##TO DO
|
146
|
+
|
147
|
+
- Add generators for ActiveRecord
|
148
|
+
- Add specs for ActiveRecord ecconnect model
|
149
|
+
- Add generators for Views
|
150
|
+
- Add Inherited Resources to BasicController
|
151
|
+
|
152
|
+
##License
|
153
|
+
|
154
|
+
|
155
|
+
MIT
|
@@ -1,170 +1,10 @@
|
|
1
1
|
module EcconnectRails
|
2
2
|
class BaseController < ActionController::Base
|
3
|
-
|
4
|
-
|
5
|
-
@ecconnect_payment = EcconnectRails::EcconnectPayment.new
|
6
|
-
respond_to do |format|
|
7
|
-
format.html do
|
8
|
-
render 'new'
|
9
|
-
end
|
10
|
-
format.json{ render json: @ecconnect_payment.ecconnect_json }
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def create
|
15
|
-
@ecconnect_payment = EcconnectRails::EcconnectPayment.new params[:ecconnect_payment]
|
16
|
-
if @ecconnect_payment.save
|
17
|
-
respond_to do |format|
|
18
|
-
format.html{ redirect_to ecconnect_payment_path(@ecconnect_payment.to_param) }
|
19
|
-
format.json{ render json: @ecconnect_payment.ecconnect_json }
|
20
|
-
end
|
21
|
-
else
|
22
|
-
respond_to do |format|
|
23
|
-
format.html{ render 'new' }
|
24
|
-
format.json{ render json: @ecconnect_payment.ecconnect_json }
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def show
|
30
|
-
@ecconnect_payment = EcconnectRails::EcconnectPayment.find params[:id]
|
31
|
-
respond_to do |format|
|
32
|
-
format.html do
|
33
|
-
render 'show'
|
34
|
-
end
|
35
|
-
format.json{ render json: @ecconnect_payment.ecconnect_json }
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def check
|
40
|
-
@ecconnect_payment = EcconnectRails::EcconnectPayment.find params[:id]
|
41
|
-
respond_to do |format|
|
42
|
-
format.html do
|
43
|
-
render 'check'
|
44
|
-
end
|
45
|
-
format.json{ render json: @ecconnect_payment.ecconnect_json }
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def failure
|
50
|
-
@ecconnect_payment = EcconnectRails::EcconnectPayment.where(order_id: params[:OrderID]).limit(1).first
|
51
|
-
@ecconnect_payment.update_by params
|
52
|
-
if @ecconnect_payment.check_signature
|
53
|
-
failure_right_signature @ecconnect_payment
|
54
|
-
failure_respond @ecconnect_payment
|
55
|
-
else
|
56
|
-
failure_wrong_signature @ecconnect_payment
|
57
|
-
wrong_signature_respond @ecconnect_payment
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def success
|
62
|
-
@ecconnect_payment = EcconnectRails::EcconnectPayment.where(order_id: params[:OrderID]).limit(1).first
|
63
|
-
@ecconnect_payment.update_by params
|
64
|
-
if @ecconnect_payment.check_signature
|
65
|
-
if @ecconnect_payment.tran_code == '000'
|
66
|
-
success_right_signature @ecconnect_payment
|
67
|
-
success_respond @ecconnect_payment
|
68
|
-
else
|
69
|
-
failure_right_signature @ecconnect_payment
|
70
|
-
failure_respond @ecconnect_payment
|
71
|
-
end
|
72
|
-
else
|
73
|
-
success_wrong_signature @ecconnect_payment
|
74
|
-
wrong_signature_respond @ecconnect_payment
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def notify
|
79
|
-
@ecconnect_payment = EcconnectRails::EcconnectPayment.where(order_id: params[:OrderID]).limit(1).first
|
80
|
-
@ecconnect_payment.update_by params
|
81
|
-
if @ecconnect_payment.check_signature
|
82
|
-
if @ecconnect_payment.tran_code == '000'
|
83
|
-
@action = 'approve'
|
84
|
-
@forward_url = forward_url_success
|
85
|
-
notify_right_signature_and_code @ecconnect_payment
|
86
|
-
notify_respond @ecconnect_payment
|
87
|
-
else
|
88
|
-
@action = 'reverse'
|
89
|
-
@reason = I18n.t "ecconnect_rails.codes.code_503"
|
90
|
-
@forward_url = forward_url_failure
|
91
|
-
notify_right_signature @ecconnect_payment
|
92
|
-
notify_respond @ecconnect_payment
|
93
|
-
end
|
94
|
-
else
|
95
|
-
@action = 'reverse'
|
96
|
-
@reason = I18n.t "ecconnect_rails.codes.code_405"
|
97
|
-
@forward_url = forward_url_failure
|
98
|
-
notify_wrong_signature @ecconnect_payment
|
99
|
-
notify_respond @ecconnect_payment
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
private
|
104
|
-
|
105
|
-
def forward_url_success
|
106
|
-
end
|
107
|
-
|
108
|
-
def forward_url_failure
|
109
|
-
end
|
3
|
+
extend EcconnectRails::ControllerDefaults
|
4
|
+
include EcconnectRails::ControllerActions
|
110
5
|
|
111
|
-
|
112
|
-
respond_to do |format|
|
113
|
-
format.html do
|
114
|
-
render 'notify', layout: nil
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
6
|
+
defaults resource_class: EcconnectPayment
|
118
7
|
|
119
|
-
|
120
|
-
respond_to do |format|
|
121
|
-
format.html do
|
122
|
-
flash[:notice] = I18n.t "ecconnect_rails.success"
|
123
|
-
render 'success'
|
124
|
-
end
|
125
|
-
format.json{ render json: @ecconnect_payment.ecconnect_json }
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
def failure_respond ecconnect_payment
|
130
|
-
respond_to do |format|
|
131
|
-
format.html do
|
132
|
-
flash[:error] = I18n.t "ecconnect_rails.codes.code_#{@ecconnect_payment.tran_code}"
|
133
|
-
render 'failure'
|
134
|
-
end
|
135
|
-
format.json{ render json: @ecconnect_payment.ecconnect_json }
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
def wrong_signature_respond ecconnect_payment
|
140
|
-
respond_to do |format|
|
141
|
-
format.html do
|
142
|
-
flash[:error] = I18n.t "ecconnect_rails.wrong_signature"
|
143
|
-
render 'failure'
|
144
|
-
end
|
145
|
-
format.json{ render json: @ecconnect_payment.ecconnect_json }
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
def success_right_signature ecconnect_payment
|
150
|
-
end
|
151
|
-
|
152
|
-
def success_wrong_signature ecconnect_payment
|
153
|
-
end
|
154
|
-
|
155
|
-
def failure_right_signature ecconnect_payment
|
156
|
-
end
|
157
|
-
|
158
|
-
def failure_wrong_signature ecconnect_payment
|
159
|
-
end
|
160
|
-
|
161
|
-
def notify_right_signature ecconnect_payment
|
162
|
-
end
|
163
|
-
|
164
|
-
def notify_right_signature_and_code ecconnect_payment
|
165
|
-
end
|
166
|
-
|
167
|
-
def notify_wrong_signature ecconnect_payment
|
168
|
-
end
|
8
|
+
respond_to :json, :html
|
169
9
|
end
|
170
10
|
end
|
data/lib/ecconnect_rails.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'ecconnect_rails/engine'
|
2
|
+
require 'ecconnect_rails/base_model'
|
3
|
+
require 'ecconnect_rails/controller_defaults'
|
4
|
+
require 'ecconnect_rails/controller_actions'
|
2
5
|
|
3
6
|
module EcconnectRails
|
4
7
|
ECCONNECT_VERSION = 1
|
5
8
|
|
6
9
|
@default_options = {}
|
7
10
|
class << self; attr_accessor :default_options; end
|
8
|
-
|
9
|
-
#class Exception < ::Exception; end
|
10
|
-
#class InvalidResponse < Exception; end
|
11
11
|
end
|
@@ -1,41 +1,21 @@
|
|
1
1
|
require 'digest/sha1'
|
2
2
|
require 'base64'
|
3
3
|
require 'openssl'
|
4
|
-
require 'autoinc'
|
5
4
|
module EcconnectRails
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
field :currency_id, type: Integer
|
21
|
-
field :alt_currency_id, type: Integer
|
22
|
-
field :amount, type: Float
|
23
|
-
field :alt_amount, type: Integer
|
24
|
-
field :order_id, type: Integer
|
25
|
-
field :income_signature, type: String
|
26
|
-
field :purchase_desc, type: String
|
27
|
-
field :email, type: String
|
28
|
-
field :sd, type: String
|
29
|
-
field :xid, type: String
|
30
|
-
field :rrn, type: String
|
31
|
-
|
32
|
-
increments :order_id, seed: 1
|
33
|
-
|
34
|
-
belongs_to :payer
|
35
|
-
|
36
|
-
validates :merchant_id, :terminal_id, :currency_id, :amount, presence: true
|
37
|
-
before_validation :set_terminal_id, :set_merchant_id, :set_locale, :set_currency_id
|
38
|
-
before_create :set_tran_code
|
5
|
+
module BaseModel
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
CURRENCY = [980, 643, 840, 978]
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
def ecconnect_payment
|
14
|
+
validates :merchant_id, :terminal_id, :currency_id, :amount, presence: true
|
15
|
+
before_validation :set_terminal_id, :set_merchant_id, :set_locale, :set_currency_id
|
16
|
+
before_create :set_tran_code
|
17
|
+
end
|
18
|
+
end
|
39
19
|
|
40
20
|
def purchase_time
|
41
21
|
self.created_at.strftime("%Y%m%d%H%M%S%z") if self.created_at
|
@@ -69,35 +49,19 @@ module EcconnectRails
|
|
69
49
|
self.as_json(except: [:income_signature, :proxy_pan, :rrn, :sd, :xid, :approval_code], methods: [:purchase_time, :signature, :code])
|
70
50
|
end
|
71
51
|
|
72
|
-
#def check_payment
|
73
|
-
# uri = URI.parse EcconnectRails.default_options[:check_url]
|
74
|
-
# http = Net::HTTP.new uri.host, uri.port
|
75
|
-
# http.use_ssl = true
|
76
|
-
# request = Net::HTTP::Post.new uri.path
|
77
|
-
# request.set_form_data check_payment_data
|
78
|
-
# response = http.request request
|
79
|
-
#end
|
80
|
-
|
81
52
|
def check_signature
|
82
53
|
cert.public_key.verify OpenSSL::Digest::SHA1.new, Base64.decode64(self.income_signature), check_data
|
83
54
|
end
|
84
55
|
|
85
56
|
def update_by params
|
86
57
|
self.update_attributes :proxy_pan => params[:ProxyPan],
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
:email => params[:Email],
|
95
|
-
:sd => params[:SD],
|
96
|
-
:tran_code => params[:TranCode]
|
97
|
-
#:terminal_id => params[:TerminalID],
|
98
|
-
#:total_amount => params[:TotalAmount],
|
99
|
-
#:alt_total_amount => params[:AltTotalAmount],
|
100
|
-
#:alt_currency => params[:AltCurrency]
|
58
|
+
:approval_code => params[:ApprovalCode],
|
59
|
+
:income_signature => params[:Signature],
|
60
|
+
:rrn => params[:Rrn],
|
61
|
+
:xid => params[:XID],
|
62
|
+
:email => params[:Email],
|
63
|
+
:sd => params[:SD],
|
64
|
+
:tran_code => params[:TranCode]
|
101
65
|
end
|
102
66
|
|
103
67
|
|
@@ -122,18 +86,6 @@ module EcconnectRails
|
|
122
86
|
self.tran_code = nil
|
123
87
|
end
|
124
88
|
|
125
|
-
#def check_payment_data
|
126
|
-
# data = {}
|
127
|
-
# data['MerchantID'] = self.merchant_id if self.merchant_id
|
128
|
-
# data['TerminalID'] = self.terminal_id if self.terminal_id
|
129
|
-
# data['TotalAmount'] = self.upc_amount if self.upc_amount
|
130
|
-
# data['AltTotalAmount'] = self.alt_amount if self.alt_amount
|
131
|
-
# data['Currency'] = self.currency_id if self.currenc_id
|
132
|
-
# data['AltCurrency'] = self.alt_currency_id if self.alt_currency_id
|
133
|
-
# data['OrderID'] = self.order_id if self.order_id
|
134
|
-
# data
|
135
|
-
#end
|
136
|
-
|
137
89
|
def sign data
|
138
90
|
Base64.encode64(pem.sign(OpenSSL::Digest::SHA1.new, data)).gsub(/\n/, '')
|
139
91
|
end
|
@@ -0,0 +1,169 @@
|
|
1
|
+
module EcconnectRails
|
2
|
+
module ControllerActions
|
3
|
+
def new
|
4
|
+
@ecconnect_payment = resource_class.new
|
5
|
+
respond_to do |format|
|
6
|
+
format.html do
|
7
|
+
render 'new'
|
8
|
+
end
|
9
|
+
format.json{ render json: @ecconnect_payment.ecconnect_json }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def create
|
14
|
+
@ecconnect_payment = resource_class.new params[:ecconnect_payment]
|
15
|
+
if @ecconnect_payment.save
|
16
|
+
respond_to do |format|
|
17
|
+
format.html{ redirect_to ecconnect_payment_path(@ecconnect_payment.to_param) }
|
18
|
+
format.json{ render json: @ecconnect_payment.ecconnect_json }
|
19
|
+
end
|
20
|
+
else
|
21
|
+
respond_to do |format|
|
22
|
+
format.html{ render 'new' }
|
23
|
+
format.json{ render json: @ecconnect_payment.ecconnect_json }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def show
|
29
|
+
@ecconnect_payment = resource_class.find params[:id]
|
30
|
+
respond_to do |format|
|
31
|
+
format.html do
|
32
|
+
render 'show'
|
33
|
+
end
|
34
|
+
format.json{ render json: @ecconnect_payment.ecconnect_json }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def check
|
39
|
+
@ecconnect_payment = resource_class.find params[:id]
|
40
|
+
respond_to do |format|
|
41
|
+
format.html do
|
42
|
+
render 'check'
|
43
|
+
end
|
44
|
+
format.json{ render json: @ecconnect_payment.ecconnect_json }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def failure
|
49
|
+
@ecconnect_payment = resource_class.where(order_id: params[:OrderID]).limit(1).first
|
50
|
+
@ecconnect_payment.update_by params
|
51
|
+
if @ecconnect_payment.check_signature
|
52
|
+
failure_right_signature @ecconnect_payment
|
53
|
+
failure_respond @ecconnect_payment
|
54
|
+
else
|
55
|
+
failure_wrong_signature @ecconnect_payment
|
56
|
+
wrong_signature_respond @ecconnect_payment
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def success
|
61
|
+
@ecconnect_payment = resource_class.where(order_id: params[:OrderID]).limit(1).first
|
62
|
+
@ecconnect_payment.update_by params
|
63
|
+
if @ecconnect_payment.check_signature
|
64
|
+
if @ecconnect_payment.tran_code == '000'
|
65
|
+
success_right_signature @ecconnect_payment
|
66
|
+
success_respond @ecconnect_payment
|
67
|
+
else
|
68
|
+
failure_right_signature @ecconnect_payment
|
69
|
+
failure_respond @ecconnect_payment
|
70
|
+
end
|
71
|
+
else
|
72
|
+
success_wrong_signature @ecconnect_payment
|
73
|
+
wrong_signature_respond @ecconnect_payment
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def notify
|
78
|
+
@ecconnect_payment = resource_class.where(order_id: params[:OrderID]).limit(1).first
|
79
|
+
@ecconnect_payment.update_by params
|
80
|
+
if @ecconnect_payment.check_signature
|
81
|
+
if @ecconnect_payment.tran_code == '000'
|
82
|
+
@action = 'approve'
|
83
|
+
@forward_url = forward_url_success
|
84
|
+
notify_right_signature_and_code @ecconnect_payment
|
85
|
+
notify_respond @ecconnect_payment
|
86
|
+
else
|
87
|
+
@action = 'reverse'
|
88
|
+
@reason = I18n.t "ecconnect_rails.codes.code_503"
|
89
|
+
@forward_url = forward_url_failure
|
90
|
+
notify_right_signature @ecconnect_payment
|
91
|
+
notify_respond @ecconnect_payment
|
92
|
+
end
|
93
|
+
else
|
94
|
+
@action = 'reverse'
|
95
|
+
@reason = I18n.t "ecconnect_rails.codes.code_405"
|
96
|
+
@forward_url = forward_url_failure
|
97
|
+
notify_wrong_signature @ecconnect_payment
|
98
|
+
notify_respond @ecconnect_payment
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
private
|
103
|
+
|
104
|
+
def forward_url_success
|
105
|
+
end
|
106
|
+
|
107
|
+
def forward_url_failure
|
108
|
+
end
|
109
|
+
|
110
|
+
def notify_respond ecconnect_payment
|
111
|
+
respond_to do |format|
|
112
|
+
format.html do
|
113
|
+
render 'notify', layout: nil
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def success_respond ecconnect_payment
|
119
|
+
respond_to do |format|
|
120
|
+
format.html do
|
121
|
+
flash[:notice] = I18n.t "ecconnect_rails.success"
|
122
|
+
render 'success'
|
123
|
+
end
|
124
|
+
format.json{ render json: @ecconnect_payment.ecconnect_json }
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def failure_respond ecconnect_payment
|
129
|
+
respond_to do |format|
|
130
|
+
format.html do
|
131
|
+
flash[:error] = I18n.t "ecconnect_rails.codes.code_#{@ecconnect_payment.tran_code}"
|
132
|
+
render 'failure'
|
133
|
+
end
|
134
|
+
format.json{ render json: @ecconnect_payment.ecconnect_json }
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def wrong_signature_respond ecconnect_payment
|
139
|
+
respond_to do |format|
|
140
|
+
format.html do
|
141
|
+
flash[:error] = I18n.t "ecconnect_rails.wrong_signature"
|
142
|
+
render 'failure'
|
143
|
+
end
|
144
|
+
format.json{ render json: @ecconnect_payment.ecconnect_json }
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
def success_right_signature ecconnect_payment
|
149
|
+
end
|
150
|
+
|
151
|
+
def success_wrong_signature ecconnect_payment
|
152
|
+
end
|
153
|
+
|
154
|
+
def failure_right_signature ecconnect_payment
|
155
|
+
end
|
156
|
+
|
157
|
+
def failure_wrong_signature ecconnect_payment
|
158
|
+
end
|
159
|
+
|
160
|
+
def notify_right_signature ecconnect_payment
|
161
|
+
end
|
162
|
+
|
163
|
+
def notify_right_signature_and_code ecconnect_payment
|
164
|
+
end
|
165
|
+
|
166
|
+
def notify_wrong_signature ecconnect_payment
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module EcconnectRails
|
2
|
+
module ControllerDefaults
|
3
|
+
|
4
|
+
protected
|
5
|
+
def defaults options
|
6
|
+
raise ArgumentError, 'Class method :defaults expects a hash of options.' unless options.is_a? Hash
|
7
|
+
|
8
|
+
options.symbolize_keys!
|
9
|
+
|
10
|
+
class_attribute :resource_class, :instance_writer => false unless self.respond_to? :resource_class
|
11
|
+
self.resource_class = options[:resource_class] if options.key?(:resource_class)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
4
|
-
routes { EcconnectRails::Engine.routes }
|
3
|
+
describe EcconnectPaymentsController do
|
4
|
+
#routes { EcconnectRails::Engine.routes }
|
5
5
|
let(:payment){ FactoryGirl.create :ecconnect_payment }
|
6
6
|
describe "GET new" do
|
7
7
|
before{ get :new }
|
8
8
|
it{ response.status.should == 200 }
|
9
|
-
it{ assigns(:ecconnect_payment).should be_a_new(
|
9
|
+
it{ assigns(:ecconnect_payment).should be_a_new(EcconnectPayment) }
|
10
10
|
end
|
11
11
|
|
12
12
|
describe "GET show" do
|
@@ -19,7 +19,7 @@ describe EcconnectRails::EcconnectPaymentsController do
|
|
19
19
|
before{ post :create, ecconnect_payment: { amount: amount } }
|
20
20
|
context "right data" do
|
21
21
|
let(:amount){ 23 }
|
22
|
-
it{ response.should redirect_to
|
22
|
+
it{ response.should redirect_to ecconnect_payment_path EcconnectPayment.last }
|
23
23
|
end
|
24
24
|
context "wrong data" do
|
25
25
|
let(:amount){ nil }
|
@@ -31,27 +31,26 @@ describe EcconnectRails::EcconnectPaymentsController do
|
|
31
31
|
['000', 101, 105, 108, 111, 116, 130, 290, 291, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411,
|
32
32
|
412, 413, 420, 421, 430, 431, 432, 433, 434, 435, 436, 438, 439, 440, 441, 450, 501, 502, 503,
|
33
33
|
504, 505, 506, 507, 508, 509, 510, 511, 601].each do |code|
|
34
|
-
let(:payment){ FactoryGirl.create :payment }
|
35
34
|
context "right signature" do
|
36
|
-
before{
|
37
|
-
before{ post :failure, {'TranCode' => code.to_s} }
|
35
|
+
before{ EcconnectPayment.any_instance.stub(:check_signature).and_return(true) }
|
36
|
+
before{ post :failure, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }
|
38
37
|
it{ response.should render_template 'failure' }
|
39
38
|
it{ flash[:error].should == I18n.t("ecconnect_rails.codes.code_#{code}" ) }
|
40
39
|
end
|
41
40
|
context "wrong signature" do
|
42
|
-
before{
|
43
|
-
before{ post :failure, {'TranCode' => code.to_s} }
|
41
|
+
before{ EcconnectPayment.any_instance.stub(:check_signature).and_return(false) }
|
42
|
+
before{ post :failure, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }
|
44
43
|
it{ response.should render_template 'failure' }
|
45
44
|
it{ flash[:error].should == I18n.t("ecconnect_rails.wrong_signature") }
|
46
45
|
end
|
47
46
|
describe "override methods" do
|
48
47
|
context "right signature" do
|
49
|
-
before{
|
50
|
-
it{ expect{ post :failure, {'TranCode' => code.to_s} }.to change{TestModel.count}.by(3) }
|
48
|
+
before{ EcconnectPayment.any_instance.stub(:check_signature).and_return(true) }
|
49
|
+
it{ expect{ post :failure, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }.to change{TestModel.count}.by(3) }
|
51
50
|
end
|
52
51
|
context "wrong signature" do
|
53
|
-
before{
|
54
|
-
it{ expect{ post :failure, {'TranCode' => code.to_s} }.to change{TestModel.count}.by(4) }
|
52
|
+
before{ EcconnectPayment.any_instance.stub(:check_signature).and_return(false) }
|
53
|
+
it{ expect{ post :failure, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }.to change{TestModel.count}.by(4) }
|
55
54
|
end
|
56
55
|
end
|
57
56
|
end
|
@@ -61,10 +60,9 @@ describe EcconnectRails::EcconnectPaymentsController do
|
|
61
60
|
['000', 101, 105, 108, 111, 116, 130, 290, 291, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411,
|
62
61
|
412, 413, 420, 421, 430, 431, 432, 433, 434, 435, 436, 438, 439, 440, 441, 450, 501, 502, 503,
|
63
62
|
504, 505, 506, 507, 508, 509, 510, 511, 601].each do |code|
|
64
|
-
let(:payment){ FactoryGirl.create :payment }
|
65
63
|
context "right signature" do
|
66
|
-
before{
|
67
|
-
before{ post :success, {'TranCode' => code.to_s} }
|
64
|
+
before{ EcconnectPayment.any_instance.stub(:check_signature).and_return(true) }
|
65
|
+
before{ post :success, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }
|
68
66
|
it do
|
69
67
|
if code == "000"
|
70
68
|
response.should render_template 'success'
|
@@ -81,24 +79,24 @@ describe EcconnectRails::EcconnectPaymentsController do
|
|
81
79
|
end
|
82
80
|
end
|
83
81
|
context "wrong signature" do
|
84
|
-
before{
|
85
|
-
before{ post :success, {'TranCode' => code.to_s} }
|
82
|
+
before{ EcconnectPayment.any_instance.stub(:check_signature).and_return(false) }
|
83
|
+
before{ post :success, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }
|
86
84
|
it{ response.should render_template 'failure' }
|
87
85
|
it{ flash[:error].should == I18n.t("ecconnect_rails.wrong_signature") }
|
88
86
|
end
|
89
87
|
describe "override methods" do
|
90
88
|
context "right signature" do
|
91
89
|
if code == "000"
|
92
|
-
before{
|
93
|
-
it{ expect{ post :success, {'TranCode' => code.to_s} }.to change{TestModel.count}.by(1) }
|
90
|
+
before{ EcconnectPayment.any_instance.stub(:check_signature).and_return(true) }
|
91
|
+
it{ expect{ post :success, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }.to change{TestModel.count}.by(1) }
|
94
92
|
else
|
95
|
-
before{
|
96
|
-
it{ expect{ post :success, {'TranCode' => code.to_s} }.to change{TestModel.count}.by(3) }
|
93
|
+
before{ EcconnectPayment.any_instance.stub(:check_signature).and_return(true) }
|
94
|
+
it{ expect{ post :success, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }.to change{TestModel.count}.by(3) }
|
97
95
|
end
|
98
96
|
end
|
99
97
|
context "wrong signature" do
|
100
|
-
before{
|
101
|
-
it{ expect{ post :success, {'TranCode' => code.to_s} }.to change{TestModel.count}.by(2) }
|
98
|
+
before{ EcconnectPayment.any_instance.stub(:check_signature).and_return(false) }
|
99
|
+
it{ expect{ post :success, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }.to change{TestModel.count}.by(2) }
|
102
100
|
end
|
103
101
|
end
|
104
102
|
end
|
@@ -108,10 +106,9 @@ describe EcconnectRails::EcconnectPaymentsController do
|
|
108
106
|
['000', 101, 105, 108, 111, 116, 130, 290, 291, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411,
|
109
107
|
412, 413, 420, 421, 430, 431, 432, 433, 434, 435, 436, 438, 439, 440, 441, 450, 501, 502, 503,
|
110
108
|
504, 505, 506, 507, 508, 509, 510, 511, 601].each do |code|
|
111
|
-
let(:payment){ FactoryGirl.create :payment }
|
112
109
|
context "right signature" do
|
113
|
-
before{
|
114
|
-
before{ post :notify, {'TranCode' => code.to_s} }
|
110
|
+
before{ EcconnectPayment.any_instance.stub(:check_signature).and_return(true) }
|
111
|
+
before{ post :notify, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }
|
115
112
|
it do
|
116
113
|
if code == "000"
|
117
114
|
response.should render_template 'notify'
|
@@ -127,8 +124,8 @@ describe EcconnectRails::EcconnectPaymentsController do
|
|
127
124
|
end
|
128
125
|
end
|
129
126
|
context "wrong signature" do
|
130
|
-
before{
|
131
|
-
before{ post :notify, {'TranCode' => code.to_s} }
|
127
|
+
before{ EcconnectPayment.any_instance.stub(:check_signature).and_return(false) }
|
128
|
+
before{ post :notify, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }
|
132
129
|
it{ response.should render_template 'notify' }
|
133
130
|
it{ assigns(:action) == 'reverse' }
|
134
131
|
it{ assigns(:reason) == I18n.t("ecconnect_rails.codes.code_405") }
|
@@ -137,29 +134,29 @@ describe EcconnectRails::EcconnectPaymentsController do
|
|
137
134
|
describe "override methods" do
|
138
135
|
context "right signature && right signature and code" do
|
139
136
|
if code == "000" #right signature and code
|
140
|
-
before{
|
141
|
-
it{ expect{ post :notify, {'TranCode' => code.to_s} }.to change{TestModel.count}.by(6) }
|
137
|
+
before{ EcconnectPayment.any_instance.stub(:check_signature).and_return(true) }
|
138
|
+
it{ expect{ post :notify, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }.to change{TestModel.count}.by(6) }
|
142
139
|
context "override url" do
|
143
|
-
before{
|
144
|
-
before{ post :notify, {'TranCode' => code.to_s} }
|
140
|
+
before{ EcconnectPaymentsController.any_instance.stub(:forward_url_success).and_return('http://google.com') }
|
141
|
+
before{ post :notify, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }
|
145
142
|
it{ assigns(:forward_url) == 'http://google.com' }
|
146
143
|
end
|
147
144
|
else #right signature
|
148
|
-
before{
|
149
|
-
it{ expect{ post :notify, {'TranCode' => code.to_s} }.to change{TestModel.count}.by(5) }
|
145
|
+
before{ EcconnectPayment.any_instance.stub(:check_signature).and_return(true) }
|
146
|
+
it{ expect{ post :notify, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }.to change{TestModel.count}.by(5) }
|
150
147
|
context "override url" do
|
151
|
-
before{
|
152
|
-
before{ post :notify, {'TranCode' => code.to_s} }
|
148
|
+
before{ EcconnectPaymentsController.any_instance.stub(:forward_url_failure).and_return('http://google.com.ua') }
|
149
|
+
before{ post :notify, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }
|
153
150
|
it{ assigns(:forward_url) == 'http://google.com.ua' }
|
154
151
|
end
|
155
152
|
end
|
156
153
|
end
|
157
154
|
context "wrong signature" do
|
158
|
-
before{
|
159
|
-
it{ expect{ post :notify, {'TranCode' => code.to_s} }.to change{TestModel.count}.by(7) }
|
155
|
+
before{ EcconnectPayment.any_instance.stub(:check_signature).and_return(false) }
|
156
|
+
it{ expect{ post :notify, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }.to change{TestModel.count}.by(7) }
|
160
157
|
context "override url" do
|
161
|
-
before{
|
162
|
-
before{ post :notify, {'TranCode' => code.to_s} }
|
158
|
+
before{ EcconnectPaymentsController.any_instance.stub(:forward_url_failure).and_return('http://google.com.ua') }
|
159
|
+
before{ post :notify, {'TranCode' => code.to_s, 'OrderID' => payment.order_id.to_s, 'Signature' => payment.income_signature} }
|
163
160
|
it{ assigns(:forward_url) == 'http://google.com.ua' }
|
164
161
|
end
|
165
162
|
end
|
data/spec/dummy/Gemfile.lock
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
module EcconnectRails
|
1
|
+
#module EcconnectRails
|
2
2
|
class EcconnectPaymentsController < EcconnectRails::BaseController
|
3
|
+
|
3
4
|
private
|
4
5
|
def success_right_signature ecconnect_payment
|
5
6
|
1.times{ TestModel.create! }
|
@@ -29,4 +30,4 @@ module EcconnectRails
|
|
29
30
|
7.times{ TestModel.create! }
|
30
31
|
end
|
31
32
|
end
|
32
|
-
end
|
33
|
+
#end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'autoinc'
|
2
|
+
|
3
|
+
#module EcconnectRails
|
4
|
+
class EcconnectPayment
|
5
|
+
include EcconnectRails::BaseModel
|
6
|
+
include Mongoid::Document
|
7
|
+
include Mongoid::Timestamps
|
8
|
+
include Mongoid::Autoinc
|
9
|
+
|
10
|
+
field :delay, type: Boolean
|
11
|
+
field :merchant_id, type: Integer
|
12
|
+
field :terminal_id, type: String
|
13
|
+
field :tran_code, type: String
|
14
|
+
field :approval_code, type: Integer
|
15
|
+
field :locale, type: String
|
16
|
+
field :proxy_pan, type: String
|
17
|
+
field :currency_id, type: Integer
|
18
|
+
field :alt_currency_id, type: Integer
|
19
|
+
field :amount, type: Float
|
20
|
+
field :alt_amount, type: Integer
|
21
|
+
field :order_id, type: Integer
|
22
|
+
field :income_signature, type: String
|
23
|
+
field :purchase_desc, type: String
|
24
|
+
field :email, type: String
|
25
|
+
field :sd, type: String
|
26
|
+
field :xid, type: String
|
27
|
+
field :rrn, type: String
|
28
|
+
|
29
|
+
increments :order_id, seed: 1
|
30
|
+
|
31
|
+
ecconnect_payment
|
32
|
+
|
33
|
+
belongs_to :user
|
34
|
+
end
|
35
|
+
#end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/spec/dummy/config/routes.rb
CHANGED
@@ -1,4 +1,11 @@
|
|
1
1
|
Rails.application.routes.draw do
|
2
2
|
|
3
|
-
mount EcconnectRails::Engine => "/ecconnect"
|
3
|
+
#mount EcconnectRails::Engine => "/ecconnect"
|
4
|
+
resources :ecconnect_payments, only: [:new, :create, :show] do
|
5
|
+
collection do
|
6
|
+
post 'success'
|
7
|
+
post 'failure'
|
8
|
+
post 'notify'
|
9
|
+
end
|
10
|
+
end
|
4
11
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
MOPED: 127.0.0.1:27017 COMMAND database=admin command={:ismaster=>1} (0.5901ms)
|
2
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:count=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}} (1.6110ms)
|
3
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:findAndModify=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}, :new=>true, :upsert=>true, :update=>{"$inc"=>{"c"=>1}}} (0.3541ms)
|
4
|
+
MOPED: 127.0.0.1:27017 INSERT database=ecconnect_rails_test collection=ecconnect_payments documents=[{"_id"=>"524b093c0f1d0e11bd000001", "amount"=>20.22, "income_signature"=>"123", "terminal_id"=>"E7881970", "merchant_id"=>1753970, "locale"=>"en", "currency_id"=>980, "updated_at"=>2013-10-01 17:41:16 UTC, "created_at"=>2013-10-01 17:41:16 UTC, "order_id"=>15431, "tran_code"=>nil}] flags=[] (0.1159ms)
|
5
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:count=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}} (0.3116ms)
|
6
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:findAndModify=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}, :new=>true, :upsert=>true, :update=>{"$inc"=>{"c"=>1}}} (0.3052ms)
|
7
|
+
MOPED: 127.0.0.1:27017 INSERT database=ecconnect_rails_test collection=ecconnect_payments documents=[{"_id"=>"524b093c0f1d0e11bd000002", "amount"=>20.22, "income_signature"=>"123", "terminal_id"=>"E7881970", "merchant_id"=>1753970, "locale"=>"en", "currency_id"=>980, "updated_at"=>2013-10-01 17:41:16 UTC, "created_at"=>2013-10-01 17:41:16 UTC, "order_id"=>15432, "tran_code"=>nil}] flags=[] (0.0987ms)
|
8
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:count=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}} (0.3870ms)
|
9
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:findAndModify=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}, :new=>true, :upsert=>true, :update=>{"$inc"=>{"c"=>1}}} (0.4389ms)
|
10
|
+
MOPED: 127.0.0.1:27017 INSERT database=ecconnect_rails_test collection=ecconnect_payments documents=[{"_id"=>"524b093c0f1d0e11bd000003", "amount"=>20.22, "income_signature"=>"123", "terminal_id"=>"E7881970", "merchant_id"=>1753970, "locale"=>"en", "currency_id"=>980, "updated_at"=>2013-10-01 17:41:16 UTC, "created_at"=>2013-10-01 17:41:16 UTC, "order_id"=>15433, "tran_code"=>nil}] flags=[] (0.0992ms)
|
11
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:count=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}} (0.3021ms)
|
12
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:findAndModify=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}, :new=>true, :upsert=>true, :update=>{"$inc"=>{"c"=>1}}} (0.3588ms)
|
13
|
+
MOPED: 127.0.0.1:27017 INSERT database=ecconnect_rails_test collection=ecconnect_payments documents=[{"_id"=>"524b093c0f1d0e11bd000004", "amount"=>20.22, "income_signature"=>"123", "terminal_id"=>"E7881970", "merchant_id"=>1753970, "locale"=>"en", "currency_id"=>980, "updated_at"=>2013-10-01 17:41:16 UTC, "created_at"=>2013-10-01 17:41:16 UTC, "order_id"=>15434, "tran_code"=>nil}] flags=[] (0.1030ms)
|
14
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:count=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}} (0.2630ms)
|
15
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:findAndModify=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}, :new=>true, :upsert=>true, :update=>{"$inc"=>{"c"=>1}}} (0.3259ms)
|
16
|
+
MOPED: 127.0.0.1:27017 INSERT database=ecconnect_rails_test collection=ecconnect_payments documents=[{"_id"=>"524b093c0f1d0e11bd000005", "amount"=>20.22, "income_signature"=>"123", "terminal_id"=>"E7881970", "merchant_id"=>1753970, "locale"=>"en", "currency_id"=>980, "updated_at"=>2013-10-01 17:41:16 UTC, "created_at"=>2013-10-01 17:41:16 UTC, "order_id"=>15435, "tran_code"=>nil}] flags=[] (0.1030ms)
|
17
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:count=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}} (0.2730ms)
|
18
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:findAndModify=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}, :new=>true, :upsert=>true, :update=>{"$inc"=>{"c"=>1}}} (0.3211ms)
|
19
|
+
MOPED: 127.0.0.1:27017 INSERT database=ecconnect_rails_test collection=ecconnect_payments documents=[{"_id"=>"524b093c0f1d0e11bd000006", "amount"=>20.22, "income_signature"=>"123", "terminal_id"=>"E7881970", "merchant_id"=>1753970, "locale"=>"en", "currency_id"=>980, "updated_at"=>2013-10-01 17:41:16 UTC, "created_at"=>2013-10-01 17:41:16 UTC, "order_id"=>15436, "tran_code"=>nil}] flags=[] (0.1011ms)
|
20
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:count=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}} (0.4480ms)
|
21
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:findAndModify=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}, :new=>true, :upsert=>true, :update=>{"$inc"=>{"c"=>1}}} (0.5109ms)
|
22
|
+
MOPED: 127.0.0.1:27017 INSERT database=ecconnect_rails_test collection=ecconnect_payments documents=[{"_id"=>"524b093c0f1d0e11bd000007", "amount"=>20.0, "income_signature"=>"123", "tran_code"=>nil, "terminal_id"=>"E7881970", "merchant_id"=>1753970, "locale"=>"en", "currency_id"=>980, "updated_at"=>2013-10-01 17:41:16 UTC, "created_at"=>2013-10-01 17:41:16 UTC, "order_id"=>15437}] flags=[] (0.1280ms)
|
23
|
+
Started GET "/ecconnect_payments/new" for 127.0.0.1 at 2013-10-01 20:41:16 +0300
|
24
|
+
Processing by EcconnectPaymentsController#new as HTML
|
25
|
+
Rendered ecconnect_payments/new.html.erb (3.9ms)
|
26
|
+
Completed 200 OK in 14ms (Views: 13.6ms)
|
27
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:count=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}} (0.4609ms)
|
28
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:findAndModify=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}, :new=>true, :upsert=>true, :update=>{"$inc"=>{"c"=>1}}} (0.3121ms)
|
29
|
+
MOPED: 127.0.0.1:27017 INSERT database=ecconnect_rails_test collection=ecconnect_payments documents=[{"_id"=>"524b093c0f1d0e11bd000008", "amount"=>20.22, "income_signature"=>"123", "terminal_id"=>"E7881970", "merchant_id"=>1753970, "locale"=>"en", "currency_id"=>980, "updated_at"=>2013-10-01 17:41:16 UTC, "created_at"=>2013-10-01 17:41:16 UTC, "order_id"=>15438, "tran_code"=>nil}] flags=[] (0.1159ms)
|
30
|
+
Started POST "/ecconnect_payments" for 127.0.0.1 at 2013-10-01 20:41:16 +0300
|
31
|
+
Processing by EcconnectPaymentsController#create as HTML
|
32
|
+
Parameters: {"utf8"=>"✓", "ecconnect_payment"=>{"amount"=>"20.22"}, "commit"=>"Create Ecconnect payment"}
|
33
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:count=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}} (0.4220ms)
|
34
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:findAndModify=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}, :new=>true, :upsert=>true, :update=>{"$inc"=>{"c"=>1}}} (0.3059ms)
|
35
|
+
MOPED: 127.0.0.1:27017 INSERT database=ecconnect_rails_test collection=ecconnect_payments documents=[{"_id"=>"524b093c0f1d0e11bd000009", "amount"=>20.22, "terminal_id"=>"E7881970", "merchant_id"=>1753970, "locale"=>"en", "currency_id"=>980, "updated_at"=>2013-10-01 17:41:16 UTC, "created_at"=>2013-10-01 17:41:16 UTC, "order_id"=>15439, "tran_code"=>nil}] flags=[] (0.1049ms)
|
36
|
+
Redirected to http://www.example.com/ecconnect_payments/524b093c0f1d0e11bd000009
|
37
|
+
Completed 302 Found in 3ms
|
38
|
+
Started GET "/ecconnect_payments/524b093c0f1d0e11bd000009" for 127.0.0.1 at 2013-10-01 20:41:16 +0300
|
39
|
+
Processing by EcconnectPaymentsController#show as HTML
|
40
|
+
Parameters: {"id"=>"524b093c0f1d0e11bd000009"}
|
41
|
+
MOPED: 127.0.0.1:27017 QUERY database=ecconnect_rails_test collection=ecconnect_payments selector={"_id"=>"524b093c0f1d0e11bd000009"} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.3707ms)
|
42
|
+
Rendered ecconnect_payments/show.html.erb (1.8ms)
|
43
|
+
Completed 200 OK in 4ms (Views: 2.6ms)
|
44
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:count=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}} (0.6170ms)
|
45
|
+
MOPED: 127.0.0.1:27017 COMMAND database=ecconnect_rails_test command={:findAndModify=>"auto_increment_counters", :query=>{"_id"=>"ecconnect_payment_order_id"}, :new=>true, :upsert=>true, :update=>{"$inc"=>{"c"=>1}}} (0.5162ms)
|
46
|
+
MOPED: 127.0.0.1:27017 INSERT database=dummy_development collection=ecconnect_payments documents=[{"_id"=>"524b093f0f1d0e11bd00000a", "amount"=>20.22, "income_signature"=>"123", "terminal_id"=>"E7881970", "merchant_id"=>1753970, "locale"=>"en", "currency_id"=>980, "updated_at"=>2013-10-01 17:41:19 UTC, "created_at"=>2013-10-01 17:41:19 UTC, "order_id"=>15440, "tran_code"=>nil}] flags=[] (0.2339ms)
|
@@ -1,11 +1,13 @@
|
|
1
1
|
# Read about factories at https://github.com/thoughtbot/factory_girl
|
2
2
|
|
3
3
|
FactoryGirl.define do
|
4
|
-
factory :ecconnect_payment
|
4
|
+
factory :ecconnect_payment do #, :class => EcconnectRails::EcconnectPayment do
|
5
5
|
amount 20.22
|
6
|
+
income_signature '123'
|
6
7
|
factory :ecconnect_payment_tran_code do
|
7
8
|
amount 20
|
8
9
|
tran_code '000'
|
10
|
+
income_signature '123'
|
9
11
|
end
|
10
12
|
end
|
11
13
|
end
|
@@ -10,14 +10,14 @@ feature "Sources" do
|
|
10
10
|
describe "payments" do
|
11
11
|
context "payment new" do
|
12
12
|
before do
|
13
|
-
visit '/
|
13
|
+
visit '/ecconnect_payments/new'
|
14
14
|
fill_in('ecconnect_payment_amount', with: payment.amount)
|
15
15
|
click_button('Create Ecconnect payment')
|
16
16
|
end
|
17
17
|
it{ find(:css, '#TotalAmount').value.should == payment.upc_amount.to_s }
|
18
18
|
end
|
19
19
|
context "payment show" do
|
20
|
-
before{ visit "/
|
20
|
+
before{ visit "/ecconnect_payments/#{payment.to_param}" }
|
21
21
|
it{ find(:css, '#TerminalID').value.should == payment.terminal_id.to_s }
|
22
22
|
it{ find(:css, '#MerchantID').value.should == payment.merchant_id.to_s }
|
23
23
|
it{ find(:css, '#Currency').value.should == payment.currency_id.to_s }
|
@@ -43,7 +43,7 @@ feature "Sources" do
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
before(:each) do
|
46
|
-
session.visit("http://127.0.0.1/
|
46
|
+
session.visit("http://127.0.0.1:3000/ecconnect_payments/new")
|
47
47
|
session.fill_in('ecconnect_payment_amount', with: payment.amount)
|
48
48
|
session.click_button('Create Ecconnect payment')
|
49
49
|
session.click_button(I18n.t('ecconnect_rails.ecconnect_form.submit'))
|
@@ -59,7 +59,7 @@ feature "Sources" do
|
|
59
59
|
describe "000" do
|
60
60
|
let(:card){ 4999999999990011 }
|
61
61
|
before{ session.driver.browser.switch_to.alert.accept; }
|
62
|
-
it{ session.current_path.should == "/
|
62
|
+
it{ session.current_path.should == "/ecconnect_payments/success" }
|
63
63
|
end
|
64
64
|
describe "403" do
|
65
65
|
let(:card){ 4999999999990102 }
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe EcconnectPayment do
|
4
4
|
let(:payment){ FactoryGirl.build :ecconnect_payment }
|
5
5
|
|
6
|
-
it{ should belong_to(:payer) }
|
6
|
+
#it{ should belong_to(:payer) }
|
7
7
|
|
8
8
|
it{ should have_field(:delay).of_type(Boolean) }
|
9
9
|
it{ should have_field(:merchant_id).of_type(Integer) }
|
@@ -1,15 +1,15 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe
|
4
|
-
routes { EcconnectRails::Engine.routes }
|
3
|
+
describe EcconnectPaymentsController do
|
4
|
+
#routes { EcconnectRails::Engine.routes }
|
5
5
|
it{ expect(get: '/ecconnect_payments').not_to be_routable }
|
6
|
-
it{ get('/ecconnect_payments/1').should route_to(controller: '
|
7
|
-
it{ get('/ecconnect_payments/new').should route_to(controller: '
|
8
|
-
it{ post('/ecconnect_payments/success').should route_to(controller: '
|
9
|
-
it{ post('/ecconnect_payments/failure').should route_to(controller: '
|
10
|
-
it{ post('/ecconnect_payments/notify').should route_to(controller: '
|
6
|
+
it{ get('/ecconnect_payments/1').should route_to(controller: 'ecconnect_payments', action: 'show', id: '1') }
|
7
|
+
it{ get('/ecconnect_payments/new').should route_to(controller: 'ecconnect_payments', action: 'new') }
|
8
|
+
it{ post('/ecconnect_payments/success').should route_to(controller: 'ecconnect_payments', action: 'success') }
|
9
|
+
it{ post('/ecconnect_payments/failure').should route_to(controller: 'ecconnect_payments', action: 'failure') }
|
10
|
+
it{ post('/ecconnect_payments/notify').should route_to(controller: 'ecconnect_payments', action: 'notify') }
|
11
11
|
it{ expect(get: 'ecconnect_payments/1/edit').not_to be_routable }
|
12
|
-
it{ post('/ecconnect_payments').should route_to(controller: '
|
12
|
+
it{ post('/ecconnect_payments').should route_to(controller: 'ecconnect_payments', action: 'create') }
|
13
13
|
it{ expect(put: 'ecconnect_payments/1').not_to be_routable }
|
14
14
|
it{ expect(delete: 'ecconnect_payments/1').not_to be_routable }
|
15
15
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ecconnect_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Budnikov Roman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -24,34 +24,6 @@ dependencies:
|
|
24
24
|
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3.2'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: mongoid
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ! '>='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 3.0.0
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ! '>='
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 3.0.0
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: mongoid-autoinc
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ! '>='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 0.3.0
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ! '>='
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 0.3.0
|
55
27
|
- !ruby/object:Gem::Dependency
|
56
28
|
name: capybara
|
57
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,25 +101,19 @@ executables: []
|
|
129
101
|
extensions: []
|
130
102
|
extra_rdoc_files: []
|
131
103
|
files:
|
132
|
-
- app/controllers/ecconnect_rails/application_controller.rb
|
133
104
|
- app/controllers/ecconnect_rails/base_controller.rb
|
134
|
-
- app/controllers/ecconnect_rails/ecconnect_payments_controller.rb
|
135
105
|
- app/helpers/ecconnect_rails/application_helper.rb
|
136
|
-
- app/models/ecconnect_rails/ecconnect_payment.rb
|
137
|
-
- app/views/ecconnect_rails/ecconnect_payments/failure.html.erb
|
138
|
-
- app/views/ecconnect_rails/ecconnect_payments/new.html.erb
|
139
|
-
- app/views/ecconnect_rails/ecconnect_payments/notify.html.erb
|
140
|
-
- app/views/ecconnect_rails/ecconnect_payments/show.html.erb
|
141
|
-
- app/views/ecconnect_rails/ecconnect_payments/success.html.erb
|
142
106
|
- config/locales/ecconnect_rails_en.yml
|
143
|
-
-
|
107
|
+
- lib/ecconnect_rails/base_model.rb
|
108
|
+
- lib/ecconnect_rails/controller_actions.rb
|
109
|
+
- lib/ecconnect_rails/controller_defaults.rb
|
144
110
|
- lib/ecconnect_rails/engine.rb
|
145
111
|
- lib/ecconnect_rails/version.rb
|
146
112
|
- lib/ecconnect_rails.rb
|
147
113
|
- lib/tasks/ecconnect_rails_tasks.rake
|
148
114
|
- MIT-LICENSE
|
149
115
|
- Rakefile
|
150
|
-
- README.
|
116
|
+
- README.md
|
151
117
|
- spec/certs/1753970.crt
|
152
118
|
- spec/certs/1753970.pem
|
153
119
|
- spec/certs/test-server.cert
|
@@ -157,7 +123,14 @@ files:
|
|
157
123
|
- spec/dummy/app/controllers/application_controller.rb
|
158
124
|
- spec/dummy/app/controllers/ecconnect_payments_controller.rb
|
159
125
|
- spec/dummy/app/helpers/application_helper.rb
|
126
|
+
- spec/dummy/app/models/ecconnect_payment.rb
|
160
127
|
- spec/dummy/app/models/test.rb
|
128
|
+
- spec/dummy/app/models/user.rb
|
129
|
+
- spec/dummy/app/views/ecconnect_payments/failure.html.erb
|
130
|
+
- spec/dummy/app/views/ecconnect_payments/new.html.erb
|
131
|
+
- spec/dummy/app/views/ecconnect_payments/notify.html.erb
|
132
|
+
- spec/dummy/app/views/ecconnect_payments/show.html.erb
|
133
|
+
- spec/dummy/app/views/ecconnect_payments/success.html.erb
|
161
134
|
- spec/dummy/app/views/layouts/application.html.erb
|
162
135
|
- spec/dummy/config/application.rb
|
163
136
|
- spec/dummy/config/boot.rb
|
@@ -178,6 +151,7 @@ files:
|
|
178
151
|
- spec/dummy/config.ru
|
179
152
|
- spec/dummy/Gemfile
|
180
153
|
- spec/dummy/Gemfile.lock
|
154
|
+
- spec/dummy/log/test.log
|
181
155
|
- spec/dummy/public/404.html
|
182
156
|
- spec/dummy/public/422.html
|
183
157
|
- spec/dummy/public/500.html
|
@@ -190,7 +164,8 @@ files:
|
|
190
164
|
- spec/routing/ecconnect_rails/ecconnect_payments_routing_spec.rb
|
191
165
|
- spec/spec_helper.rb
|
192
166
|
homepage: http://github.com/supro/ecconnect_rails
|
193
|
-
licenses:
|
167
|
+
licenses:
|
168
|
+
- MIT
|
194
169
|
metadata: {}
|
195
170
|
post_install_message:
|
196
171
|
rdoc_options: []
|
@@ -222,7 +197,14 @@ test_files:
|
|
222
197
|
- spec/dummy/app/controllers/application_controller.rb
|
223
198
|
- spec/dummy/app/controllers/ecconnect_payments_controller.rb
|
224
199
|
- spec/dummy/app/helpers/application_helper.rb
|
200
|
+
- spec/dummy/app/models/ecconnect_payment.rb
|
225
201
|
- spec/dummy/app/models/test.rb
|
202
|
+
- spec/dummy/app/models/user.rb
|
203
|
+
- spec/dummy/app/views/ecconnect_payments/failure.html.erb
|
204
|
+
- spec/dummy/app/views/ecconnect_payments/new.html.erb
|
205
|
+
- spec/dummy/app/views/ecconnect_payments/notify.html.erb
|
206
|
+
- spec/dummy/app/views/ecconnect_payments/show.html.erb
|
207
|
+
- spec/dummy/app/views/ecconnect_payments/success.html.erb
|
226
208
|
- spec/dummy/app/views/layouts/application.html.erb
|
227
209
|
- spec/dummy/config/application.rb
|
228
210
|
- spec/dummy/config/boot.rb
|
@@ -243,6 +225,7 @@ test_files:
|
|
243
225
|
- spec/dummy/config.ru
|
244
226
|
- spec/dummy/Gemfile
|
245
227
|
- spec/dummy/Gemfile.lock
|
228
|
+
- spec/dummy/log/test.log
|
246
229
|
- spec/dummy/public/404.html
|
247
230
|
- spec/dummy/public/422.html
|
248
231
|
- spec/dummy/public/500.html
|
data/README.rdoc
DELETED