killbill-cybersource 4.0.9 → 4.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/NEWS +5 -0
- data/VERSION +1 -1
- data/lib/cybersource/cyber_source_on_demand.rb +3 -1
- data/lib/cybersource/ext/active_merchant/active_merchant.rb +38 -6
- data/pom.xml +1 -1
- data/spec/cybersource/base_plugin_spec.rb +29 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58cb83423a65c33db773647d189febf28e53c799
|
4
|
+
data.tar.gz: 047b2949668e415baa08694d5adda58f28c78abe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 228be79b3eb1f98e22367db93ec779e54fe67c529e9b1cb827f1e94cd818a0933f3fa2c36c4a8d45ce89a14db9700005547863540fb986414d9daea9e7ef343d
|
7
|
+
data.tar.gz: 7febfe2b9798496d89af92ea4b5da908cedf79d516f72b740f06dd4890aa8ac92af21c386cc775c2bbd4be507c473b7b9e80eff997300af3aa98b4f50d2ad416
|
data/Gemfile.lock
CHANGED
data/NEWS
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.0.
|
1
|
+
4.0.10
|
@@ -26,8 +26,10 @@ module Killbill #:nodoc:
|
|
26
26
|
|
27
27
|
headers = {
|
28
28
|
# Don't use symbols or it will confuse Net/HTTP
|
29
|
-
'Authorization' => 'Basic ' + Base64.encode64("#{@config[:username]}:#{@config[:password]}").chomp
|
29
|
+
'Authorization' => 'Basic ' + Base64.encode64("#{@config[:username]}:#{@config[:password]}").chomp,
|
30
|
+
'User-Agent' => ActiveMerchant::Billing::CyberSourceGateway.ua
|
30
31
|
}
|
32
|
+
headers['X-Request-Id'] = ActiveMerchant::Billing::CyberSourceGateway.x_request_id unless ActiveMerchant::Billing::CyberSourceGateway.x_request_id.blank?
|
31
33
|
|
32
34
|
data = URI.encode_www_form(params)
|
33
35
|
|
@@ -5,6 +5,13 @@ module ActiveMerchant
|
|
5
5
|
|
6
6
|
class CyberSourceGateway
|
7
7
|
|
8
|
+
cattr_reader :ua
|
9
|
+
|
10
|
+
def self.x_request_id
|
11
|
+
# See KillbillMDCInsertingServletFilter
|
12
|
+
org::slf4j::MDC::get('req.requestId') rescue nil
|
13
|
+
end
|
14
|
+
|
8
15
|
def initialize(options = {})
|
9
16
|
super
|
10
17
|
|
@@ -104,13 +111,18 @@ module ActiveMerchant
|
|
104
111
|
end
|
105
112
|
end
|
106
113
|
|
107
|
-
# See https://github.com/killbill/killbill-cybersource-plugin/issues/4
|
108
114
|
def commit(request, options)
|
109
115
|
request = build_request(request, options)
|
110
116
|
begin
|
111
|
-
raw_response = ssl_post(test? ? self.test_url : self.live_url, request)
|
117
|
+
raw_response = ssl_post(test? ? self.test_url : self.live_url, request, build_headers(options))
|
112
118
|
rescue ResponseError => e
|
113
|
-
|
119
|
+
if !e.response.nil? && e.response.code.to_i == 500 && !e.response.body.blank?
|
120
|
+
# See https://github.com/killbill/killbill-cybersource-plugin/issues/4
|
121
|
+
raw_response = e.response.body
|
122
|
+
else
|
123
|
+
# Don't swallow other 5xx errors like proxy timeouts - these should most likely be UNKNOWN
|
124
|
+
raise e
|
125
|
+
end
|
114
126
|
end
|
115
127
|
response = parse(raw_response)
|
116
128
|
|
@@ -135,9 +147,29 @@ module ActiveMerchant
|
|
135
147
|
Response.new(success, message, response,
|
136
148
|
:test => test?,
|
137
149
|
:authorization => authorization,
|
138
|
-
:avs_result => {:code => response[
|
139
|
-
:cvv_result => response[
|
140
|
-
|
150
|
+
:avs_result => {:code => response['avsCode']},
|
151
|
+
:cvv_result => response['cvCode'])
|
152
|
+
end
|
153
|
+
|
154
|
+
def user_agent
|
155
|
+
@@ua ||= JSON.dump({
|
156
|
+
:bindings_version => KB_PLUGIN_VERSION,
|
157
|
+
:lang => 'ruby',
|
158
|
+
:lang_version => "#{RUBY_VERSION} p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE})",
|
159
|
+
:platform => RUBY_PLATFORM,
|
160
|
+
:publisher => 'killbill'
|
161
|
+
})
|
162
|
+
end
|
163
|
+
|
164
|
+
def build_headers(options)
|
165
|
+
options[:x_request_id] ||= self.class.x_request_id
|
166
|
+
options[:content_type] ||= 'text/xml'
|
167
|
+
|
168
|
+
headers = {}
|
169
|
+
headers['Content-Type'] = options[:content_type]
|
170
|
+
headers['User-Agent'] = user_agent
|
171
|
+
headers['X-Request-Id'] = options[:x_request_id] unless options[:x_request_id].blank?
|
172
|
+
headers
|
141
173
|
end
|
142
174
|
|
143
175
|
def add_merchant_data(xml, options)
|
data/pom.xml
CHANGED
@@ -25,7 +25,7 @@
|
|
25
25
|
<groupId>org.kill-bill.billing.plugin.ruby</groupId>
|
26
26
|
<artifactId>cybersource-plugin</artifactId>
|
27
27
|
<packaging>pom</packaging>
|
28
|
-
<version>4.0.
|
28
|
+
<version>4.0.10</version>
|
29
29
|
<name>cybersource-plugin</name>
|
30
30
|
<url>http://github.com/killbill/killbill-cybersource-plugin</url>
|
31
31
|
<description>Plugin for accessing Cybersource as a payment gateway</description>
|
@@ -147,6 +147,27 @@ describe Killbill::Cybersource::PaymentPlugin do
|
|
147
147
|
|
148
148
|
context 'Errors handling' do
|
149
149
|
|
150
|
+
it 'handles proxy errors as UNDEFINED transactions' do
|
151
|
+
::ActiveMerchant::Billing::CyberSourceGateway.any_instance.stub(:ssl_post) do |_, _|
|
152
|
+
raise ::ActiveMerchant::ResponseError.new(OpenStruct.new(:body => 'Oops', :code => 502))
|
153
|
+
end
|
154
|
+
purchase_with_token(:UNDEFINED).gateway_error.should == 'Failed with 502 '
|
155
|
+
end
|
156
|
+
|
157
|
+
it 'handles generic 500 errors as UNDEFINED transactions' do
|
158
|
+
::ActiveMerchant::Billing::CyberSourceGateway.any_instance.stub(:ssl_post) do |_, _|
|
159
|
+
raise ::ActiveMerchant::ResponseError.new(OpenStruct.new(:body => nil, :code => 500))
|
160
|
+
end
|
161
|
+
purchase_with_token(:UNDEFINED).gateway_error.should == 'Failed with 500 '
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'handles CyberSource errors as CANCELED transactions' do
|
165
|
+
::ActiveMerchant::Billing::CyberSourceGateway.any_instance.stub(:ssl_post) do |_, _|
|
166
|
+
raise ::ActiveMerchant::ResponseError.new(OpenStruct.new(:body => one_or_more_fields_contains_invalid_data, :code => 500))
|
167
|
+
end
|
168
|
+
purchase_with_token(:CANCELED).gateway_error.should == 'One or more fields contains invalid data'
|
169
|
+
end
|
170
|
+
|
150
171
|
it 'handles expired passwords as CANCELED transactions' do
|
151
172
|
::ActiveMerchant::Billing::CyberSourceGateway.any_instance.stub(:ssl_post).and_return(password_expired_response)
|
152
173
|
purchase_with_token(:CANCELED).gateway_error.should == 'wsse:FailedCheck: Security Data : Merchant password has expired.'
|
@@ -425,4 +446,12 @@ describe Killbill::Cybersource::PaymentPlugin do
|
|
425
446
|
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-28121162"><wsu:Created>2008-01-15T21:50:41.580Z</wsu:Created></wsu:Timestamp></wsse:Security></soap:Header><soap:Body><c:replyMessage xmlns:c="urn:schemas-cybersource-com:transaction-data-1.26"><c:merchantReferenceCode>a1efca956703a2a5037178a8a28f7357</c:merchantReferenceCode><c:requestID>2004338415330008402434</c:requestID><c:decision>REJECT</c:decision><c:reasonCode>102</c:reasonCode><c:requestToken>Afvvj7KfIgU12gooCFE2/DanQIApt+G1OgTSA+R9PTnyhFTb0KRjgFY+ynyIFNdoKKAghwgx</c:requestToken><c:ccAuthReversalReply><c:reasonCode>102</c:reasonCode></c:ccAuthReversalReply><c:originalTransaction><c:amount>0.00</c:amount><c:reasonCode>100</c:reasonCode></c:originalTransaction></c:replyMessage></soap:Body></soap:Envelope>
|
426
447
|
XML
|
427
448
|
end
|
449
|
+
|
450
|
+
def one_or_more_fields_contains_invalid_data
|
451
|
+
<<-XML
|
452
|
+
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
453
|
+
<soap:Header>
|
454
|
+
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-28121162"><wsu:Created>2008-01-15T21:50:41.580Z</wsu:Created></wsu:Timestamp></wsse:Security></soap:Header><soap:Body><c:replyMessage xmlns:c="urn:schemas-cybersource-com:transaction-data-1.26"><c:requestID>12345</c:requestID><c:decision>REJECT</c:decision><c:reasonCode>102</c:reasonCode><c:invalidField>c:billTo/c:state</c:invalidField><c:requestToken>Afvvj7KfIgU12gooCFE2/DanQIApt+G1OgTSA+R9PTnyhFTb0KRjgFY+ynyIFNdoKKAghwgx</c:requestToken></c:replyMessage></soap:Body></soap:Envelope>
|
455
|
+
XML
|
456
|
+
end
|
428
457
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: killbill-cybersource
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kill Bill core team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: killbill
|