stall-atos 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +80 -0
- data/Rakefile +6 -0
- data/app/views/stall/atos/_payment_form.html.haml +7 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/generators/stall/atos/install/install_generator.rb +13 -0
- data/lib/generators/stall/atos/install/templates/config.rb +34 -0
- data/lib/stall/atos.rb +16 -0
- data/lib/stall/atos/engine.rb +6 -0
- data/lib/stall/atos/fake_gateway_payment_notification.rb +52 -0
- data/lib/stall/atos/gateway.rb +138 -0
- data/lib/stall/atos/payment_params.rb +52 -0
- data/lib/stall/atos/payment_response.rb +88 -0
- data/lib/stall/atos/version.rb +5 -0
- data/stall-atos.gemspec +27 -0
- metadata +120 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: daf588b4c8f1d06db827b602cc8eae3b4a137139
|
4
|
+
data.tar.gz: 34163d8ac6e761c506ce37d2ae8f8d01e2e55f2f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8e136677ec3ac23ae433114051d390e2084065e758d96092850285224f125a35df9980d66eab82065cc358acba7ea6acdf4680e7b0049d152c4d53b46553c588
|
7
|
+
data.tar.gz: 048de03bba28c77bacc848f3fd228086b66973bc5a91a861998debca45332d31b40c1625e96f4b4f820208deeef8ded14cfe5907f10ebdaa24a4f361cd4a1ef0
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2016 vala
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
# Stall::Atos
|
2
|
+
|
3
|
+
This gem allows integrating your [Stall](https://github.com/stall-rails/stall)
|
4
|
+
e-commerce app with one of the Atos online payment gateway solutions.
|
5
|
+
|
6
|
+
This gem is just the glue between [Stall](https://github.com/stall-rails/stall)
|
7
|
+
and the provided Atos executable.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'stall-atos'
|
15
|
+
```
|
16
|
+
|
17
|
+
And then execute:
|
18
|
+
|
19
|
+
$ bundle
|
20
|
+
|
21
|
+
Or install it yourself as:
|
22
|
+
|
23
|
+
$ gem install stall-atos
|
24
|
+
|
25
|
+
Then use the install generator to copy the config template file :
|
26
|
+
|
27
|
+
$ rails generator stall:atos:install
|
28
|
+
|
29
|
+
|
30
|
+
## Usage
|
31
|
+
|
32
|
+
You first need to configure the gateway by filling the required variables in
|
33
|
+
that were added to the stall config initialize.
|
34
|
+
|
35
|
+
By default, it is configured to fetch from the variables from the environment,
|
36
|
+
so ideally, just create the following env vars :
|
37
|
+
|
38
|
+
- `ATOS_MERCHANT_ID`
|
39
|
+
- `ATOS_SECRET_KEY`
|
40
|
+
|
41
|
+
> **Note** : Test merchant id and secret key can be different than production
|
42
|
+
ones.
|
43
|
+
|
44
|
+
Now, go to the Stall initializer, and fill in the test and production URLs
|
45
|
+
provdided by your bank in the `atos.test_payment_url` and `atos.payment_url`
|
46
|
+
configuration.
|
47
|
+
|
48
|
+
Restart your server, and you should now be able to use the CM-CIC payment
|
49
|
+
gateway in test mode.
|
50
|
+
|
51
|
+
When you're ready to switch to production, set the following environment
|
52
|
+
variable :
|
53
|
+
|
54
|
+
- `ATOS_PRODUCTION_MODE=true`
|
55
|
+
|
56
|
+
Just like the other settings, you can change the way it's configured in the
|
57
|
+
stall initializer file.
|
58
|
+
|
59
|
+
### Automatic response URL
|
60
|
+
|
61
|
+
You need to provide a payment response URL to your bank which will be :
|
62
|
+
|
63
|
+
```text
|
64
|
+
<http|http>://<YOUR_DOMAIN>/atos/payment/notify
|
65
|
+
```
|
66
|
+
|
67
|
+
You can find the route with :
|
68
|
+
|
69
|
+
```bash
|
70
|
+
rake routes | grep payment/notify
|
71
|
+
```
|
72
|
+
|
73
|
+
## Contributing
|
74
|
+
|
75
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/stall-rails/stall-atos.
|
76
|
+
|
77
|
+
## License
|
78
|
+
|
79
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
80
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
%form.payment-gateway-form{ action: request.params.target_url, method: "post" }
|
2
|
+
%input#version{ name: "Data", type: "hidden", value: request.params.data }
|
3
|
+
%input#tpe{ name: "Seal", type: "hidden", value: request.params.seal }
|
4
|
+
%input#date{ name: "InterfaceVersion", type: "hidden", value: request.params.interface_version }
|
5
|
+
|
6
|
+
%button.btn.btn-primary{ name: "submit_cic_payment_form", type: "submit" }
|
7
|
+
= t('stall.payments.gateway.pay')
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "stall/atos"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
module Stall
|
2
|
+
module Atos
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
|
6
|
+
def copy_config_template
|
7
|
+
inject_into_file 'config/initializers/stall.rb', after: "Stall.configure do |config|\n" do
|
8
|
+
File.read(File.join(self.class.source_root, 'config.rb'))
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Atos payment gateway configuration
|
2
|
+
# Fill in the informations provided by your bank (Atos service provider)
|
3
|
+
#
|
4
|
+
config.payment.atos do |atos|
|
5
|
+
# Hmac key calculated with the js calculator given by CIC
|
6
|
+
atos.merchant_id = ENV['ATOS_MERCHANT_ID']
|
7
|
+
# Hmac key calculated with the js calculator given by CIC
|
8
|
+
atos.secret_key = ENV['ATOS_SECRET_KEY']
|
9
|
+
|
10
|
+
# Secret key version. Defaults to 1 when first generated, but you can update
|
11
|
+
# this value if you generated another key
|
12
|
+
#
|
13
|
+
# atos.key_version = '1'
|
14
|
+
|
15
|
+
# Test payment URL, provided by the bank
|
16
|
+
atos.test_payment_url = ''
|
17
|
+
# Production payment URL, provided by the bank
|
18
|
+
atos.payment_url = ''
|
19
|
+
|
20
|
+
# Atos / SIPS target version. Defaults to HP_2.9, but could need to be
|
21
|
+
# updated, depending on the bank provided version
|
22
|
+
#
|
23
|
+
# atos.interface_version = 'HP_2.9'
|
24
|
+
|
25
|
+
# Test or production mode, default to false, changes the payment
|
26
|
+
# gateway target URL
|
27
|
+
#
|
28
|
+
# By default, the test mode is activated in all environments but you just
|
29
|
+
# need to add `ATOS_PRODUCTION_MODE=true` in your environment variables
|
30
|
+
# and restart your server to switch to production mode
|
31
|
+
#
|
32
|
+
atos.test_mode = ENV['ATOS_PRODUCTION_MODE'] != 'true'
|
33
|
+
end
|
34
|
+
|
data/lib/stall/atos.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'stall'
|
2
|
+
|
3
|
+
module Stall
|
4
|
+
module Atos
|
5
|
+
extend ActiveSupport::Autoload
|
6
|
+
|
7
|
+
autoload :PaymentParams
|
8
|
+
autoload :PaymentResponse
|
9
|
+
autoload :Version
|
10
|
+
|
11
|
+
autoload :FakeGatewayPaymentNotification
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
require 'stall/atos/gateway'
|
16
|
+
require 'stall/atos/engine'
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Stall
|
2
|
+
module Atos
|
3
|
+
class FakeGatewayPaymentNotification < Stall::Payments::FakeGatewayPaymentNotification
|
4
|
+
delegate :currency, to: :cart
|
5
|
+
|
6
|
+
def params
|
7
|
+
{}.tap do |params|
|
8
|
+
params.merge!(options)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def options
|
15
|
+
@options ||= {
|
16
|
+
"Data" => data,
|
17
|
+
"Seal" => Stall::Atos::PaymentParams.calculate_seal_for(data),
|
18
|
+
"InterfaceVersion" => "HP_2.0",
|
19
|
+
"Encode" => ""
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def data
|
24
|
+
@data ||= Stall::Atos::PaymentParams.serialize(
|
25
|
+
merchantId: gateway.merchant_id,
|
26
|
+
transactionReference: gateway.transaction_id,
|
27
|
+
keyVersion: gateway.key_version,
|
28
|
+
amount: cart.total_price.cents,
|
29
|
+
currencyCode: cart.currency.iso_numeric,
|
30
|
+
transactionDateTime: Time.now.iso8601,
|
31
|
+
captureDay: '0',
|
32
|
+
captureMode: 'AUTHOR_CAPTURE',
|
33
|
+
orderChannel: 'INTERNET',
|
34
|
+
responseCode: '00',
|
35
|
+
acquirerResponseCode: '00',
|
36
|
+
authorisationId: '12345',
|
37
|
+
guaranteeIndicator: 'N',
|
38
|
+
cardCSCResultCode: '4E',
|
39
|
+
panExpiryDate: '210001',
|
40
|
+
paymentMeanBrand: 'VISA',
|
41
|
+
paymentMeanType: 'CARD',
|
42
|
+
customerIpAddress: '127.0.0.1',
|
43
|
+
maskedPan: '4100##########00',
|
44
|
+
holderAuthentRelegation: 'N',
|
45
|
+
holderAuthentStatus: '3D_ERROR',
|
46
|
+
transactionOrigin: 'INTERNET',
|
47
|
+
paymentPattern: 'ONE_SHOT'
|
48
|
+
)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
module Stall
|
2
|
+
module Atos
|
3
|
+
class Gateway < Stall::Payments::Gateway
|
4
|
+
register :atos
|
5
|
+
|
6
|
+
# Merchant ID
|
7
|
+
class_attribute :merchant_id
|
8
|
+
# Secret key found in the banks's download interface
|
9
|
+
class_attribute :secret_key
|
10
|
+
# Secret key version
|
11
|
+
class_attribute :key_version
|
12
|
+
self.key_version = '1'
|
13
|
+
|
14
|
+
# Test payment URL to send payment form to, provided by the bank
|
15
|
+
class_attribute :test_payment_url
|
16
|
+
# Production payment URL to send payment form to, provided by the bank
|
17
|
+
class_attribute :payment_url
|
18
|
+
|
19
|
+
# Interface version of the Atos / SIPS API
|
20
|
+
class_attribute :interface_version
|
21
|
+
self.interface_version = 'HP_2.9'
|
22
|
+
|
23
|
+
# Test or production mode, default to false, changes the payment
|
24
|
+
# gateway target URL
|
25
|
+
class_attribute :test_mode
|
26
|
+
self.test_mode = !Rails.env.production?
|
27
|
+
|
28
|
+
def self.request(cart)
|
29
|
+
Request.new(cart)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.response(request)
|
33
|
+
Response.new(request)
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.fake_payment_notification_for(cart)
|
37
|
+
Stall::Atos::FakeGatewayPaymentNotification.new(cart)
|
38
|
+
end
|
39
|
+
|
40
|
+
def target_url
|
41
|
+
test_mode ? test_payment_url : payment_url
|
42
|
+
end
|
43
|
+
|
44
|
+
# The gateway interface only provides one return URL, so we use the
|
45
|
+
# payment notification state to determine wether to forward the customer
|
46
|
+
# to the next checkout step or not.
|
47
|
+
#
|
48
|
+
def synchronous_payment_notification?
|
49
|
+
true
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
# Override the transaction id methods, since the Atos gateway only
|
55
|
+
# authorize numbers
|
56
|
+
def next_transaction_id
|
57
|
+
if (last_transaction = Payment.order("data->>'transaction_id' DESC").select(:data).first)
|
58
|
+
if (id = last_transaction.transaction_id)
|
59
|
+
index = id[-5..-1].to_i + 1
|
60
|
+
return transaction_id_for(index)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
transaction_id_for(1)
|
65
|
+
end
|
66
|
+
|
67
|
+
def transaction_id_for(index)
|
68
|
+
super.gsub(/-/, '')
|
69
|
+
end
|
70
|
+
|
71
|
+
def transaction_id_format
|
72
|
+
'%{cart_id}%{transaction_index}'
|
73
|
+
end
|
74
|
+
|
75
|
+
class Request
|
76
|
+
attr_reader :cart
|
77
|
+
|
78
|
+
delegate :currency, to: :cart, allow_nil: true
|
79
|
+
|
80
|
+
def initialize(cart)
|
81
|
+
@cart = cart
|
82
|
+
end
|
83
|
+
|
84
|
+
def payment_form_partial_path
|
85
|
+
'stall/atos/payment_form'
|
86
|
+
end
|
87
|
+
|
88
|
+
def params
|
89
|
+
@params ||= Stall::Atos::PaymentParams.new(gateway)
|
90
|
+
end
|
91
|
+
|
92
|
+
def gateway
|
93
|
+
@gateway = Stall::Atos::Gateway.new(cart)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
class Response
|
98
|
+
attr_reader :request
|
99
|
+
|
100
|
+
def initialize(request)
|
101
|
+
@request = request
|
102
|
+
end
|
103
|
+
|
104
|
+
def rendering_options
|
105
|
+
{ nothing: true }
|
106
|
+
end
|
107
|
+
|
108
|
+
def success?
|
109
|
+
response.success?
|
110
|
+
end
|
111
|
+
|
112
|
+
def notify
|
113
|
+
cart.payment.pay! if success?
|
114
|
+
end
|
115
|
+
|
116
|
+
def valid?
|
117
|
+
response.valid?
|
118
|
+
end
|
119
|
+
|
120
|
+
def cart
|
121
|
+
@cart ||= Cart.find_by_payment_transaction_id(response.transaction_id)
|
122
|
+
end
|
123
|
+
|
124
|
+
def gateway
|
125
|
+
@gateway = Stall::Atos::Gateway
|
126
|
+
end
|
127
|
+
|
128
|
+
private
|
129
|
+
|
130
|
+
def response
|
131
|
+
@response ||= Stall::Atos::PaymentResponse.new(
|
132
|
+
gateway, Rack::Utils.parse_nested_query(request.raw_post)
|
133
|
+
)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'digest'
|
2
|
+
|
3
|
+
module Stall
|
4
|
+
module Atos
|
5
|
+
class PaymentParams
|
6
|
+
attr_reader :gateway
|
7
|
+
|
8
|
+
delegate :cart, :target_url, :interface_version, to: :gateway
|
9
|
+
|
10
|
+
def initialize(gateway)
|
11
|
+
@gateway = gateway
|
12
|
+
end
|
13
|
+
|
14
|
+
def data
|
15
|
+
@data ||= self.class.serialize(
|
16
|
+
amount: cart.total_price.cents,
|
17
|
+
currencyCode: cart.currency.iso_numeric,
|
18
|
+
merchantId: gateway.merchant_id,
|
19
|
+
transactionReference: gateway.transaction_id(refresh: true),
|
20
|
+
keyVersion: gateway.key_version,
|
21
|
+
automaticResponseUrl: gateway.payment_urls.payment_notification_url,
|
22
|
+
normalReturnUrl: gateway.payment_urls.payment_success_return_url
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
def seal
|
27
|
+
@seal ||= self.class.calculate_seal_for(data)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
# Transforms the provided hash to the following Atos accepted format :
|
33
|
+
#
|
34
|
+
# key1=value1|key2=value2|...|keyN=valueN
|
35
|
+
#
|
36
|
+
def self.serialize(hash)
|
37
|
+
hash.map { |item| item.map(&:to_s).join('=') }.join('|')
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.unserialize(string)
|
41
|
+
string.split('|').each_with_object({}.with_indifferent_access) do |str, hash|
|
42
|
+
key, value = str.split('=')
|
43
|
+
hash[key] = value
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.calculate_seal_for(data)
|
48
|
+
Digest::SHA256.hexdigest([data, Stall::Atos::Gateway.secret_key].join)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# This object handles the internal processing of Atos payment gateway response,
|
2
|
+
# handling params parsing, request origin verification, success tracking and
|
3
|
+
# other data extracting tasks
|
4
|
+
#
|
5
|
+
module Stall
|
6
|
+
module Atos
|
7
|
+
class PaymentResponse
|
8
|
+
attr_reader :gateway, :params
|
9
|
+
|
10
|
+
def initialize(gateway, params)
|
11
|
+
@gateway = gateway
|
12
|
+
@params = params
|
13
|
+
end
|
14
|
+
|
15
|
+
def transaction_id
|
16
|
+
data['transactionReference']
|
17
|
+
end
|
18
|
+
|
19
|
+
def success?
|
20
|
+
data['responseCode'] == '00'
|
21
|
+
end
|
22
|
+
|
23
|
+
# Ensure the response comes from the Gateway by casting the seal from the
|
24
|
+
# provided key-value string data and the secret key
|
25
|
+
#
|
26
|
+
def valid?
|
27
|
+
params['Seal'] == Stall::Atos::PaymentParams.calculate_seal_for(params['Data'])
|
28
|
+
end
|
29
|
+
|
30
|
+
def data
|
31
|
+
@data ||= Stall::Atos::PaymentParams.unserialize(params['Data'])
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
# Response code that can be sent from the ATOS gateway. They're not used
|
37
|
+
# for now and here just for reference, but could be used some day to
|
38
|
+
# implement a way to bubble payment processing errors to the end user.
|
39
|
+
#
|
40
|
+
def response_code_messages
|
41
|
+
@response_code_messages ||= {
|
42
|
+
'00' => %(Transaction approuvée ou traitée avec succès),
|
43
|
+
'02' => %(Contactez l'émetteur du moyen de paiement),
|
44
|
+
'03' => %(Accepteur invalide),
|
45
|
+
'04' => %(Conservez le support du moyen de paiement),
|
46
|
+
'05' => %(Ne pas honorer),
|
47
|
+
'07' => %(Conservez le support du moyen de paiement, conditions spéciales),
|
48
|
+
'08' => %(Approuvez après l'identification),
|
49
|
+
'12' => %(Transaction invalide),
|
50
|
+
'13' => %(Montant invalide),
|
51
|
+
'14' => %(Coordonnées du moyen de paiement invalides),
|
52
|
+
'15' => %(Émetteur du moyen de paiement inconnu),
|
53
|
+
'17' => %(Paiement interrompu par l'acheteur),
|
54
|
+
'24' => %(Opération impossible),
|
55
|
+
'25' => %(Transaction inconnue),
|
56
|
+
'30' => %(Érreur de format),
|
57
|
+
'31' => %(Id de l'organisation d'acquisition inconnu),
|
58
|
+
'33' => %(Moyen de paiement expiré),
|
59
|
+
'34' => %(Suspicion de fraude),
|
60
|
+
'40' => %(Fonction non supportée),
|
61
|
+
'41' => %(Moyen de paiement perdu),
|
62
|
+
'43' => %(Moyen de paiement volé),
|
63
|
+
'51' => %(Provision insuffisante ou crédit dépassé),
|
64
|
+
'54' => %(Moyen de paiement expiré),
|
65
|
+
'56' => %(Moyen de paiement manquant dans le fichier),
|
66
|
+
'57' => %(Transaction non autorisée pour ce porteur),
|
67
|
+
'58' => %(Transaction interdite au terminal),
|
68
|
+
'59' => %(Suspicion de fraude),
|
69
|
+
'60' => %(L'accepteur du moyen de paiement doit contacter l'acquéreur),
|
70
|
+
'61' => %(Éxcède le maximum autorisé),
|
71
|
+
'62' => %(Transaction en attente de confirmation de paiement),
|
72
|
+
'63' => %(Règles de sécurité non respectées),
|
73
|
+
'65' => %(Nombre de transactions du jour dépassé),
|
74
|
+
'68' => %(Réponse non parvenue ou reçue trop tard),
|
75
|
+
'75' => %(Nombre de tentatives de saisie des coordonnées du moyen de paiement dépassé 87 Terminal inconnu),
|
76
|
+
'90' => %(Arrêt momentané du système),
|
77
|
+
'91' => %(Émetteur du moyen de paiement inaccessible),
|
78
|
+
'92' => %(La transaction ne contient pas les informations suffisantes pour être redirigées vers l'organisme d'autorisation),
|
79
|
+
'94' => %(Transaction dupliquée),
|
80
|
+
'96' => %(Mauvais fonctionnement du système),
|
81
|
+
'97' => %(Requête expirée: transaction refusée),
|
82
|
+
'98' => %(Serveur inaccessible),
|
83
|
+
'99' => %(Incident technique)
|
84
|
+
}
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
data/stall-atos.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'stall/atos/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'stall-atos'
|
8
|
+
spec.version = Stall::Atos::VERSION
|
9
|
+
spec.authors = ['vala']
|
10
|
+
spec.email = ['vala@glyph.fr']
|
11
|
+
|
12
|
+
spec.summary = %q{Stall e-commerce CM-CIC payment gateway integration}
|
13
|
+
spec.description = %q{Allows easy CM-CIC gateway integration in a Stall e-commerce app}
|
14
|
+
spec.homepage = 'https://github.com/rails-stall/stall-atos'
|
15
|
+
spec.license = 'MIT'
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
spec.bindir = 'exe'
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ['lib']
|
21
|
+
|
22
|
+
spec.add_dependency 'stall', '~> 0.1'
|
23
|
+
|
24
|
+
spec.add_development_dependency 'bundler', '~> 1.11'
|
25
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
26
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stall-atos
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- vala
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-11-28 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: stall
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.11'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.11'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
69
|
+
description: Allows easy CM-CIC gateway integration in a Stall e-commerce app
|
70
|
+
email:
|
71
|
+
- vala@glyph.fr
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- ".rspec"
|
78
|
+
- ".travis.yml"
|
79
|
+
- Gemfile
|
80
|
+
- LICENSE.txt
|
81
|
+
- README.md
|
82
|
+
- Rakefile
|
83
|
+
- app/views/stall/atos/_payment_form.html.haml
|
84
|
+
- bin/console
|
85
|
+
- bin/setup
|
86
|
+
- lib/generators/stall/atos/install/install_generator.rb
|
87
|
+
- lib/generators/stall/atos/install/templates/config.rb
|
88
|
+
- lib/stall/atos.rb
|
89
|
+
- lib/stall/atos/engine.rb
|
90
|
+
- lib/stall/atos/fake_gateway_payment_notification.rb
|
91
|
+
- lib/stall/atos/gateway.rb
|
92
|
+
- lib/stall/atos/payment_params.rb
|
93
|
+
- lib/stall/atos/payment_response.rb
|
94
|
+
- lib/stall/atos/version.rb
|
95
|
+
- stall-atos.gemspec
|
96
|
+
homepage: https://github.com/rails-stall/stall-atos
|
97
|
+
licenses:
|
98
|
+
- MIT
|
99
|
+
metadata: {}
|
100
|
+
post_install_message:
|
101
|
+
rdoc_options: []
|
102
|
+
require_paths:
|
103
|
+
- lib
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
requirements: []
|
115
|
+
rubyforge_project:
|
116
|
+
rubygems_version: 2.5.1
|
117
|
+
signing_key:
|
118
|
+
specification_version: 4
|
119
|
+
summary: Stall e-commerce CM-CIC payment gateway integration
|
120
|
+
test_files: []
|