banorte_payworks 0.9.3 → 0.9.4

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6f87eeddc4388c2138183fa961ddabfb7a8ca12a
4
+ data.tar.gz: ed6a7b90600cafd5f082fb7b617b07948cfbee01
5
+ SHA512:
6
+ metadata.gz: 72cea3f7058949899ba5bdc18e7e940b44f999337e5ea5c9c85896eedc2d4da1af07edf0adaa3f811675b6d7db51e68eb4983b920c75ed0a551f68ef3657d7ee
7
+ data.tar.gz: 4fb22db5b147bc1c9747554b75f2567524fcfa6ec2632d21734e64d340ba12415baf494045da000e81a9a52de5642063e8ee976237230db5a89d4b8d9797063d
@@ -1,14 +1,18 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- banorte_payworks (0.9.3)
4
+ banorte_payworks (0.9.4)
5
+ faraday
5
6
  httpclient (>= 2.3.3)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
10
11
  diff-lcs (1.2.4)
12
+ faraday (0.8.7)
13
+ multipart-post (~> 1.1)
11
14
  httpclient (2.3.3)
15
+ multipart-post (1.2.0)
12
16
  rake (10.1.0)
13
17
  rspec (2.13.0)
14
18
  rspec-core (~> 2.13.0)
@@ -5,23 +5,25 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require 'banorte_payworks/version'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.name = "banorte_payworks"
8
+ spec.name = 'banorte_payworks'
9
9
  spec.version = BanortePayworks::VERSION
10
- spec.authors = ["Jonathan Garay"]
11
- spec.email = ["jonathan@devmask.net"]
10
+ spec.authors = ['Jonathan Garay']
11
+ spec.email = %w(jonathan@devmask.net)
12
12
  spec.description = %q{Simple TPV for Banorte Payworks Mexican Gateway}
13
13
  spec.summary = %q{Simple TPV implementation for Banorte Payworks}
14
- spec.homepage = "http://devmask.net/banorte_payworks/"
15
- spec.license = "MIT"
14
+ spec.homepage = 'http://devmask.net/banorte_payworks/'
15
+ spec.license = 'MIT'
16
16
 
17
17
  spec.files = `git ls-files`.split($/)
18
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
- spec.require_paths = ["lib"]
20
+ spec.require_paths = %w(lib)
21
21
 
22
- spec.add_dependency('httpclient', '>= 2.3.3')
22
+ spec.add_dependency 'httpclient', '>= 2.3.3'
23
+ spec.add_dependency 'faraday'
24
+
25
+ spec.add_development_dependency 'bundler', '~> 1.3'
26
+ spec.add_development_dependency 'rake'
27
+ spec.add_development_dependency 'rspec'
23
28
 
24
- spec.add_development_dependency "bundler", "~> 1.3"
25
- spec.add_development_dependency "rake"
26
- spec.add_development_dependency "rspec"
27
29
  end
@@ -1 +1,5 @@
1
1
  require File.join(File.dirname(__FILE__), 'banorte_payworks/simple_tpv')
2
+ require File.join(File.dirname(__FILE__), 'banorte_payworks/banorte_transaction')
3
+
4
+ class BpayworksException < Exception; end
5
+
@@ -0,0 +1,48 @@
1
+ class BanorteTransaction
2
+ attr_accessor :error_code, :message, :authnum, :order_id, :amount,
3
+ :card_number, :cvv, :exp_date, :_original_post,
4
+ :e, :time_in, :time_out, :card_type, :issuing_bank,
5
+ :transaction_type, :transaction_status
6
+
7
+ def self.from_post(post)
8
+ #TODO this big huge method needs to be abstracted to an a class and we need to cas the proper primitive types
9
+ parsed_post = CGI::parse(post)
10
+ create_with_properties self do |transaction|
11
+ transaction._original_post = post
12
+ transaction.error_code = parsed_post['CcErrCode'][0]
13
+ transaction.message = parsed_post['Text'][0]
14
+ transaction.authnum = parsed_post['AuthCode'][0]
15
+ transaction.order_id = parsed_post['OrderId'][0]
16
+ transaction.amount = parsed_post['Total'][0]
17
+ transaction.time_in = parsed_post['TimeIn'][0]
18
+ transaction.time_out = parsed_post['TimeOut'][0]
19
+
20
+ transaction.e = [parsed_post['E1'][0],
21
+ parsed_post['E2'][0],
22
+ parsed_post['E3'][0]]
23
+
24
+ transaction.card_type = parsed_post['CardType'][0]
25
+ transaction.issuing_bank = parsed_post['IssuingBank'][0]
26
+ transaction.transaction_type = parsed_post['TransType'][0]
27
+ transaction.transaction_status = parsed_post['TransStat'][0]
28
+
29
+ transaction.card_number = parsed_post['Number'][0]
30
+ end
31
+ end
32
+
33
+ def valid?
34
+ error_code.eql? '1'
35
+ end
36
+
37
+ def validate!
38
+ raise BpayworksException.new("Error::#{error_code}: #{message}") unless valid?
39
+ end
40
+
41
+ private
42
+ def self.create_with_properties(clazz, &block)
43
+ instance = clazz.new
44
+ yield instance
45
+ instance
46
+ end
47
+
48
+ end
@@ -1,85 +1,70 @@
1
- module BanortePayworks
1
+ require 'httpclient'
2
+ require 'cgi'
2
3
 
3
- require 'httpclient'
4
+ module BanortePayworks
4
5
 
5
- PAYWORKS_URL = "https://eps.banorte.com/recibo"
6
- PAYWORKS_3DS_URL = "https://eps.banorte.com/secure3d/Solucion3DSecure.htm"
6
+ PAYWORKS_URL = 'https://eps.banorte.com/recibo'
7
+ PAYWORKS_3DS_URL = 'https://eps.banorte.com/secure3d/Solucion3DSecure.htm'
7
8
 
8
9
  MODE = {
9
- :production => 'P',
10
- :reject => 'R',
11
- :accept => 'Y',
12
- :random => 'R'
10
+ production: 'P',
11
+ reject: 'R',
12
+ accept: 'Y',
13
+ random: 'R'
13
14
  }
14
15
 
15
16
  TYPE = {
16
- :auth => 'Auth',
17
- :pre_auth => 'PreAuth',
18
- :post_auth => 'PostAuth',
19
- :void => 'Void',
20
- :credit => 'Credit',
21
- :force_insert_auth => 'ForceInsertAuth',
22
- :verify => 'Verify'
17
+ auth: 'Auth',
18
+ pre_auth: 'PreAuth',
19
+ post_auth: 'PostAuth',
20
+ void: 'Void',
21
+ credit: 'Credit',
22
+ force_insert_auth: 'ForceInsertAuth',
23
+ verify: 'Verify'
23
24
  }
24
25
 
25
-
26
- class BpayworksException < Exception
27
- end
28
-
29
- class BanorteTransaction
30
- require 'cgi'
31
-
32
- attr_accessor :error_code, :message, :authnum, :order_id, :amount, :card_number, :cvv, :exp_date
33
-
34
-
35
- def self.from_post(post)
36
- parsed_post = CGI::parse(post)
37
- protocol = BanorteTransaction.new
38
- protocol.error_code = parsed_post['CcErrCode'][0]
39
- protocol.message = parsed_post['Text'][0]
40
- protocol.authnum = parsed_post['AuthCode'][0]
41
- protocol.order_id = parsed_post['OrderId'][0]
42
- protocol.amount = parsed_post['Total'][0]
43
- protocol.card_number = parsed_post['Number'][0]
44
- protocol
45
- end
46
-
47
-
48
- end
49
-
50
26
  class SimpleTPV
27
+ attr_accessor :config
51
28
 
52
- def initialize(config={})
53
- @config = config
29
+ def initialize(config = {})
30
+ self.config = config
54
31
  end
55
32
 
56
- #Simple call to payment
57
33
  def do_payment(order_id, card_number, exp_date, cvv, amount)
58
- do_transaction :card_number => card_number,
59
- :exp_date => exp_date,
60
- :cvv => cvv,
61
- :amount => amount,
62
- :order_id => order_id,
63
- :response_path => 'http://sample.net/',
64
- :type => BanortePayworks::TYPE[:auth]
34
+ do_transaction card_number: card_number,
35
+ exp_date: exp_date,
36
+ cvv: cvv,
37
+ amount: amount,
38
+ order_id: order_id,
39
+ response_path: 'http://sample.net/',
40
+ type: BanortePayworks::TYPE[:auth]
65
41
  end
66
42
 
67
43
  def void(transaction)
68
-
69
- do_transaction :order_id => transaction.order_id,
70
- :amount => transaction.amount,
71
- :authnum => transaction.authnum,
72
- :card_number => transaction.card_number,
73
- :exp_date => transaction.exp_date,
74
- :cvv => transaction.cvv,
75
- :response_path => 'http://sample.net/',
76
- :type => BanortePayworks::TYPE[:void]
44
+ do_transaction order_id: transaction.order_id,
45
+ amount: transaction.amount,
46
+ authnum: transaction.authnum,
47
+ card_number: transaction.card_number,
48
+ exp_date: transaction.exp_date,
49
+ cvv: transaction.cvv,
50
+ response_path: 'http://sample.net/',
51
+ type: BanortePayworks::TYPE[:void]
77
52
 
78
53
  end
79
54
 
80
55
  def do_transaction(properties = {})
56
+ return_eval BanorteTransaction.from_post payworks_request(properties).first do |protocol|
57
+ protocol.card_number = properties[:card_number]
58
+ protocol.cvv = properties[:cvv]
59
+ protocol.exp_date = properties[:exp_date]
60
+ protocol.validate!
61
+ end
62
+ end
63
+
64
+ protected
81
65
 
82
- location = HTTPClient.new.post(PAYWORKS_URL, {
66
+ def payworks_request(properties)
67
+ HTTPClient.new.post(PAYWORKS_URL, {
83
68
  'Name' => @config[:username],
84
69
  'Password' => @config[:password],
85
70
  'ClientId' => @config[:client_id],
@@ -93,26 +78,15 @@ module BanortePayworks
93
78
  'ResponsePath' => properties[:response_path],
94
79
  'OrderId' => properties[:order_id],
95
80
  'AuthCode' => properties[:authnum].to_s
81
+ }).header['Location']
82
+ end
96
83
 
97
- }).header['Location'].to_s
98
-
99
- puts location.inspect if properties[:verbose]
100
-
101
- protocol = BanorteTransaction.from_post location
102
-
103
- #hack ?
104
- protocol.card_number = properties[:card_number]
105
- protocol.cvv = properties[:cvv]
106
- protocol.exp_date = properties[:exp_date]
107
-
108
- if protocol.error_code != '1'
109
- raise BpayworksException.new("Error::#{protocol.error_code}: #{protocol.message}")
110
- else
111
- protocol
112
- end
84
+ private
113
85
 
86
+ def return_eval(object, &block)
87
+ yield object
88
+ object
114
89
  end
115
-
116
90
  end
117
91
 
118
92
  end
@@ -1,3 +1,3 @@
1
1
  module BanortePayworks
2
- VERSION = "0.9.3"
2
+ VERSION = '0.9.4'
3
3
  end
@@ -1,14 +1,24 @@
1
1
  require 'banorte_payworks'
2
2
 
3
3
  describe BanortePayworks::SimpleTPV do
4
- it "Call do transaction" do
5
- tpv = BanortePayworks::SimpleTPV.new :username => 'tienda19',
6
- :password => '2006',
7
- :client_id=>'19',
8
- :mode=>BanortePayworks::MODE[:accept]
4
+ describe '#transaction' do
5
+ let(:credit_card_number){ 4916098986962263 }
6
+ let(:expiration_date){ '12/14' }
7
+ let(:cvv){ 123 }
8
+ let(:amount){ 1.0 }
9
+ let(:order_id){ rand(10000) }
9
10
 
10
- transaction = tpv.do_payment(rand(100000),4916098986962263,'12/13','123',1.0)
11
- tpv.void transaction
11
+ let(:tpv) do
12
+ BanortePayworks::SimpleTPV.new :username => 'tienda19',
13
+ :password => '2006',
14
+ :client_id=>'19',
15
+ :mode=>BanortePayworks::MODE[:accept]
16
+ end
12
17
 
18
+ let(:result){tpv.do_payment(rand(100000), credit_card_number, expiration_date, '123', 1.0)}
19
+
20
+ it{ expect(result.valid?).to be_true }
21
+ it{ expect(result.card_number).to_not be_nil }
22
+ it{ expect(tpv.void(result).valid?).to be_true }
13
23
  end
14
24
  end
@@ -1,5 +1,6 @@
1
1
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
2
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+
3
4
  require 'rspec'
4
5
  require 'banorte_payworks'
5
6
 
@@ -8,5 +9,5 @@ require 'banorte_payworks'
8
9
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
10
 
10
11
  RSpec.configure do |config|
11
-
12
+
12
13
  end
metadata CHANGED
@@ -1,36 +1,46 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: banorte_payworks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
5
- prerelease:
4
+ version: 0.9.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jonathan Garay
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-07-02 00:00:00.000000000 Z
11
+ date: 2013-07-09 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: httpclient
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 2.3.3
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: 2.3.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
30
41
  - !ruby/object:Gem::Dependency
31
42
  name: bundler
32
43
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
44
  requirements:
35
45
  - - ~>
36
46
  - !ruby/object:Gem::Version
@@ -38,7 +48,6 @@ dependencies:
38
48
  type: :development
39
49
  prerelease: false
40
50
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
51
  requirements:
43
52
  - - ~>
44
53
  - !ruby/object:Gem::Version
@@ -46,33 +55,29 @@ dependencies:
46
55
  - !ruby/object:Gem::Dependency
47
56
  name: rake
48
57
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
58
  requirements:
51
- - - ! '>='
59
+ - - '>='
52
60
  - !ruby/object:Gem::Version
53
61
  version: '0'
54
62
  type: :development
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
- - - ! '>='
66
+ - - '>='
60
67
  - !ruby/object:Gem::Version
61
68
  version: '0'
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: rspec
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
- - - ! '>='
73
+ - - '>='
68
74
  - !ruby/object:Gem::Version
69
75
  version: '0'
70
76
  type: :development
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
- - - ! '>='
80
+ - - '>='
76
81
  - !ruby/object:Gem::Version
77
82
  version: '0'
78
83
  description: Simple TPV for Banorte Payworks Mexican Gateway
@@ -92,38 +97,35 @@ files:
92
97
  - VERSION
93
98
  - banorte_payworks.gemspec
94
99
  - lib/banorte_payworks.rb
100
+ - lib/banorte_payworks/banorte_transaction.rb
95
101
  - lib/banorte_payworks/simple_tpv.rb
96
102
  - lib/banorte_payworks/version.rb
97
103
  - spec/banorte_payworks_simpletpv_spec.rb
98
- - spec/banorte_payworks_spec.rb
99
104
  - spec/spec_helper.rb
100
105
  homepage: http://devmask.net/banorte_payworks/
101
106
  licenses:
102
107
  - MIT
108
+ metadata: {}
103
109
  post_install_message:
104
110
  rdoc_options: []
105
111
  require_paths:
106
112
  - lib
107
113
  required_ruby_version: !ruby/object:Gem::Requirement
108
- none: false
109
114
  requirements:
110
- - - ! '>='
115
+ - - '>='
111
116
  - !ruby/object:Gem::Version
112
117
  version: '0'
113
118
  required_rubygems_version: !ruby/object:Gem::Requirement
114
- none: false
115
119
  requirements:
116
- - - ! '>='
120
+ - - '>='
117
121
  - !ruby/object:Gem::Version
118
122
  version: '0'
119
123
  requirements: []
120
124
  rubyforge_project:
121
- rubygems_version: 1.8.24
125
+ rubygems_version: 2.0.3
122
126
  signing_key:
123
- specification_version: 3
127
+ specification_version: 4
124
128
  summary: Simple TPV implementation for Banorte Payworks
125
129
  test_files:
126
130
  - spec/banorte_payworks_simpletpv_spec.rb
127
- - spec/banorte_payworks_spec.rb
128
131
  - spec/spec_helper.rb
129
- has_rdoc:
@@ -1,5 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe "BanortePayworks" do
4
-
5
- end