docdata 0.1.8 → 0.2.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 +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/docdata/response.rb +23 -2
- data/lib/docdata/version.rb +1 -1
- data/spec/response_spec.rb +29 -0
- data/spec/xml/status-paid-multiple-and-canceled.xml +42 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1649a0341e1a2bab71fffe7312e8164eac76ad28
|
4
|
+
data.tar.gz: c2669f29aaa9e3d413103d6853c176e70d9a9c8e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 09ae4da69d1e3863169b627dc658bd7a225e5682fdc33d13a3fd30767c7d5e2470af19b88bfa9f748bca4e5fe805fdf58074adbe440c7252a5c428fd874f6e5f
|
7
|
+
data.tar.gz: 7557feaa5bfed0907f872693f5699e8966928e01f5d5f7111d9921d0b0fe0374db73cfc8e5b4dbd048204ce605978c5f7c223ebd6c008b193c4b7aa098df9aa0
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## v0.2.0
|
2
|
+
* We now assume a payment to be paid when total_registered == total_acquirer_approved
|
3
|
+
|
4
|
+
## v0.1.9
|
5
|
+
* Bug fixed where 'paid?' returned false if respons status had both 'paid' and 'canceled' node in response XML.
|
6
|
+
|
1
7
|
## v0.1.8
|
2
8
|
* You can now make refunds. See documentation.
|
3
9
|
* Updated README
|
data/lib/docdata/response.rb
CHANGED
@@ -149,12 +149,31 @@ module Docdata
|
|
149
149
|
# a different 'paid'.
|
150
150
|
# @note This method is never 100% reliable. If you need to finetune this, please implement your own method, using
|
151
151
|
# the available data (total_captured, total_registered, etc.)
|
152
|
+
## from the Docs:
|
153
|
+
### Safe route:
|
154
|
+
# The safest route to check whether all payments were made is for the merchants
|
155
|
+
# to refer to the “Total captured” amount to see whether this equals the “Total registered
|
156
|
+
# amount”. While this may be the safest indicator, the downside is that it can sometimes take a
|
157
|
+
# long time for acquirers or shoppers to actually have the money transferred and it can be
|
158
|
+
# captured.
|
159
|
+
### Quick route:
|
160
|
+
# Another option is to see whether the sum of “total shopper pending”, “total
|
161
|
+
# acquirer pending” and “total acquirer authorized” matches the “total registered sum”. This
|
162
|
+
# implies that everyone responsible has indicated that they are going to make the payment and
|
163
|
+
# that the merchant is trusting that everyone will indeed make this. While this route will be
|
164
|
+
# faster, it does also have the risk that some payments will actually not have been made.
|
165
|
+
### Balanced route:
|
166
|
+
# Depending on the merchant's situation, it can be a good option to only refer
|
167
|
+
# to certain totals. For instance, if the merchant only makes use of credit card payments it
|
168
|
+
# could be a good route to only look at “Total acquirer approved”, since this will be rather safe
|
169
|
+
# but quicker than looking at the captures.
|
152
170
|
def is_paid?
|
171
|
+
|
153
172
|
if payment_method
|
154
173
|
case payment_method
|
155
174
|
# ideal (dutch)
|
156
175
|
when "IDEAL"
|
157
|
-
(total_registered == total_captured) && (capture_status == "CAPTURED")
|
176
|
+
(total_registered == total_captured) ## && (capture_status == "CAPTURED")
|
158
177
|
# creditcard
|
159
178
|
when "MASTERCARD", "VISA", "AMEX"
|
160
179
|
(total_registered == total_acquirer_approved)
|
@@ -164,7 +183,7 @@ module Docdata
|
|
164
183
|
# fallback: if total_registered equals total_caputured,
|
165
184
|
# we can assume that this order is paid. No 100% guarantee.
|
166
185
|
else
|
167
|
-
total_registered ==
|
186
|
+
total_registered == total_acquirer_approved
|
168
187
|
end
|
169
188
|
else
|
170
189
|
false
|
@@ -222,6 +241,8 @@ module Docdata
|
|
222
241
|
|
223
242
|
# Sometimes a single response has multiple payment nodes. When a payment fails first and
|
224
243
|
# succeeds later, for example. In that case, always use the newest (== highest id) node.
|
244
|
+
# UPDATE (2/3/2015) this is not always the case: a payment can receive a 'canceled' payment
|
245
|
+
# later on with a higher ID, but the order is still paid.
|
225
246
|
def self.payment_node(hash)
|
226
247
|
if hash[:payment] && hash[:payment].is_a?(Hash)
|
227
248
|
hash[:payment]
|
data/lib/docdata/version.rb
CHANGED
data/spec/response_spec.rb
CHANGED
@@ -33,6 +33,35 @@ describe Docdata::Response do
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
+
|
37
|
+
describe "response with multiple payment nodes (paid first, canceled later)" do
|
38
|
+
before(:each) do
|
39
|
+
file = "#{File.dirname(__FILE__)}/xml/status-paid-multiple-and-canceled.xml"
|
40
|
+
@xml = open(file)
|
41
|
+
@response = Docdata::Response.parse(:status, @xml)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "returs a response object" do
|
45
|
+
expect(@response).to be_kind_of(Docdata::Response)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "is of method IDEAL" do
|
49
|
+
expect(@response.payment_method).to eq("IDEAL")
|
50
|
+
end
|
51
|
+
|
52
|
+
it "is paid?" do
|
53
|
+
expect(@response.paid?).to eq(true)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "is paid" do
|
57
|
+
# puts "IS PAID: #{total_registered} && #{total_captured}"
|
58
|
+
expect(@response.total_registered).to eq(2600)
|
59
|
+
expect(@response.total_captured).to eq(2600)
|
60
|
+
expect(@response.paid).to eq(true)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
|
36
65
|
describe "response with multiple payment nodes (paid first, canceled later)" do
|
37
66
|
before(:each) do
|
38
67
|
file = "#{File.dirname(__FILE__)}/xml/status-paid-canceled-ideal-multiple.xml"
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
|
2
|
+
<S:Body>
|
3
|
+
<statusResponse xmlns="http://www.docdatapayments.com/services/paymentservice/1_1/">
|
4
|
+
<statusSuccess>
|
5
|
+
<success code="SUCCESS">Operation successful.</success>
|
6
|
+
<report>
|
7
|
+
<approximateTotals exchangedTo="EUR" exchangeRateDate="2015-03-02 11:14:59">
|
8
|
+
<totalRegistered>2600</totalRegistered>
|
9
|
+
<totalShopperPending>0</totalShopperPending>
|
10
|
+
<totalAcquirerPending>0</totalAcquirerPending>
|
11
|
+
<totalAcquirerApproved>2600</totalAcquirerApproved>
|
12
|
+
<totalCaptured>2600</totalCaptured>
|
13
|
+
<totalRefunded>0</totalRefunded>
|
14
|
+
<totalChargedback>0</totalChargedback>
|
15
|
+
</approximateTotals>
|
16
|
+
<payment>
|
17
|
+
<id>2551456273</id>
|
18
|
+
<paymentMethod>IDEAL</paymentMethod>
|
19
|
+
<authorization>
|
20
|
+
<status>CANCELED</status>
|
21
|
+
<amount currency="EUR">2600</amount>
|
22
|
+
<confidenceLevel/>
|
23
|
+
</authorization>
|
24
|
+
</payment>
|
25
|
+
<payment>
|
26
|
+
<id>2551456260</id>
|
27
|
+
<paymentMethod>IDEAL</paymentMethod>
|
28
|
+
<authorization>
|
29
|
+
<status>AUTHORIZED</status>
|
30
|
+
<amount currency="EUR">2600</amount>
|
31
|
+
<confidenceLevel>ACQUIRER_APPROVED</confidenceLevel>
|
32
|
+
<capture>
|
33
|
+
<status>CAPTURED</status>
|
34
|
+
<amount currency="EUR">2600</amount>
|
35
|
+
</capture>
|
36
|
+
</authorization>
|
37
|
+
</payment>
|
38
|
+
</report>
|
39
|
+
</statusSuccess>
|
40
|
+
</statusResponse>
|
41
|
+
</S:Body>
|
42
|
+
</S:Envelope>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docdata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henk Meijer
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-03-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -293,6 +293,7 @@ files:
|
|
293
293
|
- spec/xml/status-paid-creditcard.xml
|
294
294
|
- spec/xml/status-paid-ideal-multiple.xml
|
295
295
|
- spec/xml/status-paid-ideal.xml
|
296
|
+
- spec/xml/status-paid-multiple-and-canceled.xml
|
296
297
|
- spec/xml/status-paid-sofort.xml
|
297
298
|
homepage: http://rdoc.info/github/henkm/docdata/
|
298
299
|
licenses:
|
@@ -339,5 +340,6 @@ test_files:
|
|
339
340
|
- spec/xml/status-paid-creditcard.xml
|
340
341
|
- spec/xml/status-paid-ideal-multiple.xml
|
341
342
|
- spec/xml/status-paid-ideal.xml
|
343
|
+
- spec/xml/status-paid-multiple-and-canceled.xml
|
342
344
|
- spec/xml/status-paid-sofort.xml
|
343
345
|
has_rdoc:
|