safecharge 0.1.5 → 0.1.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 731dce76f09887799382bc99ea323db3f8b4877d
4
- data.tar.gz: 34341b413962e2d82b748aced85bd66d19e80915
3
+ metadata.gz: e16fac48537c2dc644f47d804971ff2d239934f2
4
+ data.tar.gz: 1a800151f2898ae5d67f5e53b0c271c905a278a6
5
5
  SHA512:
6
- metadata.gz: 949e84937fd2143bf78a34c99b21f78e619ff67e6ad7841dea34908bddc7c694d87b1834e8a88a35a2b41cf0e667d266ba8cf093952a4c861969810582414406
7
- data.tar.gz: 3e08c753bb07c7a0fd561f1ce0f929459a592b06243532b0d391d0b744d8fd4120e035f97232e5f891f74710ac3e4da1f6756e0ea6d484ad6ba6c8f39b0727b7
6
+ metadata.gz: a9ab27671b505cecc2009e3dcfc35d358f06399f5457f610fc8d920008010538e3a7462e5a541fa458ff7ae3b140889ee2838d8887c461bf224f1c16ea19b03c
7
+ data.tar.gz: a5528c5b61159db404acff2f829fc4b156b64161946a017130a14886d27cdfa7fd7e0d991b92d3e9d30531fe83f03f0e559df9cc9be7907e0013ad815aae4ccd
@@ -0,0 +1,35 @@
1
+ <component name="ProjectRunConfigurationManager">
2
+ <configuration default="false" name="safe_change_spec" type="RSpecRunConfigurationType" factoryName="RSpec">
3
+ <predefined_log_file id="RUBY_RSPEC" enabled="true" />
4
+ <module name="safecharge-api" />
5
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
6
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="" />
7
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
8
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
9
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
10
+ <envs />
11
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="true" />
12
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
13
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
14
+ <COVERAGE_PATTERN ENABLED="true">
15
+ <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
16
+ </COVERAGE_PATTERN>
17
+ </EXTENSION>
18
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
19
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="" />
20
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="spec/safecharge_spec.rb" />
21
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_RUNNER_PATH" VALUE="" />
22
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="**/*_spec.rb" />
23
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_EXAMPLE_NAME" VALUE="" />
24
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="TEST_SCRIPT" />
25
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_ARGS" VALUE="" />
26
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_VERSION" VALUE="" />
27
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="USE_CUSTOM_SPEC_RUNNER" VALUE="false" />
28
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="DRB" VALUE="false" />
29
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ZEUS" VALUE="false" />
30
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="FULL_BACKTRACE" VALUE="false" />
31
+ <RunnerSettings RunnerId="RubyRunner" />
32
+ <ConfigurationWrapper RunnerId="RubyRunner" />
33
+ <method />
34
+ </configuration>
35
+ </component>
data/lib/safecharge.rb CHANGED
@@ -145,4 +145,39 @@ module Safecharge
145
145
  end
146
146
  end
147
147
 
148
+ # module level method to get the redirection URL given some params.
149
+ # you must explicitly set the mode to 'live' to generate the production URL.
150
+ def self.sg_request_url(params = {}, mode = 'test')
151
+ result = nil
152
+ url = ''
153
+ case mode
154
+ when 'test'
155
+ url = Safecharge::Constants::SG_SERVER_TEST
156
+ when 'live'
157
+ url = Safecharge::Constants::SG_SERVER_LIVE
158
+ else
159
+ raise ArgumentError, "Invalid request mode #{mode}"
160
+ end
161
+
162
+ begin
163
+ request = Safecharge::SgRequest.new(url, params)
164
+ return request.full_url
165
+
166
+ rescue InternalException => e
167
+ puts "Caught Internal Exception: #{e.message}"
168
+ puts e.backtrace
169
+ raise RuntimeError, "Internal server error. Please try again later."
170
+
171
+ rescue ValidationException => e
172
+ puts "Caught Validation Exception: #{e.message}"
173
+ puts e.backtrace
174
+ raise RuntimeError, "Validation error: #{e.message} Fix your data and retry."
175
+
176
+ rescue SafechargeError => e
177
+ puts "Caught General Safecharge Error: #{e.message}"
178
+ puts e.backtrace
179
+ raise RuntimeError, "Undocumented Internal error: #{e.message}"
180
+ end
181
+ end
182
+
148
183
  end
@@ -4,18 +4,25 @@
4
4
  module Safecharge
5
5
  class Constants
6
6
  API_VERSION = '3.0.0'
7
+ SG_API_VERSION = '4.0.2'
7
8
 
8
9
  SERVER_TEST = ENV['SAFECHARGE_SERVER_TEST'] # provided by SafeCharge
9
10
  SERVER_LIVE = ENV['SAFECHARGE_SERVER_LIVE'] # provided by SafeCharge
10
-
11
+
12
+ SG_SERVER_TEST = ENV['SAFECHARGE_SG_SERVER_TEST'] # provided by SafeCharge
13
+ SG_SERVER_LIVE = ENV['SAFECHARGE_SG_SERVER_LIVE'] # provided by SafeCharge
14
+ SG_RESPONSE_FORMAT = 4 # XML
15
+ SG_DEFAULT_CREDIT_TYPE = 1 # Regular Credit
16
+
11
17
  SECRET_KEY = ENV['SAFECHARGE_SECRET_KEY'] # provided by SafeCharge
12
18
  MERCHANT_ID = ENV['SAFECHARGE_MERCHANT_ID'].to_i # provided by SafeCharge
13
19
  MERCHANT_SITE_ID = ENV['SAFECHARGE_MERCHANT_SITE_ID'].to_i # provided by SafeCharge
14
20
  MERCHANT_3D_SITE_ID = ENV['SAFECHARGE_MERCHANT_3D_SITE_ID'].to_i # provided by SafeCharge
15
-
21
+
22
+ SG_CLIENT_LOGIN_ID = ENV['SAFECHARGE_SG_CLIENT_LOGIN_ID'] # provided by SafeCharge
16
23
  SG_CLIENT_PASSWORD = ENV['SAFECHARGE_SG_CLIENT_PASSWORD'] # provided by SafeCharge
17
24
  SG_3D_CLIENT_PASSWORD = ENV['SAFECHARGE_SG_3D_CLIENT_PASSWORD'] # provided by SafeCharge
18
-
25
+
19
26
  CPANEL_PASSWORD = ENV['SAFECHARGE_CPANEL_PASSWORD'] # provided by SafeCharge
20
27
 
21
28
  APPROVED = 'APPROVED'
@@ -143,6 +143,8 @@ module Safecharge
143
143
  correct_type = p.is_a?(String) && ['true', 'false'].include?(p)
144
144
  when 'usertoken'
145
145
  correct_type = p.is_a?(String) && ['register', 'auto'].include?(p)
146
+ when 'sgtranstype'
147
+ correct_type = p.is_a?(String) && ['Sale', 'Auth', 'Settle', 'Credit', 'AVSOnly', 'Void', 'Auth3D'].include?(p)
146
148
  when 'string'
147
149
  correct_type = p.is_a? String
148
150
  raise ValidationException, sprintf("Value '%s' in field '%s' is too long.", p, name) if p.size > meta[:length]
@@ -0,0 +1,66 @@
1
+ #!/user/bin/env ruby
2
+ #coding: utf-8
3
+
4
+ require "safecharge"
5
+ require "safecharge/constants"
6
+
7
+ module Safecharge
8
+ class SgRequest < Request
9
+
10
+ ALLOWED_FIELDS = {
11
+ 'sg_NameOnCard' => {:required => true, :type => 'string', length: 70},
12
+ 'sg_CardNumber' => {:required => false, :type => 'string', length: 20},
13
+ 'sg_ExpMonth' => {:required => true, :type => 'string', length: 2},
14
+ 'sg_ExpYear' => {:required => true, :type => 'string', length: 2},
15
+ 'sg_TransType' => {:required => true, :type => 'sgtranstype'},
16
+ 'sg_Currency' => {:required => true, :type => 'currency_code'},
17
+ 'sg_Amount' => {:required => true, :type => 'currency'},
18
+ 'sg_AuthCode' => {:required => false, :type => 'string', length: 10},
19
+ 'sg_ClientLoginID' => {:required => true, :type => 'string', length: 24},
20
+ 'sg_ClientPassword' => {:required => true, :type => 'string', length: 24},
21
+ 'sg_ClientUniqueID' => {:required => false, :type => 'string', length: 64},
22
+ 'sg_TransactionID' => {:required => false, :type => 'string', length: 32},
23
+ 'sg_CreditType' => {:required => true, :type => 'int'},
24
+ 'sg_ResponseFormat' => {:required => true, :type => 'int'},
25
+ 'sg_Version' => {:required => false, :type => 'string', length: 5},
26
+ 'sg_FirstName' => {:required => true, :type => 'string', length: 30},
27
+ 'sg_LastName' => {:required => true, :type => 'string', length: 40},
28
+ 'sg_Address' => {:required => true, :type => 'string', length: 60},
29
+ 'sg_City' => {:required => true, :type => 'string', length: 30},
30
+ 'sg_State' => {:required => false, :type => 'string', length: 30},
31
+ 'sg_Zip' => {:required => true, :type => 'string', length: 10}, # post code
32
+ 'sg_Country' => {:required => true, :type => 'string', length: 3}, # ISO Code
33
+ 'sg_Phone' => {:required => true, :type => 'string', length: 18},
34
+ 'sg_IPAddress' => {:required => true, :type => 'string', length: 15},
35
+ 'sg_Email' => {:required => true, :type => 'string', length: 100},
36
+ 'sg_CCToken' => {:required => false, :type => 'string', length: 150}
37
+
38
+ }
39
+
40
+ DEFAULT_PARAMS = {
41
+ 'sg_ClientLoginID' => Safecharge::Constants::SG_CLIENT_LOGIN_ID,
42
+ 'sg_ClientPassword' => Safecharge::Constants::SG_CLIENT_PASSWORD,
43
+ 'sg_Currency' => Safecharge::Constants::DEFAULT_CURRENCY_CODE,
44
+ 'sg_CreditType' => Safecharge::Constants::SG_DEFAULT_CREDIT_TYPE,
45
+ 'sg_Version' => Safecharge::Constants::SG_API_VERSION,
46
+ 'sg_ResponseFormat' => Safecharge::Constants::SG_RESPONSE_FORMAT
47
+ }
48
+
49
+ def initialize(a_url, some_params = {})
50
+ raise ArgumentError, "missing url" if a_url == nil || a_url.empty?
51
+ if a_url === Safecharge::Constants::SG_SERVER_TEST
52
+ self.mode = 'test'
53
+ elsif a_url === Safecharge::Constants::SG_SERVER_LIVE
54
+ self.mode = 'live'
55
+ else
56
+ raise ArgumentError, "invalid url #{a_url}"
57
+ end
58
+ self.url = a_url
59
+ self.full_url = a_url
60
+ self.params = DEFAULT_PARAMS.merge(convert_symbols_to_strings(some_params))
61
+ self.validate_parameters(self.params)
62
+ self.construct_url
63
+ end
64
+
65
+ end
66
+ end
@@ -2,5 +2,5 @@
2
2
  #coding: utf-8
3
3
 
4
4
  module Safecharge
5
- VERSION = "0.1.5"
5
+ VERSION = "0.1.6"
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: safecharge
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Sag
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-02 00:00:00.000000000 Z
11
+ date: 2014-01-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -73,6 +73,7 @@ executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
+ - .idea/runConfigurations/safe_change_spec.xml
76
77
  - Gemfile
77
78
  - LICENSE.txt
78
79
  - README.md
@@ -81,6 +82,7 @@ files:
81
82
  - lib/safecharge/dmn.rb
82
83
  - lib/safecharge/request.rb
83
84
  - lib/safecharge/response.rb
85
+ - lib/safecharge/sg_request.rb
84
86
  - lib/safecharge/version.rb
85
87
  - lib/safecharge/wc_request.rb
86
88
  - safecharge.gemspec