atos 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ data.tar.gz: 2ee92e798051fc53e257525398340bd3e94ca3aa
4
+ metadata.gz: d9b6bdce2ccf1af1427b329826b1c8727ce0a7c3
5
+ SHA512:
6
+ data.tar.gz: 429143a6fba31195c52804bfc99e74e3bc64c299c1073c69c13bc32ad3849e806316468bbcc08b8b4a4da1ecb7712a6de9301933ea63d3017d9aeddb4a8fab01
7
+ metadata.gz: 1a3319abe4849de8647e34172fdf78485702a25847984ef6d838c080c57e72eaf05989f04cf2eb13746a8939afe6072c7f6587cf98b00bc83e5dbdd41a26840b
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 [name of plugin creator]
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,122 @@
1
+ Atos, a Ruby on Rails gateway for SIPS/ATOS french online payments API
2
+ ===
3
+
4
+ Usage
5
+ ---
6
+ 1. Drop the files given by your bank in your /lib dir, so it should look like this :
7
+
8
+ ```
9
+ /lib
10
+ /atos
11
+ /bin
12
+ request
13
+ request_2.4.18_2.96
14
+ ....
15
+
16
+ /param
17
+ certif.fr.014295303911111
18
+ parmcom.014295303911111
19
+ parmcom.*
20
+ pathfile
21
+ ```
22
+
23
+ 2. From your controller, call the API like this :
24
+
25
+ ```
26
+ @request = Atos.new.request(
27
+ :merchant_id => '014295303911111',
28
+ :amount => '1500',
29
+ :customer_id => 'YOUR_CUSTOMER_ID',
30
+ :automatic_response_url => 'http://YOUR_SITE.com/ANY/LISTENING/URL/YOU/WANT',
31
+ :normal_return_url => 'http://YOUR_SITE.com/NORMAL/RETURN/URL',
32
+ :cancel_return_url => 'http://YOUR_SITE.com/CANCEL/URL'
33
+ )
34
+ ```
35
+
36
+ 3. And then show the @request in your view (it's an HTML form)
37
+
38
+ ----- Let the customer pay on the bank platform, then listen to its response ----
39
+
40
+ 4. Now, you can catch the DATA parameter in response by listening to the 'automatic\_response\_url' you gave above
41
+ ```
42
+ response = Atos.new.response(params[:DATA])
43
+ ```
44
+
45
+ 5. Finally, you get a hash in 'response', that follows the API specs :
46
+ ```
47
+ {
48
+ :code
49
+ :error
50
+ :merchant_id
51
+ :merchant_country
52
+ :amount
53
+ :transaction_id
54
+ :payment_means
55
+ :transmission_date
56
+ :payment_time
57
+ :payment_date
58
+ :response_code
59
+ :payment_certificate
60
+ :authorisation_id
61
+ :currency_code
62
+ :card_number
63
+ :cvv_flag
64
+ :cvv_response_code
65
+ :bank_response_code
66
+ :complementary_code
67
+ :complementary_info
68
+ :return_context
69
+ :caddie
70
+ :receipt_complement
71
+ :merchant_language
72
+ :language
73
+ :customer_id
74
+ :order_id
75
+ :customer_email
76
+ :customer_ip_address
77
+ :capture_day
78
+ :capture_mode
79
+ :data
80
+ }
81
+ ```
82
+
83
+ Notes
84
+ ---
85
+ - merchant_id, amount, customer_id, automatic_response_url, normal_return_url and cancel_return_url
86
+ are required to push a request, but you can freely add others (shopping cart, customer email...),
87
+ according to the API docs.
88
+
89
+ - Default language is set to 'fr' and currency to 'Euro', simply pass your own 'locale/currency' in
90
+ the request to override.
91
+
92
+ - I prefer conventions over configuration, but you can also override with your own path dirs while
93
+ instanciating the Atos class. You just add one step to the shortand way :
94
+
95
+ ```
96
+ @request = Atos.new(
97
+ :root_path => '/where',
98
+ :request_path => '/where/ever',
99
+ :response_path => '/where/ever/you',
100
+ :pathfile_path => '/where/ever/you/want'
101
+ )
102
+ ```
103
+
104
+ ...And then...
105
+
106
+ ```
107
+ @request.request(
108
+ :merchant_id => '014295303911111',
109
+ :amount => '1500',
110
+ :customer_id => YOUR_CUSTOMER_ID,:automatic_response_url=>'http://YOUR_SITE.com/ANY/LISTENING/URL/YOU/WANT',
111
+ :normal_return_url => 'http://YOUR_SITE.com/NORMAL/FALLBACK/URL',
112
+ :cancel_return_url => 'http://YOUR_SITE.com/CANCEL/URL'
113
+ )
114
+ ```
115
+
116
+ * Don't forget to check at the 'pathfile' Atos file, and fill requested paths according to your app absolute location on the server
117
+
118
+ * Drop the credit card logos in a public dir, then fill this directory's absolute location on the server
119
+ in the '/lib/atos/param/pathfile' file
120
+
121
+ * The '014295303911111' merchant\_id I use all the way here is the test merchant\_id, obviously, use you own.
122
+
@@ -0,0 +1,84 @@
1
+ require 'exception_handler'
2
+
3
+ class Atos
4
+
5
+ attr_accessor :root_path, :request_path, :response_path, :pathfile_path
6
+
7
+ def initialize(*args)
8
+
9
+ args.empty? ? paths = {} : paths = args.first
10
+
11
+ # You may override those default paths on Class instanciation
12
+ paths[:root_path] ? @root_path = paths[:root_path] : @root_path = "#{Rails.root}/lib/atos"
13
+ paths[:request_path] ? @request_path = paths[:request_path] : @request_path = "#{self.root_path}/bin/request"
14
+ paths[:response_path] ? @response_path = paths[:response_path] : @response_path = "#{self.root_path}/bin/response"
15
+ paths[:pathfile_path] ? @pathfile_path = paths[:pathfile_path] : @pathfile_path = "#{self.root_path}/param/pathfile"
16
+
17
+ end
18
+
19
+ # Call the request binary
20
+ def request(datas)
21
+
22
+ ExceptionHandler.before(datas)
23
+
24
+ # Default parameters if nothing given
25
+ datas[:merchant_country] ||= "fr" # => French shop
26
+ datas[:language] ||= "fr" # => French locale
27
+ datas[:currency_code] ||= "978" # => Euro
28
+ datas[:pathfile] ||= "#{@pathfile_path}" # => Path to the Atos "pathfile"
29
+
30
+ args = ''
31
+ datas.each do |key, value|
32
+ args << "#{key.to_s}=#{value} "
33
+ end
34
+
35
+ response_array = ExceptionHandler.on_launch(`#{self.request_path} #{args}`)
36
+
37
+ # If everything goes fine, should now respond an HTML form
38
+ response_array[3]
39
+
40
+ end
41
+
42
+ # Decrypt bank response, then return a hash
43
+ def response(datas)
44
+
45
+ response_array = ExceptionHandler.on_launch(`#{self.response_path} pathfile=#{self.pathfile_path} message=#{datas}`)
46
+
47
+ {
48
+ :code => response_array[1],
49
+ :error => response_array[2],
50
+ :merchant_id => response_array[3],
51
+ :merchant_country => response_array[4],
52
+ :amount => response_array[5],
53
+ :transaction_id => response_array[6],
54
+ :payment_means => response_array[7],
55
+ :transmission_date => response_array[8],
56
+ :payment_time => response_array[9],
57
+ :payment_date => response_array[10],
58
+ :response_code => response_array[11],
59
+ :payment_certificate => response_array[12],
60
+ :authorisation_id => response_array[13],
61
+ :currency_code => response_array[14],
62
+ :card_number => response_array[15],
63
+ :cvv_flag => response_array[16],
64
+ :cvv_response_code => response_array[17],
65
+ :bank_response_code => response_array[18],
66
+ :complementary_code => response_array[19],
67
+ :complementary_info => response_array[20],
68
+ :return_context => response_array[21],
69
+ :caddie => response_array[22],
70
+ :receipt_complement => response_array[23],
71
+ :merchant_language => response_array[24],
72
+ :language => response_array[25],
73
+ :customer_id => response_array[26],
74
+ :order_id => response_array[27],
75
+ :customer_email => response_array[28],
76
+ :customer_ip_address => response_array[29],
77
+ :capture_day => response_array[30],
78
+ :capture_mode => response_array[31],
79
+ :data => response_array[32]
80
+ }
81
+
82
+ end
83
+
84
+ end
@@ -0,0 +1,40 @@
1
+ class ExceptionHandler < StandardError
2
+
3
+ # Minimum required parameters
4
+ def self.before(datas)
5
+
6
+ required_params = [
7
+ 'merchant_id',
8
+ 'amount',
9
+ 'customer_id',
10
+ 'cancel_return_url',
11
+ 'normal_return_url',
12
+ 'automatic_response_url'
13
+ ]
14
+
15
+ required_params.each do |r|
16
+ raise "Atos plugin error : missing parameter '#{r}' in request" if !datas[r.to_sym]
17
+ end
18
+
19
+ end
20
+
21
+ # Check if the request is ok
22
+ def self.on_launch(datas)
23
+
24
+ response_array = datas.split("!")
25
+
26
+ case response_array[1]
27
+ when nil
28
+ # No response at all from API
29
+ raise "Atos plugin error : binary file does not respond ! Check your 'request' binary path, default is 'Rails.root/lib/atos/bin'"
30
+ when "0"
31
+ # API respond 'ok', return the content
32
+ response_array
33
+ else
34
+ # API binary respond an error, formated in an HTML table. Let's strip tags before showing the error message
35
+ raise "Atos API binary file outputs : #{response_array[2].gsub(/<\/?[^>]*>/, '')}"
36
+ end
37
+
38
+ end
39
+
40
+ end
@@ -0,0 +1,13 @@
1
+ require 'test_helper'
2
+
3
+ class AtosTest < ActiveSupport::TestCase
4
+ def setup
5
+ @atos = Atos.new
6
+ end
7
+
8
+ test "request: wrong arguments" do
9
+ assert_raise RuntimeError do
10
+ @atos.request({})
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,6 @@
1
+ require 'active_support'
2
+ require 'active_support/test_case'
3
+ require 'test/unit'
4
+
5
+ require 'rails'
6
+ require 'atos'
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: atos
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Guillaume Barillot
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2013-06-07 00:00:00 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ prerelease: false
17
+ requirement: &id001 !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - &id002
20
+ - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ type: :runtime
24
+ version_requirements: *id001
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake
27
+ prerelease: false
28
+ requirement: &id003 !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - *id002
31
+ type: :development
32
+ version_requirements: *id003
33
+ - !ruby/object:Gem::Dependency
34
+ name: activesupport
35
+ prerelease: false
36
+ requirement: &id004 !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 3.2.13
41
+ type: :development
42
+ version_requirements: *id004
43
+ description: Ruby on Rails gateway for SIPS/ATOS french online payments API
44
+ email: gbarillot@gmail.com
45
+ executables: []
46
+
47
+ extensions: []
48
+
49
+ extra_rdoc_files:
50
+ - README.md
51
+ files:
52
+ - MIT-LICENSE
53
+ - README.md
54
+ - Gemfile
55
+ - lib/atos.rb
56
+ - lib/exception_handler.rb
57
+ - test/atos_test.rb
58
+ - test/test_helper.rb
59
+ homepage: http://github.com/gbarillot/atos
60
+ licenses:
61
+ - MIT
62
+ metadata: {}
63
+
64
+ post_install_message:
65
+ rdoc_options: []
66
+
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - *id002
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - *id002
75
+ requirements: []
76
+
77
+ rubyforge_project:
78
+ rubygems_version: 2.0.3
79
+ signing_key:
80
+ specification_version: 4
81
+ summary: Ruby on Rails gateway for SIPS/ATOS
82
+ test_files:
83
+ - test/atos_test.rb