pensio_api 0.2.3 → 0.3.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8df2a4f55de1b2a15095fcb0eae66ec28a0556f2
4
+ data.tar.gz: 1e65cb234c4d22f00599fcc15821519322ebe2c6
5
+ SHA512:
6
+ metadata.gz: 808300554a974100f949ec893f789cc36ca686c9e8b5d6a8afd36ea890e884847e5ff6837b86b4cdba5f8c3c3c91da8be81894f1f4053e259ece8105814f01db
7
+ data.tar.gz: 96af16fe19782e17c5f6be0cbc3ca625ac1faee1fb57036f956f2b7a3a5e32d95decde08fb09954fcc2ad1c8e6fe2209efea79073e874bb1a04cb5447b50e47e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pensio_api (0.2.3)
4
+ pensio_api (0.3.0)
5
5
  activesupport (>= 3.2)
6
6
  httparty (>= 0.12.0)
7
7
  multi_xml (>= 0.5.2)
@@ -3,16 +3,20 @@ module PensioAPI
3
3
  FakeRequest = Struct.new(:headers, :body)
4
4
 
5
5
  def self.parse_success(xml)
6
- parse(xml, true)
6
+ parse(xml, :success)
7
7
  end
8
8
 
9
9
  def self.parse_failure(xml)
10
- parse(xml, false)
10
+ parse(xml, :failure)
11
+ end
12
+
13
+ def self.parse_chargeback(xml)
14
+ parse(xml, :chargeback)
11
15
  end
12
16
 
13
17
  private
14
18
 
15
- def self.parse(xml, success)
19
+ def self.parse(xml, handler)
16
20
  params = MultiXml.parse(xml)
17
21
 
18
22
  request = FakeRequest.new(
@@ -20,11 +24,14 @@ module PensioAPI
20
24
  params['APIResponse']['Body']
21
25
  )
22
26
 
23
- if success
27
+ case handler
28
+ when :success
24
29
  PensioAPI::Responses::SuccessCallback.new(request)
25
- else
30
+ when :failure
26
31
  PensioAPI::Responses::SubscriptionFailureCallback.new(request)
32
+ when :chargeback
33
+ PensioAPI::Responses::ChargebackCallback.new(request)
27
34
  end
28
35
  end
29
36
  end
30
- end
37
+ end
@@ -0,0 +1,25 @@
1
+ module PensioAPI
2
+ class ChargebackEvent
3
+ attr_reader :type
4
+ attr_reader :reason_code
5
+ attr_reader :reason
6
+ attr_reader :amount
7
+ attr_reader :currency
8
+ attr_reader :acquirer_transaction_id
9
+
10
+ def initialize(chargeback_body)
11
+ @raw = chargeback_body
12
+
13
+ @type = @raw['Type']
14
+ @reason_code = @raw['ReasonCode'].to_i
15
+ @reason = @raw['Reason']
16
+ @amount = BigDecimal.new(@raw['Amount'])
17
+ @currency = @raw['Currency']
18
+ @acquirer_transaction_id = @raw['AcquirerTransactionId']
19
+ end
20
+
21
+ def created_at
22
+ @created_at ||= Time.parse(@raw['Date'])
23
+ end
24
+ end
25
+ end
@@ -9,24 +9,28 @@ module PensioAPI
9
9
  @raw = request.body
10
10
  @headers = request.headers
11
11
  unless success?
12
- raise PensioAPI::Errors::BadRequest.new(request) unless header_ok
13
- raise PensioAPI::Errors::GatewayError.new(request) unless body_ok
12
+ raise PensioAPI::Errors::BadRequest.new(request) unless header_ok?
13
+ raise PensioAPI::Errors::GatewayError.new(request) unless body_ok? || chargeback?
14
14
  end
15
15
  end
16
16
 
17
17
  def success?
18
- header_ok && body_ok
18
+ header_ok? && (body_ok? || chargeback?)
19
19
  end
20
20
 
21
21
  private
22
22
 
23
- def header_ok
23
+ def header_ok?
24
24
  @headers['ErrorCode'].to_i == 0
25
25
  end
26
26
 
27
- def body_ok
27
+ def body_ok?
28
28
  !@raw.has_key?('Result') || ['Success', 'OK', nil].include?(@raw['Result'])
29
29
  end
30
+
31
+ def chargeback?
32
+ @raw['Result'] == 'ChargebackEvent'
33
+ end
30
34
  end
31
35
  end
32
36
  end
@@ -0,0 +1,6 @@
1
+ module PensioAPI
2
+ module Responses
3
+ class ChargebackCallback < Transaction
4
+ end
5
+ end
6
+ end
@@ -1,15 +1,19 @@
1
1
  module PensioAPI
2
2
  module Responses
3
- class Reservation < Base
4
- attr_reader :transaction
3
+ class Reservation < Transaction
5
4
 
6
- def initialize(request)
7
- super(request)
5
+ def each
6
+ [reservation, charge].each { |t| yield t }
7
+ end
8
+
9
+ def reservation
10
+ @transactions.first
11
+ end
8
12
 
9
- @transaction = PensioAPI::Transaction.new(
10
- transactions['Transaction']
11
- )
13
+ def charge
14
+ @transactions.last
12
15
  end
16
+
13
17
  end
14
18
  end
15
19
  end
@@ -1,11 +1,14 @@
1
1
  module PensioAPI
2
2
  module Responses
3
- class ReservationCapture < Responses::Reservation
4
- attr_reader :capture_amount, :capture_currency
3
+ class ReservationCapture < Base
4
+ attr_reader :transaction, :capture_amount, :capture_currency
5
5
 
6
6
  def initialize(request)
7
7
  super(request)
8
8
 
9
+ @transaction = PensioAPI::Transaction.new(
10
+ transactions['Transaction']
11
+ )
9
12
  @capture_amount = BigDecimal.new(@raw['CaptureAmount'])
10
13
  @capture_currency = @raw['CaptureCurrency'].to_i
11
14
  end
@@ -1,6 +1,15 @@
1
1
  module PensioAPI
2
2
  module Responses
3
- class ReservationRelease < Responses::Reservation
3
+ class ReservationRelease < Base
4
+ attr_reader :transaction
5
+
6
+ def initialize(request)
7
+ super(request)
8
+
9
+ @transaction = PensioAPI::Transaction.new(
10
+ transactions['Transaction']
11
+ )
12
+ end
4
13
  end
5
14
  end
6
15
  end
@@ -15,6 +15,7 @@ module PensioAPI
15
15
  attr_reader :order_id
16
16
  attr_reader :merchant_currency
17
17
  attr_reader :card_holder_currency
18
+ attr_reader :chargeback_events
18
19
 
19
20
  # constants for transaction statuses
20
21
  STATUS_RECURRING_CONFIRMED = 'recurring_confirmed'
@@ -43,6 +44,8 @@ module PensioAPI
43
44
 
44
45
  @merchant_currency = @raw['MerchantCurrency'].to_i
45
46
  @card_holder_currency = @raw['CardHolderCurrency'].to_i
47
+
48
+ map_chargeback_events
46
49
  end
47
50
 
48
51
  def self.find(options={})
@@ -80,5 +83,23 @@ module PensioAPI
80
83
  BillingAddress.new(@raw['CustomerInfo']['BillingAddress'])
81
84
  end
82
85
  end
86
+
87
+ private
88
+
89
+ def map_chargeback_events
90
+ @chargeback_events = if raw_chargeback_events.is_a?(Array)
91
+ raw_chargeback_events.map { |c| PensioAPI::ChargebackEvent.new(c) }
92
+ else
93
+ [PensioAPI::ChargebackEvent.new(raw_chargeback_events)]
94
+ end
95
+ end
96
+
97
+ def raw_chargeback_events
98
+ @raw_chargeback_events ||= if @raw['ChargebackEvents']
99
+ @raw['ChargebackEvents']['ChargebackEvent']
100
+ else
101
+ []
102
+ end
103
+ end
83
104
  end
84
105
  end
data/lib/pensio_api.rb CHANGED
@@ -8,6 +8,7 @@ require 'pensio_api/mixins/timestamps'
8
8
 
9
9
  require 'pensio_api/billing_address'
10
10
  require 'pensio_api/callback'
11
+ require 'pensio_api/chargeback_event'
11
12
  require 'pensio_api/credentials'
12
13
  require 'pensio_api/ecommerce'
13
14
  require 'pensio_api/funding_list'
@@ -32,5 +33,6 @@ require 'pensio_api/responses/reservation'
32
33
  require 'pensio_api/responses/reservation_capture'
33
34
  require 'pensio_api/responses/reservation_release'
34
35
  require 'pensio_api/responses/subscription_charge'
36
+ require 'pensio_api/responses/chargeback_callback'
35
37
  require 'pensio_api/responses/success_callback'
36
38
  require 'pensio_api/responses/subscription_failure_callback'
data/pensio_api.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'pensio_api'
3
- s.version = '0.2.3'
3
+ s.version = '0.3.0'
4
4
  s.license = 'BSD-3-Clause'
5
5
  s.summary = "Provides integration for the Pensio Merchant API"
6
6
  s.authors = ['Michael Sell', 'Rory Sinclair']
@@ -17,5 +17,13 @@ describe PensioAPI::Callback do
17
17
  expect(response.success?).to be_true
18
18
  end
19
19
  end
20
+
21
+ describe ".parse_chargeback" do
22
+ let(:response) { PensioAPI::Callback.parse_chargeback(file_fixture("chargeback_callback.xml")) }
23
+ it "should return a ChargebackCallback response" do
24
+ expect(response).to be_an_instance_of(PensioAPI::Responses::ChargebackCallback)
25
+ expect(response.success?).to be_true
26
+ end
27
+ end
20
28
  end
21
29
 
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe PensioAPI::ChargebackEvent do
4
+ let(:response) { PensioAPI::Callback.parse_chargeback(file_fixture("chargeback_callback.xml")) }
5
+ let(:transaction) { response.transactions.last }
6
+ let(:chargeback_event) { transaction.chargeback_events.last }
7
+
8
+ describe 'reader attributes' do
9
+ describe 'type' do
10
+ specify { expect(chargeback_event.type).to be_an_instance_of(String) }
11
+ end
12
+
13
+ describe 'reason_code' do
14
+ specify { expect(chargeback_event.reason_code).to be_an_instance_of(Fixnum) }
15
+ end
16
+
17
+ describe 'reason' do
18
+ specify { expect(chargeback_event.reason).to be_an_instance_of(String) }
19
+ end
20
+
21
+ describe 'amount' do
22
+ specify { expect(chargeback_event.amount).to be_an_instance_of(BigDecimal) }
23
+ end
24
+
25
+ describe 'currency' do
26
+ specify { expect(chargeback_event.currency).to be_an_instance_of(String) }
27
+ end
28
+
29
+ describe 'acquirer_transaction_id' do
30
+ specify { expect(chargeback_event.acquirer_transaction_id).to be_an_instance_of(String) }
31
+ end
32
+ end
33
+
34
+ describe 'created_at' do
35
+ specify { expect(chargeback_event.created_at).to be_an_instance_of(Time) }
36
+ end
37
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe PensioAPI::Responses::ChargebackCallback do
4
+ let(:response) { PensioAPI::Callback.parse_chargeback(file_fixture("chargeback_callback.xml")) }
5
+
6
+ it "succeeds" do
7
+ expect(response.success?).to be_true
8
+ end
9
+ end
@@ -10,6 +10,7 @@ describe PensioAPI::Responses::Reservation do
10
10
  specify { expect(response).to be_an_instance_of(PensioAPI::Responses::Reservation) }
11
11
 
12
12
  describe 'readable attributes' do
13
- specify { expect(response.transaction).to be_an_instance_of(PensioAPI::Transaction) }
13
+ specify { expect(response.charge).to be_an_instance_of(PensioAPI::Transaction) }
14
+ specify { expect(response.reservation).to be_an_instance_of(PensioAPI::Transaction) }
14
15
  end
15
16
  end
@@ -37,6 +37,10 @@ describe PensioAPI::Transaction do
37
37
  describe '.card_holder_currency' do
38
38
  specify { expect(transaction.card_holder_currency).to be_an_instance_of(Fixnum) }
39
39
  end
40
+
41
+ describe '.chargeback_events' do
42
+ specify { expect(transaction.chargeback_events).to be_an_instance_of(Array) }
43
+ end
40
44
  end
41
45
 
42
46
  describe '.find' do
@@ -0,0 +1,92 @@
1
+ <?xml version="1.0"?>
2
+ <APIResponse version="20130430">
3
+ <Header>
4
+ <Date>2014-05-22T11:05:16+02:00</Date>
5
+ <Path>settings/createReconciliationData</Path>
6
+ <ErrorCode>0</ErrorCode>
7
+ <ErrorMessage/>
8
+ </Header>
9
+ <Body>
10
+ <Result>ChargebackEvent</Result>
11
+ <Transactions>
12
+ <Transaction>
13
+ <TransactionId>1093191</TransactionId>
14
+ <AuthType>subscription_payment</AuthType>
15
+ <CardStatus>InvalidLuhn</CardStatus>
16
+ <CreditCardExpiry>
17
+ <Year>2025</Year>
18
+ <Month>11</Month>
19
+ </CreditCardExpiry>
20
+ <CreditCardToken>eba482b9ca1dac29a3964dca21d921c2f91b0d1b</CreditCardToken>
21
+ <CreditCardMaskedPan>415000******1967</CreditCardMaskedPan>
22
+ <ThreeDSecureResult>Not_Applicable</ThreeDSecureResult>
23
+ <CVVCheckResult>Not_Applicable</CVVCheckResult>
24
+ <BlacklistToken>e2e95ffb9979ff7fe0327ba8bd9b4390c2a08e55</BlacklistToken>
25
+ <ShopOrderId>test_order</ShopOrderId>
26
+ <Shop>Test Shop</Shop>
27
+ <Terminal>Test Terminal</Terminal>
28
+ <TransactionStatus>captured</TransactionStatus>
29
+ <MerchantCurrency>978</MerchantCurrency>
30
+ <CardHolderCurrency>978</CardHolderCurrency>
31
+ <ReservedAmount>100.20</ReservedAmount>
32
+ <CapturedAmount>100.20</CapturedAmount>
33
+ <RefundedAmount>0.00</RefundedAmount>
34
+ <RecurringDefaultAmount>0.00</RecurringDefaultAmount>
35
+ <CreatedDate>2014-05-22 11:04:39</CreatedDate>
36
+ <UpdatedDate>2014-05-22 11:04:40</UpdatedDate>
37
+ <PaymentNature>CreditCard</PaymentNature>
38
+ <PaymentSchemeName>Visa</PaymentSchemeName>
39
+ <PaymentNatureService name="SoapTestAcquirer">
40
+ <SupportsRefunds>true</SupportsRefunds>
41
+ <SupportsRelease>true</SupportsRelease>
42
+ <SupportsMultipleCaptures>true</SupportsMultipleCaptures>
43
+ <SupportsMultipleRefunds>true</SupportsMultipleRefunds>
44
+ </PaymentNatureService>
45
+ <AddressVerification>1</AddressVerification>
46
+ <AddressVerificationDescription>Invalid address verification response code</AddressVerificationDescription>
47
+ <ChargebackEvents>
48
+ <ChargebackEvent>
49
+ <Date>2014-05-22T00:00:00+02:00</Date>
50
+ <Type>Chargeback test case</Type>
51
+ <ReasonCode>30</ReasonCode>
52
+ <Reason>chargeback</Reason>
53
+ <Amount>100.20</Amount>
54
+ <Currency>EUR</Currency>
55
+ <AcquirerTransactionId>91816f59-0337-4ab7-8823-b56ee1fae848</AcquirerTransactionId>
56
+ <AdditionalInfo>&lt;additional_info&gt;&lt;info_element&gt;&lt;key&gt;Type&lt;/key&gt;&lt;value&gt;Test&lt;/value&gt;&lt;/info_element&gt;&lt;/additional_info&gt;</AdditionalInfo>
57
+ </ChargebackEvent>
58
+ </ChargebackEvents>
59
+ <PaymentInfos/>
60
+ <CustomerInfo>
61
+ <UserAgent>Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0</UserAgent>
62
+ <IpAddress>46.208.161.11</IpAddress>
63
+ <Email/>
64
+ <Username/>
65
+ <CustomerPhone/>
66
+ <OrganisationNumber/>
67
+ <CountryOfOrigin>
68
+ <Country>LV</Country>
69
+ <Source>CardNumber</Source>
70
+ </CountryOfOrigin>
71
+ <BillingAddress>
72
+ <Firstname/>
73
+ <Lastname/>
74
+ <Address><![CDATA[11 Test Street]]></Address>
75
+ <City><![CDATA[Eberswalde]]></City>
76
+ <Region><![CDATA[Test]]></Region>
77
+ <Country><![CDATA[DE]]></Country>
78
+ <PostalCode><![CDATA[112233]]></PostalCode>
79
+ </BillingAddress>
80
+ </CustomerInfo>
81
+ <ReconciliationIdentifiers>
82
+ <ReconciliationIdentifier>
83
+ <Id>6c09caac-c6cc-a927-a4f3-f64d7a7102ab</Id>
84
+ <Amount currency="978">100.20</Amount>
85
+ <Type>captured</Type>
86
+ <Date>2014-05-22T11:04:40+02:00</Date>
87
+ </ReconciliationIdentifier>
88
+ </ReconciliationIdentifiers>
89
+ </Transaction>
90
+ </Transactions>
91
+ </Body>
92
+ </APIResponse>
@@ -1,46 +1,137 @@
1
1
  <?xml version="1.0"?>
2
- <APIResponse version="20100929">
3
- <Header>
4
- <Date>2010-09-29T12:34:56+02:00</Date>
5
- <Path>API/reservationOfFixedAmount</Path>
6
- <ErrorCode>0</ErrorCode>
7
- <ErrorMessage></ErrorMessage>
8
- </Header>
9
- <Body>
10
- <Result>Success</Result>
11
- <Transactions>
12
- <Transaction>
13
- <TransactionId>3</TransactionId>
14
- <CardStatus>Valid</CardStatus>
15
- <CreditCardToken>85c1d13de7b5dceb6b739829cc27e089631b0fda</CreditCardToken>
16
- <CreditCardMaskedPan>411111******1111</CreditCardMaskedPan>
17
- <ThreeDSecureResult>Not_Applicable</ThreeDSecureResult>
18
- <BlacklistToken>4f244dec4907eba0f6432e53b17a60ebcf51365e</BlacklistToken>
19
- <ShopOrderId>myorder123</ShopOrderId>
20
- <Shop>Pensio Functional Test Shop</Shop>
21
- <Terminal>Pensio Test Terminal</Terminal>
22
- <TransactionStatus>preauth</TransactionStatus>
23
- <MerchantCurrency>978</MerchantCurrency>
24
- <CardHolderCurrency>978</CardHolderCurrency>
25
- <ReservedAmount>2499.95</ReservedAmount>
26
- <CapturedAmount>0</CapturedAmount>
27
- <RefundedAmount>0</RefundedAmount>
28
- <RecurringDefaultAmount>0</RecurringDefaultAmount>
29
- <CreatedDate>2010-09-28 12:34:56</CreatedDate>
30
- <UpdatedDate>2010-09-28 12:34:56</UpdatedDate>
31
- <PaymentNature>CreditCard</PaymentNature>
32
- <PaymentNatureService name="TestAcquirer">
33
- <SupportsRefunds>true</SupportsRefunds>
34
- <SupportsRelease>true</SupportsRelease>
35
- <SupportsMultipleCaptures>true</SupportsMultipleCaptures>
36
- <SupportsMultipleRefunds>false</SupportsMultipleRefunds>
37
- </PaymentNatureService>
38
- <PaymentInfos>
39
- <PaymentInfo name="Payment_Type">payment</PaymentInfo>
40
- </PaymentInfos>
41
- <CustomerInfo/>
42
- <ReconciliationIdentifiers/>
43
- </Transaction>
44
- </Transactions>
45
- </Body>
46
- </APIResponse>
2
+ <APIResponse version="20130430">
3
+ <Header>
4
+ <Date>2014-11-24T03:09:12+01:00</Date>
5
+ <Path>API/reservationOfFixedAmount</Path>
6
+ <ErrorCode>0</ErrorCode>
7
+ <ErrorMessage/>
8
+ </Header>
9
+ <Body>
10
+ <Result>Success</Result>
11
+ <Transactions>
12
+ <Transaction>
13
+ <TransactionId>1142651</TransactionId>
14
+ <AuthType>subscriptionAndCharge</AuthType>
15
+ <CardStatus>Valid</CardStatus>
16
+ <CreditCardExpiry>
17
+ <Year>2017</Year>
18
+ <Month>11</Month>
19
+ </CreditCardExpiry>
20
+ <CreditCardToken>1cd3d07cc81ce08d3f272bdb9f9c22960354178d</CreditCardToken>
21
+ <CreditCardMaskedPan>477571******6027</CreditCardMaskedPan>
22
+ <ThreeDSecureResult>Disabled</ThreeDSecureResult>
23
+ <CVVCheckResult>Not_Attempted</CVVCheckResult>
24
+ <BlacklistToken>a475e2908a6ab105708003dc14453ae60d32d8c5</BlacklistToken>
25
+ <ShopOrderId>82ab48de_usd-annual_956123_3a4742f998a6a81e0606217681bc41afcfcf9b48232550e517bbb037c5c3555c</ShopOrderId>
26
+ <Shop>ASmallWorld</Shop>
27
+ <Terminal>ASmallWorld CC Import USD</Terminal>
28
+ <TransactionStatus>recurring_confirmed</TransactionStatus>
29
+ <MerchantCurrency>840</MerchantCurrency>
30
+ <CardHolderCurrency>840</CardHolderCurrency>
31
+ <ReservedAmount>133.10</ReservedAmount>
32
+ <CapturedAmount>0.00</CapturedAmount>
33
+ <RefundedAmount>0.00</RefundedAmount>
34
+ <RecurringDefaultAmount>133.10</RecurringDefaultAmount>
35
+ <CreatedDate>2014-11-24 03:09:09</CreatedDate>
36
+ <UpdatedDate>2014-11-24 03:09:11</UpdatedDate>
37
+ <PaymentNature>CreditCard</PaymentNature>
38
+ <PaymentSchemeName>Visa</PaymentSchemeName>
39
+ <PaymentNatureService name="ValitorAcquirer">
40
+ <SupportsRefunds>true</SupportsRefunds>
41
+ <SupportsRelease>true</SupportsRelease>
42
+ <SupportsMultipleCaptures>true</SupportsMultipleCaptures>
43
+ <SupportsMultipleRefunds>true</SupportsMultipleRefunds>
44
+ </PaymentNatureService>
45
+ <ChargebackEvents/>
46
+ <PaymentInfos/>
47
+ <CustomerInfo>
48
+ <UserAgent/>
49
+ <IpAddress/>
50
+ <Email/>
51
+ <Username/>
52
+ <CustomerPhone/>
53
+ <OrganisationNumber/>
54
+ <CountryOfOrigin>
55
+ <Country>IT</Country>
56
+ <Source>CardNumber</Source>
57
+ </CountryOfOrigin>
58
+ <BillingAddress>
59
+ <Firstname/>
60
+ <Lastname/>
61
+ <Address/>
62
+ <City/>
63
+ <Region/>
64
+ <Country/>
65
+ <PostalCode/>
66
+ </BillingAddress>
67
+ </CustomerInfo>
68
+ <ReconciliationIdentifiers/>
69
+ </Transaction>
70
+ <Transaction>
71
+ <TransactionId>1142661</TransactionId>
72
+ <AuthType>subscription_payment</AuthType>
73
+ <CardStatus>Valid</CardStatus>
74
+ <CreditCardExpiry>
75
+ <Year>2017</Year>
76
+ <Month>11</Month>
77
+ </CreditCardExpiry>
78
+ <CreditCardToken>1cd3d07cc81ce08d3f272bdb9f9c22960354178d</CreditCardToken>
79
+ <CreditCardMaskedPan>477571******6027</CreditCardMaskedPan>
80
+ <ThreeDSecureResult>Not_Applicable</ThreeDSecureResult>
81
+ <CVVCheckResult>Not_Applicable</CVVCheckResult>
82
+ <BlacklistToken>a475e2908a6ab105708003dc14453ae60d32d8c5</BlacklistToken>
83
+ <ShopOrderId>82ab48de_usd-annual_956123_3a4742f998a6a81e0606217681bc41afcfcf9b48232550e517bbb037c5c3555c</ShopOrderId>
84
+ <Shop>ASmallWorld</Shop>
85
+ <Terminal>ASmallWorld CC Import USD</Terminal>
86
+ <TransactionStatus>captured</TransactionStatus>
87
+ <MerchantCurrency>840</MerchantCurrency>
88
+ <CardHolderCurrency>840</CardHolderCurrency>
89
+ <ReservedAmount>133.10</ReservedAmount>
90
+ <CapturedAmount>133.10</CapturedAmount>
91
+ <RefundedAmount>0.00</RefundedAmount>
92
+ <RecurringDefaultAmount>0.00</RecurringDefaultAmount>
93
+ <CreatedDate>2014-11-24 03:09:11</CreatedDate>
94
+ <UpdatedDate>2014-11-24 03:09:12</UpdatedDate>
95
+ <PaymentNature>CreditCard</PaymentNature>
96
+ <PaymentSchemeName>Visa</PaymentSchemeName>
97
+ <PaymentNatureService name="ValitorAcquirer">
98
+ <SupportsRefunds>true</SupportsRefunds>
99
+ <SupportsRelease>true</SupportsRelease>
100
+ <SupportsMultipleCaptures>true</SupportsMultipleCaptures>
101
+ <SupportsMultipleRefunds>true</SupportsMultipleRefunds>
102
+ </PaymentNatureService>
103
+ <ChargebackEvents/>
104
+ <PaymentInfos/>
105
+ <CustomerInfo>
106
+ <UserAgent/>
107
+ <IpAddress/>
108
+ <Email/>
109
+ <Username/>
110
+ <CustomerPhone/>
111
+ <OrganisationNumber/>
112
+ <CountryOfOrigin>
113
+ <Country>IT</Country>
114
+ <Source>CardNumber</Source>
115
+ </CountryOfOrigin>
116
+ <BillingAddress>
117
+ <Firstname/>
118
+ <Lastname/>
119
+ <Address/>
120
+ <City/>
121
+ <Region/>
122
+ <Country/>
123
+ <PostalCode/>
124
+ </BillingAddress>
125
+ </CustomerInfo>
126
+ <ReconciliationIdentifiers>
127
+ <ReconciliationIdentifier>
128
+ <Id>1146c933-7a74-440e-ae07-e281004c852f</Id>
129
+ <Amount currency="840">133.10</Amount>
130
+ <Type>captured</Type>
131
+ <Date>2014-11-24T03:09:12+01:00</Date>
132
+ </ReconciliationIdentifier>
133
+ </ReconciliationIdentifiers>
134
+ </Transaction>
135
+ </Transactions>
136
+ </Body>
137
+ </APIResponse>
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pensio_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
5
- prerelease:
4
+ version: 0.3.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Michael Sell
@@ -10,28 +9,25 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2014-04-29 00:00:00.000000000 Z
12
+ date: 2014-11-25 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: rspec
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
- - - ! '>='
18
+ - - '>='
21
19
  - !ruby/object:Gem::Version
22
20
  version: '2.14'
23
21
  type: :development
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
- - - ! '>='
25
+ - - '>='
29
26
  - !ruby/object:Gem::Version
30
27
  version: '2.14'
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: webmock
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
32
  - - ~>
37
33
  - !ruby/object:Gem::Version
@@ -39,7 +35,6 @@ dependencies:
39
35
  type: :development
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
39
  - - ~>
45
40
  - !ruby/object:Gem::Version
@@ -47,7 +42,6 @@ dependencies:
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: guard
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
46
  - - ~>
53
47
  - !ruby/object:Gem::Version
@@ -55,7 +49,6 @@ dependencies:
55
49
  type: :development
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
53
  - - ~>
61
54
  - !ruby/object:Gem::Version
@@ -63,7 +56,6 @@ dependencies:
63
56
  - !ruby/object:Gem::Dependency
64
57
  name: guard-rspec
65
58
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
59
  requirements:
68
60
  - - ~>
69
61
  - !ruby/object:Gem::Version
@@ -71,7 +63,6 @@ dependencies:
71
63
  type: :development
72
64
  prerelease: false
73
65
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
66
  requirements:
76
67
  - - ~>
77
68
  - !ruby/object:Gem::Version
@@ -79,49 +70,43 @@ dependencies:
79
70
  - !ruby/object:Gem::Dependency
80
71
  name: httparty
81
72
  requirement: !ruby/object:Gem::Requirement
82
- none: false
83
73
  requirements:
84
- - - ! '>='
74
+ - - '>='
85
75
  - !ruby/object:Gem::Version
86
76
  version: 0.12.0
87
77
  type: :runtime
88
78
  prerelease: false
89
79
  version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
80
  requirements:
92
- - - ! '>='
81
+ - - '>='
93
82
  - !ruby/object:Gem::Version
94
83
  version: 0.12.0
95
84
  - !ruby/object:Gem::Dependency
96
85
  name: activesupport
97
86
  requirement: !ruby/object:Gem::Requirement
98
- none: false
99
87
  requirements:
100
- - - ! '>='
88
+ - - '>='
101
89
  - !ruby/object:Gem::Version
102
90
  version: '3.2'
103
91
  type: :runtime
104
92
  prerelease: false
105
93
  version_requirements: !ruby/object:Gem::Requirement
106
- none: false
107
94
  requirements:
108
- - - ! '>='
95
+ - - '>='
109
96
  - !ruby/object:Gem::Version
110
97
  version: '3.2'
111
98
  - !ruby/object:Gem::Dependency
112
99
  name: multi_xml
113
100
  requirement: !ruby/object:Gem::Requirement
114
- none: false
115
101
  requirements:
116
- - - ! '>='
102
+ - - '>='
117
103
  - !ruby/object:Gem::Version
118
104
  version: 0.5.2
119
105
  type: :runtime
120
106
  prerelease: false
121
107
  version_requirements: !ruby/object:Gem::Requirement
122
- none: false
123
108
  requirements:
124
- - - ! '>='
109
+ - - '>='
125
110
  - !ruby/object:Gem::Version
126
111
  version: 0.5.2
127
112
  description:
@@ -139,6 +124,7 @@ files:
139
124
  - lib/pensio_api.rb
140
125
  - lib/pensio_api/billing_address.rb
141
126
  - lib/pensio_api/callback.rb
127
+ - lib/pensio_api/chargeback_event.rb
142
128
  - lib/pensio_api/credentials.rb
143
129
  - lib/pensio_api/ecommerce.rb
144
130
  - lib/pensio_api/errors/bad_request.rb
@@ -154,6 +140,7 @@ files:
154
140
  - lib/pensio_api/request.rb
155
141
  - lib/pensio_api/reservation.rb
156
142
  - lib/pensio_api/responses/base.rb
143
+ - lib/pensio_api/responses/chargeback_callback.rb
157
144
  - lib/pensio_api/responses/funding_list.rb
158
145
  - lib/pensio_api/responses/gateway_url.rb
159
146
  - lib/pensio_api/responses/refund.rb
@@ -171,6 +158,7 @@ files:
171
158
  - pensio_api.gemspec
172
159
  - spec/lib/pensio_api/billing_address_spec.rb
173
160
  - spec/lib/pensio_api/callback_spec.rb
161
+ - spec/lib/pensio_api/chargeback_event_spec.rb
174
162
  - spec/lib/pensio_api/ecommerce_spec.rb
175
163
  - spec/lib/pensio_api/errors/bad_request_spec.rb
176
164
  - spec/lib/pensio_api/errors/gateway_error_spec.rb
@@ -179,6 +167,7 @@ files:
179
167
  - spec/lib/pensio_api/request_spec.rb
180
168
  - spec/lib/pensio_api/reservation_spec.rb
181
169
  - spec/lib/pensio_api/responses/base_spec.rb
170
+ - spec/lib/pensio_api/responses/chargeback_callback_spec.rb
182
171
  - spec/lib/pensio_api/responses/funding_list_spec.rb
183
172
  - spec/lib/pensio_api/responses/gateway_url_spec.rb
184
173
  - spec/lib/pensio_api/responses/refund_spec.rb
@@ -197,6 +186,7 @@ files:
197
186
  - spec/support/fixtures/bad_request_error.xml
198
187
  - spec/support/fixtures/capture_reservation.xml
199
188
  - spec/support/fixtures/charge_subscription.xml
189
+ - spec/support/fixtures/chargeback_callback.xml
200
190
  - spec/support/fixtures/create_multi_payment_request.xml
201
191
  - spec/support/fixtures/create_payment_request.xml
202
192
  - spec/support/fixtures/failure_callback.xml
@@ -220,31 +210,31 @@ files:
220
210
  homepage:
221
211
  licenses:
222
212
  - BSD-3-Clause
213
+ metadata: {}
223
214
  post_install_message:
224
215
  rdoc_options: []
225
216
  require_paths:
226
217
  - lib
227
218
  required_ruby_version: !ruby/object:Gem::Requirement
228
- none: false
229
219
  requirements:
230
- - - ! '>='
220
+ - - '>='
231
221
  - !ruby/object:Gem::Version
232
222
  version: '0'
233
223
  required_rubygems_version: !ruby/object:Gem::Requirement
234
- none: false
235
224
  requirements:
236
- - - ! '>='
225
+ - - '>='
237
226
  - !ruby/object:Gem::Version
238
227
  version: '0'
239
228
  requirements: []
240
229
  rubyforge_project:
241
- rubygems_version: 1.8.23.2
230
+ rubygems_version: 2.0.14
242
231
  signing_key:
243
- specification_version: 3
232
+ specification_version: 4
244
233
  summary: Provides integration for the Pensio Merchant API
245
234
  test_files:
246
235
  - spec/lib/pensio_api/billing_address_spec.rb
247
236
  - spec/lib/pensio_api/callback_spec.rb
237
+ - spec/lib/pensio_api/chargeback_event_spec.rb
248
238
  - spec/lib/pensio_api/ecommerce_spec.rb
249
239
  - spec/lib/pensio_api/errors/bad_request_spec.rb
250
240
  - spec/lib/pensio_api/errors/gateway_error_spec.rb
@@ -253,6 +243,7 @@ test_files:
253
243
  - spec/lib/pensio_api/request_spec.rb
254
244
  - spec/lib/pensio_api/reservation_spec.rb
255
245
  - spec/lib/pensio_api/responses/base_spec.rb
246
+ - spec/lib/pensio_api/responses/chargeback_callback_spec.rb
256
247
  - spec/lib/pensio_api/responses/funding_list_spec.rb
257
248
  - spec/lib/pensio_api/responses/gateway_url_spec.rb
258
249
  - spec/lib/pensio_api/responses/refund_spec.rb
@@ -271,6 +262,7 @@ test_files:
271
262
  - spec/support/fixtures/bad_request_error.xml
272
263
  - spec/support/fixtures/capture_reservation.xml
273
264
  - spec/support/fixtures/charge_subscription.xml
265
+ - spec/support/fixtures/chargeback_callback.xml
274
266
  - spec/support/fixtures/create_multi_payment_request.xml
275
267
  - spec/support/fixtures/create_payment_request.xml
276
268
  - spec/support/fixtures/failure_callback.xml