virtual_merchant 0.1.2 → 0.1.3
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/lib/virtual_merchant/communication.rb +35 -0
- data/lib/virtual_merchant/response.rb +47 -18
- data/lib/virtual_merchant.rb +16 -59
- metadata +3 -2
@@ -0,0 +1,35 @@
|
|
1
|
+
module VirtualMerchant
|
2
|
+
class Communication
|
3
|
+
require 'net/http'
|
4
|
+
require "rexml/document"
|
5
|
+
|
6
|
+
attr_accessor :xml, :url, :http_referer, :uri
|
7
|
+
|
8
|
+
def initialize(data)
|
9
|
+
@xml = data[:xml]
|
10
|
+
@url = data[:url]
|
11
|
+
@uri = URI.parse(@url)
|
12
|
+
@http_referer = data[:http_referer]
|
13
|
+
end
|
14
|
+
|
15
|
+
def send
|
16
|
+
http = Net::HTTP.new(@uri.host, @uri.port)
|
17
|
+
http.use_ssl = true
|
18
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
19
|
+
begin
|
20
|
+
http.post(uri.request_uri, xml, header).body
|
21
|
+
rescue
|
22
|
+
false
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
def header
|
28
|
+
if @http_referer
|
29
|
+
header = { 'Referer' => @http_referer }
|
30
|
+
else
|
31
|
+
header = {}
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,25 +1,54 @@
|
|
1
1
|
module VirtualMerchant
|
2
|
+
require "rexml/document"
|
2
3
|
class Response
|
3
|
-
attr_accessor :result_message, :result, :blurred_card_number, :exp_date,
|
4
|
-
:cvv2_response, :transaction_id, :transaction_time, :error,
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
if
|
9
|
-
|
10
|
-
@error = info[:error]
|
11
|
-
@approved = false
|
4
|
+
attr_accessor :result_message, :result, :blurred_card_number, :exp_date,
|
5
|
+
:approval_code, :cvv2_response, :transaction_id, :transaction_time, :error,
|
6
|
+
:approved
|
7
|
+
|
8
|
+
def initialize(xml_string)
|
9
|
+
if xml_string == false
|
10
|
+
error_response("-1", "VirtualMerchant did not respond.")
|
12
11
|
else
|
13
|
-
|
14
|
-
@result_type = "approval"
|
15
|
-
@result = info[:result]
|
16
|
-
@blurred_card_number = info[:blurred_card_number]
|
17
|
-
@exp_date = info[:exp_date]
|
18
|
-
@approval_code = info[:approval_code]
|
19
|
-
@cvv2_response = info[:cvv2_response]
|
20
|
-
@transaction_id = info[:transaction_id]
|
21
|
-
@transaction_time = info[:transaction_time]
|
12
|
+
decode_xml(xml_string)
|
22
13
|
end
|
23
14
|
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def decode_xml(xml_string)
|
18
|
+
doc = REXML::Document.new(xml_string)
|
19
|
+
REXML::XPath.each(doc, "txn") do |xml|
|
20
|
+
if xml.elements["errorCode"]
|
21
|
+
#Something was wrong with the transaction so an
|
22
|
+
#errorCode and errorMessage were sent back
|
23
|
+
error_response(
|
24
|
+
xml.elements["errorCode"].text, xml.elements["errorMessage"].text)
|
25
|
+
elsif (xml.elements["ssl_result"] && xml.elements["ssl_result"].text != "0")
|
26
|
+
#something closer to an approval, but still declined
|
27
|
+
error_response(
|
28
|
+
xml.elements["ssl_result"].text, xml.elements["ssl_result_message"].text)
|
29
|
+
else
|
30
|
+
#a clean transaction has taken place
|
31
|
+
approval(xml)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def error_response(code, message)
|
37
|
+
@approved = false
|
38
|
+
@result_message = message
|
39
|
+
@error = code
|
40
|
+
end
|
41
|
+
|
42
|
+
def approval(xml)
|
43
|
+
@approved = true
|
44
|
+
@result_message = xml.elements["ssl_result_message"].text
|
45
|
+
@result = xml.elements["ssl_result"].text
|
46
|
+
@blurred_card_number = xml.elements["ssl_card_number"].text
|
47
|
+
@exp_date = xml.elements["ssl_exp_date"].text
|
48
|
+
@approval_code = xml.elements["ssl_approval_code"].text
|
49
|
+
@cvv2_response = xml.elements["ssl_cvv2_response"].text
|
50
|
+
@transaction_id = xml.elements["ssl_txn_id"].text
|
51
|
+
@transaction_time = xml.elements["ssl_txn_time"].text
|
52
|
+
end
|
24
53
|
end
|
25
54
|
end
|
data/lib/virtual_merchant.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module VirtualMerchant
|
2
2
|
require "rexml/document"
|
3
|
-
require 'net/http'
|
4
3
|
require 'virtual_merchant/amount'
|
4
|
+
require 'virtual_merchant/communication'
|
5
5
|
require 'virtual_merchant/credentials'
|
6
6
|
require 'virtual_merchant/credit_card'
|
7
7
|
require 'virtual_merchant/response'
|
@@ -10,77 +10,34 @@ module VirtualMerchant
|
|
10
10
|
|
11
11
|
def self.charge(card, amount, creds)
|
12
12
|
xml = VirtualMerchant::XMLGenerator.generate(card, amount, creds, "ccsale")
|
13
|
-
|
14
|
-
response = self.generateResponse(vm_response)
|
15
|
-
VirtualMerchant::Logger.new(response)
|
16
|
-
response
|
13
|
+
self.process(xml, creds, amount)
|
17
14
|
end
|
18
15
|
|
19
16
|
def self.refund(card, amount, creds)
|
20
17
|
xml = VirtualMerchant::XMLGenerator.generate(card, amount, creds, 'cccredit')
|
21
|
-
|
22
|
-
response = self.generateResponse(vm_response)
|
23
|
-
VirtualMerchant::Logger.new(response)
|
24
|
-
response
|
18
|
+
self.process(xml, creds, amount)
|
25
19
|
end
|
26
20
|
|
27
21
|
def self.void(transaction_id, creds)
|
28
22
|
xml = VirtualMerchant::XMLGenerator.generateVoid(transaction_id, creds)
|
29
|
-
|
30
|
-
response = self.generateResponse(vm_response)
|
31
|
-
VirtualMerchant::Logger.new(response)
|
32
|
-
response
|
23
|
+
self.process(xml, creds)
|
33
24
|
end
|
34
25
|
|
35
26
|
private
|
36
|
-
def self.
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
uri=URI.parse('https://demo.myvirtualmerchant.com/VirtualMerchantDemo/processxml.do')
|
44
|
-
else
|
45
|
-
uri=URI.parse('https://www.myvirtualmerchant.com/VirtualMerchant/processxml.do')
|
46
|
-
end
|
47
|
-
|
48
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
49
|
-
http.use_ssl = true
|
50
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
51
|
-
body = http.post(uri.request_uri, xml, headers).body
|
52
|
-
return body
|
27
|
+
def self.process(xml, creds, amount=0)
|
28
|
+
communication = VirtualMerchant::Communication.new(
|
29
|
+
{xml: xml, url: self.url(creds.demo), referer: creds.referer})
|
30
|
+
vm_response = communication.send
|
31
|
+
response = VirtualMerchant::Response.new(vm_response)
|
32
|
+
VirtualMerchant::Logger.new(response)
|
33
|
+
response
|
53
34
|
end
|
54
35
|
|
55
|
-
def self.
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
if xml.elements["errorCode"]
|
61
|
-
#Something was wrong with the transaction so an
|
62
|
-
#errorCode and errorMessage were sent back
|
63
|
-
response = VirtualMerchant::Response.new(
|
64
|
-
error: xml.elements["errorCode"].text,
|
65
|
-
result_message: xml.elements["errorMessage"].text)
|
66
|
-
elsif (xml.elements["ssl_result"] && xml.elements["ssl_result"].text != "0")
|
67
|
-
#something closer to an approval, but still declined
|
68
|
-
response = VirtualMerchant::Response.new(
|
69
|
-
error: xml.elements["ssl_result_message"].text,
|
70
|
-
result_message: xml.elements["ssl_result"].text)
|
71
|
-
else
|
72
|
-
#a clean transaction has taken place
|
73
|
-
response = VirtualMerchant::Response.new(
|
74
|
-
result_message: xml.elements["ssl_result_message"].text,
|
75
|
-
result: xml.elements["ssl_result"].text,
|
76
|
-
blurred_card_number: xml.elements["ssl_card_number"].text,
|
77
|
-
exp_date: xml.elements["ssl_exp_date"].text,
|
78
|
-
approval_code: xml.elements["ssl_approval_code"].text,
|
79
|
-
cvv2_response: xml.elements["ssl_cvv2_response"].text,
|
80
|
-
transaction_id: xml.elements["ssl_txn_id"].text,
|
81
|
-
transaction_time: xml.elements["ssl_txn_time"].text)
|
82
|
-
end
|
36
|
+
def self.url(demo)
|
37
|
+
if demo
|
38
|
+
'https://demo.myvirtualmerchant.com/VirtualMerchantDemo/processxml.do'
|
39
|
+
else
|
40
|
+
'https://www.myvirtualmerchant.com/VirtualMerchant/processxml.do'
|
83
41
|
end
|
84
|
-
response
|
85
42
|
end
|
86
43
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: virtual_merchant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -19,6 +19,7 @@ extra_rdoc_files: []
|
|
19
19
|
files:
|
20
20
|
- lib/virtual_merchant.rb
|
21
21
|
- lib/virtual_merchant/amount.rb
|
22
|
+
- lib/virtual_merchant/communication.rb
|
22
23
|
- lib/virtual_merchant/credentials.rb
|
23
24
|
- lib/virtual_merchant/credit_card.rb
|
24
25
|
- lib/virtual_merchant/logger.rb
|
@@ -44,7 +45,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
44
45
|
version: '0'
|
45
46
|
requirements: []
|
46
47
|
rubyforge_project:
|
47
|
-
rubygems_version: 1.8.
|
48
|
+
rubygems_version: 1.8.25
|
48
49
|
signing_key:
|
49
50
|
specification_version: 3
|
50
51
|
summary: Virtual Merchant API
|