paybox 0.0.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.
- data/.gitignore +3 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +72 -0
- data/LICENSE +20 -0
- data/README.md +61 -0
- data/Rakefile +17 -0
- data/lib/paybox.rb +15 -0
- data/lib/paybox/configuration.rb +12 -0
- data/lib/paybox/gateway.rb +11 -0
- data/lib/paybox/operation.rb +26 -0
- data/lib/paybox/paybox.rb +93 -0
- data/lib/paybox/transaction.rb +20 -0
- data/lib/paybox/version.rb +3 -0
- data/paybox.gemspec +33 -0
- data/spec/fixtures/ppps.php +16 -0
- data/spec/paybox_spec.rb +38 -0
- data/spec/spec_helper.rb +14 -0
- metadata +213 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
paybox (0.0.1)
|
5
|
+
activemodel
|
6
|
+
activesupport
|
7
|
+
activevalidators
|
8
|
+
httparty
|
9
|
+
i18n
|
10
|
+
|
11
|
+
GEM
|
12
|
+
remote: http://rubygems.org/
|
13
|
+
specs:
|
14
|
+
activemodel (3.0.3)
|
15
|
+
activesupport (= 3.0.3)
|
16
|
+
builder (~> 2.1.2)
|
17
|
+
i18n (~> 0.4)
|
18
|
+
activerecord (3.0.3)
|
19
|
+
activemodel (= 3.0.3)
|
20
|
+
activesupport (= 3.0.3)
|
21
|
+
arel (~> 2.0.2)
|
22
|
+
tzinfo (~> 0.3.23)
|
23
|
+
activesupport (3.0.3)
|
24
|
+
activevalidators (1.2.4)
|
25
|
+
activemodel (>= 3.0.0)
|
26
|
+
activerecord (>= 3.0.0)
|
27
|
+
date_validator (= 0.5.9)
|
28
|
+
mail
|
29
|
+
arel (2.0.6)
|
30
|
+
builder (2.1.2)
|
31
|
+
crack (0.1.8)
|
32
|
+
date_validator (0.5.9)
|
33
|
+
activemodel (>= 3.0.0)
|
34
|
+
diff-lcs (1.1.2)
|
35
|
+
fakeweb (1.3.0)
|
36
|
+
httparty (0.6.1)
|
37
|
+
crack (= 0.1.8)
|
38
|
+
i18n (0.5.0)
|
39
|
+
mail (2.2.12)
|
40
|
+
activesupport (>= 2.3.6)
|
41
|
+
i18n (>= 0.4.0)
|
42
|
+
mime-types (~> 1.16)
|
43
|
+
treetop (~> 1.4.8)
|
44
|
+
mime-types (1.16)
|
45
|
+
polyglot (0.3.1)
|
46
|
+
rspec (2.2.0)
|
47
|
+
rspec-core (~> 2.2)
|
48
|
+
rspec-expectations (~> 2.2)
|
49
|
+
rspec-mocks (~> 2.2)
|
50
|
+
rspec-core (2.2.1)
|
51
|
+
rspec-expectations (2.2.0)
|
52
|
+
diff-lcs (~> 1.1.2)
|
53
|
+
rspec-mocks (2.2.0)
|
54
|
+
treetop (1.4.9)
|
55
|
+
polyglot (>= 0.3.1)
|
56
|
+
tzinfo (0.3.23)
|
57
|
+
|
58
|
+
PLATFORMS
|
59
|
+
ruby
|
60
|
+
|
61
|
+
DEPENDENCIES
|
62
|
+
activemodel
|
63
|
+
activesupport
|
64
|
+
activevalidators
|
65
|
+
bundler
|
66
|
+
fakeweb
|
67
|
+
httparty
|
68
|
+
i18n
|
69
|
+
paybox!
|
70
|
+
rspec
|
71
|
+
rspec-core
|
72
|
+
rspec-expectations
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 Franck Verrot
|
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.
|
data/README.md
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
Paybox
|
2
|
+
======
|
3
|
+
|
4
|
+
|
5
|
+
Installation (Rails 3)
|
6
|
+
----------------------
|
7
|
+
|
8
|
+
In your Gemfile :
|
9
|
+
|
10
|
+
gem 'paybox'
|
11
|
+
|
12
|
+
|
13
|
+
Usage
|
14
|
+
-----
|
15
|
+
|
16
|
+
response = Paybox.new(
|
17
|
+
:operation => '00057',
|
18
|
+
:amount => 1000,
|
19
|
+
:user_id => your_db_customer/suscriber_account_id,
|
20
|
+
:card_nbr => card_number_or_encrypted_alias,
|
21
|
+
:expire => card_expiration_date (mmyy),
|
22
|
+
:cvv2 => card_cvv2_code (3 digits)
|
23
|
+
)
|
24
|
+
|
25
|
+
Then you can read response like this, for instance :
|
26
|
+
|
27
|
+
response.coderesponse = '00000' # => Cool, successful request
|
28
|
+
or
|
29
|
+
response.commentaire = "PAYBOX : Numéro de porteur invalide" # => Oooops, invalid card number given
|
30
|
+
|
31
|
+
Todo
|
32
|
+
----
|
33
|
+
|
34
|
+
Lots of improvements can be made:
|
35
|
+
|
36
|
+
* Add I18n
|
37
|
+
* Tests
|
38
|
+
* Documentation
|
39
|
+
* ...
|
40
|
+
|
41
|
+
Note on Patches/Pull Requests
|
42
|
+
-----------------------------
|
43
|
+
|
44
|
+
* Fork the project.
|
45
|
+
* Make your feature addition or bug fix.
|
46
|
+
* Add tests for it. This is important so I don't break it in a
|
47
|
+
future version unintentionally.
|
48
|
+
* Commit, do not mess with rakefile, version, or history.
|
49
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
50
|
+
* Send me a pull request. Bonus points for topic branches.
|
51
|
+
|
52
|
+
|
53
|
+
Contributors
|
54
|
+
------------
|
55
|
+
* Guillaume Barillot, author of the initial implementation
|
56
|
+
* Franck Verrot
|
57
|
+
|
58
|
+
Copyright
|
59
|
+
---------
|
60
|
+
|
61
|
+
Copyright (c) 2010 Franck Verrot. MIT LICENSE. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
begin
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
|
6
|
+
desc "Run specs"
|
7
|
+
RSpec::Core::RakeTask.new do |t|
|
8
|
+
t.rspec_opts = %w(-fs --color)
|
9
|
+
t.ruby_opts = %w(-w)
|
10
|
+
end
|
11
|
+
|
12
|
+
rescue LoadError
|
13
|
+
task :spec do
|
14
|
+
abort "Run `gem install rspec` to be able to run specs"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
task :default => :spec
|
data/lib/paybox.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'active_support/all'
|
3
|
+
require 'active_model'
|
4
|
+
require 'active_model/validations'
|
5
|
+
require 'activevalidators'
|
6
|
+
require 'httparty'
|
7
|
+
|
8
|
+
module Paybox
|
9
|
+
extend ActiveSupport::Autoload
|
10
|
+
autoload :Paybox
|
11
|
+
autoload :Transaction
|
12
|
+
autoload :Configuration
|
13
|
+
autoload :Gateway
|
14
|
+
autoload :Operation
|
15
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Paybox
|
2
|
+
module Operation
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
include ActiveModel::Validations
|
7
|
+
|
8
|
+
# Payment's details
|
9
|
+
attr_accessor :operation #:operation => ":operation . The code of requested operation to be done",
|
10
|
+
attr_accessor :amount #:amount => ":amount . The amount of the transaction",
|
11
|
+
attr_accessor :user_id #:user_id => "user_id . The id of your user in your own Database",
|
12
|
+
attr_accessor :card_nbr #:card_nbr => ":card_nbr . The crypted partial card number in your Database",
|
13
|
+
attr_accessor :expire #:expire => ":expire . The expiration date of the card",
|
14
|
+
attr_accessor :cvv2 #:cvv2 => ":cvv2 . The CVV2 parameter you should have stored in your DB",
|
15
|
+
attr_accessor :numtrans #:numtrans => ":numtrans . The previous transaction number"
|
16
|
+
|
17
|
+
|
18
|
+
validates :operation, :amount, :user_id, :card_nbr, :expire, :cvv2, :presence => true
|
19
|
+
validates :card_nbr, :credit_card => { :type => :any }
|
20
|
+
|
21
|
+
# WARNING :numtrans parameter IS REQUIRED only for operations 00002, 00005, 00013, 00017, 00052, 00055
|
22
|
+
NUM_TRANS_REQUIRED_ARRAY = ['00002', '00005', '000013', '00017', '00052', '00055']
|
23
|
+
validates :numtrans, :presence => true, :if => Proc.new { |obj| NUM_TRANS_REQUIRED_ARRAY.include?(obj.operation) }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module Paybox
|
2
|
+
class Paybox
|
3
|
+
include Configuration # Class-level configuration like site, rang, cle
|
4
|
+
include Gateway # Gateway technical infrastructure
|
5
|
+
include Operation # Internal validations
|
6
|
+
|
7
|
+
# Internal result when the object issues a call to Paybox
|
8
|
+
attr_accessor :transaction
|
9
|
+
|
10
|
+
def initialize(args)
|
11
|
+
args.each_pair { |k,v| send("#{k}=",v) }
|
12
|
+
end
|
13
|
+
|
14
|
+
def process
|
15
|
+
return false unless self.valid?
|
16
|
+
|
17
|
+
##### List of all available operations ###########
|
18
|
+
# One-shot operations for customers
|
19
|
+
# ------------------------------------------------
|
20
|
+
# 00001 = Autorisation,
|
21
|
+
# 00002 = Débit,
|
22
|
+
# 00003 = Autorisation + Débit,
|
23
|
+
# 00004 = Crédit,
|
24
|
+
# 00005 = Annulation,
|
25
|
+
# 00011 = Vérification de l’existence d’une transaction,
|
26
|
+
# 00012 = Transaction sans demande d’autorisation,
|
27
|
+
# 00013 = Modification du montant d’une transaction,
|
28
|
+
# 00014 = Remboursement,
|
29
|
+
# 00017 = Consultation
|
30
|
+
|
31
|
+
# Recurring Operations on suscriber accounts
|
32
|
+
# -----------------------------------------------
|
33
|
+
# 00051 = Autorisation seule sur un abonné,
|
34
|
+
# 00052 = Débit sur un abonné,
|
35
|
+
# 00053 = Autorisation + Débit sur un abonné,
|
36
|
+
# 00054 = Crédit sur un abonné,
|
37
|
+
# 00055 = Annulation d’une opération sur un abonné,
|
38
|
+
# 00056 = Inscription nouvel abonné,
|
39
|
+
# 00057 = Modification abonné existant,
|
40
|
+
# 00058 = Suppression abonné
|
41
|
+
# 00061 = Transaction sans demande d’autorisation (forçage).
|
42
|
+
|
43
|
+
current_date = Time.now
|
44
|
+
|
45
|
+
data = {
|
46
|
+
:SITE => self.class.site,
|
47
|
+
:RANG => self.class.rang,
|
48
|
+
:CLE => self.class.cle,
|
49
|
+
|
50
|
+
:DATEQ => current_date.strftime('%d%m%Y%H%M%S'),
|
51
|
+
:NUMQUESTION => current_date.to_i,
|
52
|
+
:TYPE => self.operation,
|
53
|
+
:MONTANT => self.amount,
|
54
|
+
:REFERENCE => "test",
|
55
|
+
:REFABONNE => self.user_id,
|
56
|
+
:VERSION => '00104',
|
57
|
+
:IDENTIFIANT => '2',
|
58
|
+
:DEVISE => "978", #EURO
|
59
|
+
:PORTEUR => self.card_nbr,
|
60
|
+
:DATEVAL => self.expire,
|
61
|
+
:CVV => self.cvv2,
|
62
|
+
:ACTIVITE => "024",
|
63
|
+
:ARCHIVAGE => "Simplissime.fr",
|
64
|
+
:DIFFERE => "000",
|
65
|
+
:NUMAPPEL => "",
|
66
|
+
:NUMTRANS => self.numtrans,
|
67
|
+
:AUTORISATION => "",
|
68
|
+
:PAYS => "FR"
|
69
|
+
}
|
70
|
+
|
71
|
+
response = self.class.post(PROCESS_PATH, :body => data)
|
72
|
+
|
73
|
+
# Now we've got a response, let's parse it
|
74
|
+
self.transaction = Transaction.new.tap do |trans|
|
75
|
+
response.body.split('&').each do |parameter|
|
76
|
+
parameter.strip!
|
77
|
+
key = parameter.split('=').first
|
78
|
+
value = Iconv.conv('utf-8', 'ISO-8859-1', parameter.split('=').last)
|
79
|
+
|
80
|
+
begin
|
81
|
+
#Transforms an attribute FIELD-BLAH into fieldblah
|
82
|
+
trans.send("#{key.downcase.tr('-','')}=", value)
|
83
|
+
rescue
|
84
|
+
warn "The gem doesnt know about the resulting field #{key}"
|
85
|
+
warn "Fill-in a ticket if you think this is not expected"
|
86
|
+
return false
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
true
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Paybox
|
2
|
+
class Transaction
|
3
|
+
attr_accessor :numtrans #'NUMTRANS' #Numéro de la transaction créée (int (10))
|
4
|
+
attr_accessor :numappel #'NUMAPPEL' # Numéro de la requête gérée sur Paybox (int (10))
|
5
|
+
attr_accessor :numquestion #'NUMQUESTION' # Identifiant unique et sequentiel (un timestamp sur 10 chiffres )
|
6
|
+
attr_accessor :site #'SITE' # Numéro d'adhérent fourni par la banque (int (7))
|
7
|
+
attr_accessor :rang #'RANG' # Numéro de rang fourni par la banque du commerçant (int (2))
|
8
|
+
attr_accessor :identifiant #'IDENTIFIANT' # Champ vide (int (10))
|
9
|
+
attr_accessor :autorisation #'AUTORISATION' # Numéro d'autorisation délivré par le centre d'autorisation de la banque du commerçant si le paiement est accepté (varchar (10))
|
10
|
+
attr_accessor :codereponse #'CODEREPONSE' # Code réponse concernant l'état de la réponse traité, opération acceptée ou refusée (varchar (10))
|
11
|
+
attr_accessor :refabonne #'REFABONNE' # Numéro d'abonné (user) contenu dans la trame question (varchar (250))
|
12
|
+
attr_accessor :porteur #'PORTEUR' # Numéro porteur partiel (n° carte crypté), Identique à la trame question (varchar (19))
|
13
|
+
attr_accessor :commentaire #'COMMENTAIRE' # Messages divers pour information (varchar(100))
|
14
|
+
attr_accessor :pays #'PAYS' # Code Pays du porteur de la carte (format ISO 3166)
|
15
|
+
attr_accessor :typecarte #'TYPECARTE' # Type de carte utilisé (varchar(10))
|
16
|
+
attr_accessor :sha1 #'SHA-1' # Empreinte SHA-1 de la carte utilisée
|
17
|
+
attr_accessor :status #'STATUS' # Etat de la transaction, retourné uniquement avec une question type 17 (=consultation) (varchar (16))
|
18
|
+
attr_accessor :remise #'REMISE' # Identifiant Paybox de la remise collectée (uniquement en consultation type 17), (int (9))
|
19
|
+
end
|
20
|
+
end
|
data/paybox.gemspec
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "paybox/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "paybox"
|
7
|
+
s.version = Paybox::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Franck Verrot","Guillaume Barillot"]
|
10
|
+
s.email = ["franck@verrot.fr"]
|
11
|
+
s.homepage = "http://www.verrot.fr"
|
12
|
+
s.summary = %q{Payment Gateway to Paybox's services}
|
13
|
+
s.description = %q{Payment Gateway to Paybox's services}
|
14
|
+
|
15
|
+
s.rubyforge_project = "paybox"
|
16
|
+
|
17
|
+
s.add_dependency 'activesupport'
|
18
|
+
s.add_dependency 'activemodel'
|
19
|
+
s.add_dependency 'i18n'
|
20
|
+
s.add_dependency 'httparty'
|
21
|
+
s.add_dependency 'activevalidators'
|
22
|
+
|
23
|
+
s.add_development_dependency 'bundler'
|
24
|
+
s.add_development_dependency 'rspec'
|
25
|
+
s.add_development_dependency 'rspec-core'
|
26
|
+
s.add_development_dependency 'rspec-expectations'
|
27
|
+
s.add_development_dependency 'fakeweb'
|
28
|
+
|
29
|
+
s.files = `git ls-files`.split("\n")
|
30
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
31
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
32
|
+
s.require_paths = ["lib"]
|
33
|
+
end
|
data/spec/paybox_spec.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper.rb')
|
2
|
+
|
3
|
+
TEST_DATA = {
|
4
|
+
:user_id => 1,
|
5
|
+
:card_nbr => '4111 1111 1111 1111',
|
6
|
+
:expire => '1012',
|
7
|
+
:cvv2 => '123'
|
8
|
+
}
|
9
|
+
|
10
|
+
describe "Paybox" do
|
11
|
+
before(:each) do
|
12
|
+
Paybox::Paybox.configure do |configuration|
|
13
|
+
configuration.site = '1999888'
|
14
|
+
configuration.rang = '99'
|
15
|
+
configuration.cle = '1999888I'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it "can be configured" do
|
20
|
+
Paybox::Paybox.site.should == '1999888'
|
21
|
+
Paybox::Paybox.rang.should == '99'
|
22
|
+
Paybox::Paybox.cle.should == '1999888I'
|
23
|
+
end
|
24
|
+
|
25
|
+
it "initializes itself and post the data to the GW" do
|
26
|
+
paybox = Paybox::Paybox.new(
|
27
|
+
:operation => '00057',
|
28
|
+
:amount => 1000,
|
29
|
+
:user_id => TEST_DATA[:user_id],
|
30
|
+
:card_nbr => TEST_DATA[:card_nbr],
|
31
|
+
:expire => TEST_DATA[:expire],
|
32
|
+
:cvv2 => TEST_DATA[:cvv2]
|
33
|
+
)
|
34
|
+
|
35
|
+
paybox.process.should be(true)
|
36
|
+
paybox.transaction.codereponse.should == '00000' #=> Cool, successful request
|
37
|
+
end
|
38
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'fakeweb'
|
2
|
+
require 'paybox'
|
3
|
+
|
4
|
+
RSpec.configure do |config|
|
5
|
+
FakeWeb.allow_net_connect = false
|
6
|
+
|
7
|
+
config.before :all do
|
8
|
+
FakeWeb.register_uri(
|
9
|
+
:post,
|
10
|
+
'https://preprod-ppps.paybox.com/PPPS.php',
|
11
|
+
:body => File.read(File.join(File.dirname(__FILE__), 'fixtures', 'PPPS.php'))
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,213 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: paybox
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Franck Verrot
|
13
|
+
- Guillaume Barillot
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-12-12 00:00:00 +01:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: activesupport
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: activemodel
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
segments:
|
43
|
+
- 0
|
44
|
+
version: "0"
|
45
|
+
type: :runtime
|
46
|
+
version_requirements: *id002
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: i18n
|
49
|
+
prerelease: false
|
50
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
version: "0"
|
58
|
+
type: :runtime
|
59
|
+
version_requirements: *id003
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: httparty
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
segments:
|
69
|
+
- 0
|
70
|
+
version: "0"
|
71
|
+
type: :runtime
|
72
|
+
version_requirements: *id004
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: activevalidators
|
75
|
+
prerelease: false
|
76
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
segments:
|
82
|
+
- 0
|
83
|
+
version: "0"
|
84
|
+
type: :runtime
|
85
|
+
version_requirements: *id005
|
86
|
+
- !ruby/object:Gem::Dependency
|
87
|
+
name: bundler
|
88
|
+
prerelease: false
|
89
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
segments:
|
95
|
+
- 0
|
96
|
+
version: "0"
|
97
|
+
type: :development
|
98
|
+
version_requirements: *id006
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: rspec
|
101
|
+
prerelease: false
|
102
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
103
|
+
none: false
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
segments:
|
108
|
+
- 0
|
109
|
+
version: "0"
|
110
|
+
type: :development
|
111
|
+
version_requirements: *id007
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: rspec-core
|
114
|
+
prerelease: false
|
115
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
segments:
|
121
|
+
- 0
|
122
|
+
version: "0"
|
123
|
+
type: :development
|
124
|
+
version_requirements: *id008
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rspec-expectations
|
127
|
+
prerelease: false
|
128
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ">="
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
segments:
|
134
|
+
- 0
|
135
|
+
version: "0"
|
136
|
+
type: :development
|
137
|
+
version_requirements: *id009
|
138
|
+
- !ruby/object:Gem::Dependency
|
139
|
+
name: fakeweb
|
140
|
+
prerelease: false
|
141
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
142
|
+
none: false
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
segments:
|
147
|
+
- 0
|
148
|
+
version: "0"
|
149
|
+
type: :development
|
150
|
+
version_requirements: *id010
|
151
|
+
description: Payment Gateway to Paybox's services
|
152
|
+
email:
|
153
|
+
- franck@verrot.fr
|
154
|
+
executables: []
|
155
|
+
|
156
|
+
extensions: []
|
157
|
+
|
158
|
+
extra_rdoc_files: []
|
159
|
+
|
160
|
+
files:
|
161
|
+
- .gitignore
|
162
|
+
- Gemfile
|
163
|
+
- Gemfile.lock
|
164
|
+
- LICENSE
|
165
|
+
- README.md
|
166
|
+
- Rakefile
|
167
|
+
- lib/paybox.rb
|
168
|
+
- lib/paybox/configuration.rb
|
169
|
+
- lib/paybox/gateway.rb
|
170
|
+
- lib/paybox/operation.rb
|
171
|
+
- lib/paybox/paybox.rb
|
172
|
+
- lib/paybox/transaction.rb
|
173
|
+
- lib/paybox/version.rb
|
174
|
+
- paybox.gemspec
|
175
|
+
- spec/fixtures/ppps.php
|
176
|
+
- spec/paybox_spec.rb
|
177
|
+
- spec/spec_helper.rb
|
178
|
+
has_rdoc: true
|
179
|
+
homepage: http://www.verrot.fr
|
180
|
+
licenses: []
|
181
|
+
|
182
|
+
post_install_message:
|
183
|
+
rdoc_options: []
|
184
|
+
|
185
|
+
require_paths:
|
186
|
+
- lib
|
187
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
188
|
+
none: false
|
189
|
+
requirements:
|
190
|
+
- - ">="
|
191
|
+
- !ruby/object:Gem::Version
|
192
|
+
segments:
|
193
|
+
- 0
|
194
|
+
version: "0"
|
195
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
196
|
+
none: false
|
197
|
+
requirements:
|
198
|
+
- - ">="
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
segments:
|
201
|
+
- 0
|
202
|
+
version: "0"
|
203
|
+
requirements: []
|
204
|
+
|
205
|
+
rubyforge_project: paybox
|
206
|
+
rubygems_version: 1.3.7
|
207
|
+
signing_key:
|
208
|
+
specification_version: 3
|
209
|
+
summary: Payment Gateway to Paybox's services
|
210
|
+
test_files:
|
211
|
+
- spec/fixtures/ppps.php
|
212
|
+
- spec/paybox_spec.rb
|
213
|
+
- spec/spec_helper.rb
|