docdata 0.0.1 → 0.0.2
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/.coveralls.yml +2 -0
- data/.gitignore +4 -1
- data/.travis.yml +10 -0
- data/LICENSE +1 -1
- data/README.md +173 -7
- data/Rakefile +8 -0
- data/docdata.gemspec +18 -11
- data/lib/docdata.rb +74 -1
- data/lib/docdata/bank.rb +27 -0
- data/lib/docdata/config.rb +41 -0
- data/lib/docdata/docdata_error.rb +8 -0
- data/lib/docdata/engine.rb +13 -0
- data/lib/docdata/ideal.rb +40 -0
- data/lib/docdata/line_item.rb +99 -0
- data/lib/docdata/payment.rb +196 -0
- data/lib/docdata/response.rb +173 -0
- data/lib/docdata/shopper.rb +112 -0
- data/lib/docdata/version.rb +1 -1
- data/lib/docdata/xml/bank-list.xml +39 -0
- data/lib/docdata/xml/cancel.xml.erb +9 -0
- data/lib/docdata/xml/create.xml.erb +98 -0
- data/lib/docdata/xml/start.xml.erb +67 -0
- data/lib/docdata/xml/status.xml.erb +9 -0
- data/php-example/create.xml.erb +140 -0
- data/php-example/index.html +78 -0
- data/php-example/process.php +182 -0
- data/php-example/return.php +36 -0
- data/php-example/soap.rb +21 -0
- data/spec/config_spec.rb +53 -0
- data/spec/ideal_spec.rb +19 -0
- data/spec/line_item_spec.rb +55 -0
- data/spec/payment_spec.rb +162 -0
- data/spec/response_spec.rb +206 -0
- data/spec/shopper_spec.rb +50 -0
- data/spec/spec_helper.rb +36 -0
- data/spec/xml/status-canceled-creditcard.xml +34 -0
- data/spec/xml/status-canceled-ideal.xml +29 -0
- data/spec/xml/status-new.xml +20 -0
- data/spec/xml/status-paid-creditcard.xml +33 -0
- data/spec/xml/status-paid-ideal.xml +33 -0
- data/spec/xml/status-paid-sofort.xml +33 -0
- metadata +145 -13
- data/LICENSE.txt +0 -22
@@ -0,0 +1,112 @@
|
|
1
|
+
module Docdata
|
2
|
+
|
3
|
+
# Creates a validator
|
4
|
+
class ShopperValidator
|
5
|
+
include Veto.validator
|
6
|
+
validates :id, presence: true
|
7
|
+
validates :first_name, presence: true
|
8
|
+
validates :last_name, presence: true
|
9
|
+
validates :street, presence: true
|
10
|
+
validates :house_number, presence: true
|
11
|
+
validates :postal_code, presence: true
|
12
|
+
validates :city, presence: true
|
13
|
+
validates :email, presence: true
|
14
|
+
validates :country_code, presence: true, format: /[A-Z]{2}/
|
15
|
+
validates :language_code, presence: true, format: /[a-z]{2}/
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
#
|
21
|
+
# Object representing a "Shopper"
|
22
|
+
#
|
23
|
+
# @example
|
24
|
+
# Shopper.new({
|
25
|
+
# :first_name => "Jack",
|
26
|
+
# :last_name => "Sixpack"
|
27
|
+
# :id => "MC123"
|
28
|
+
# })
|
29
|
+
# @param format [String] The shopper ID
|
30
|
+
# @param format [String] Shopper first name
|
31
|
+
# @param format [String] Shopper last name
|
32
|
+
# @param format [String] Shopper street address
|
33
|
+
# @param format [String] Shopper house number
|
34
|
+
# @param format [String] Shopper postal code
|
35
|
+
# @param format [String] Shopper city
|
36
|
+
# @param format [String] Shopper email
|
37
|
+
# @param format [String] ISO country code (us, nl, de, uk)
|
38
|
+
# @param format [String] ISO language code (en, nl, de)
|
39
|
+
class Shopper
|
40
|
+
|
41
|
+
# @return [Array] Errors
|
42
|
+
attr_accessor :errors
|
43
|
+
attr_accessor :id
|
44
|
+
attr_accessor :first_name
|
45
|
+
attr_accessor :last_name
|
46
|
+
attr_accessor :street
|
47
|
+
attr_accessor :house_number
|
48
|
+
attr_accessor :postal_code
|
49
|
+
attr_accessor :city
|
50
|
+
attr_accessor :email
|
51
|
+
attr_accessor :country_code
|
52
|
+
attr_accessor :language_code
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
#
|
58
|
+
# Initializer to transform a +Hash+ into an Shopper object
|
59
|
+
#
|
60
|
+
# @param [Hash] args
|
61
|
+
def initialize(args=nil)
|
62
|
+
self.set_default_values
|
63
|
+
return if args.nil?
|
64
|
+
args.each do |k,v|
|
65
|
+
instance_variable_set("@#{k}", v) unless v.nil?
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
def name
|
71
|
+
"#{first_name} #{last_name}"
|
72
|
+
end
|
73
|
+
|
74
|
+
# Returns true if this instanciated object is valid
|
75
|
+
def valid?
|
76
|
+
validator = ShopperValidator.new
|
77
|
+
validator.valid?(self)
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
def set_default_values
|
82
|
+
@first_name = "First Name"
|
83
|
+
@last_name = "Last Name"
|
84
|
+
@street = "Main Street"
|
85
|
+
@house_number = "123"
|
86
|
+
@postal_code = "2244"
|
87
|
+
@city = "City"
|
88
|
+
@country_code = "NL"
|
89
|
+
@language_code = "nl"
|
90
|
+
@email = "random@example.com"
|
91
|
+
end
|
92
|
+
|
93
|
+
# This method will instanciate and return a new Shopper object
|
94
|
+
# with all the required properties set. Mostly for testing purpose,
|
95
|
+
# but maybe usefull in other scenarios as well.
|
96
|
+
def self.create_valid_shopper
|
97
|
+
shopper = self.new
|
98
|
+
shopper.id = "789"
|
99
|
+
shopper.first_name = "John"
|
100
|
+
shopper.last_name = "Doe"
|
101
|
+
shopper.country_code = "NL"
|
102
|
+
shopper.language_code = "nl"
|
103
|
+
shopper.email = "test@example.org"
|
104
|
+
shopper.street = "Main street"
|
105
|
+
shopper.house_number = "123"
|
106
|
+
shopper.postal_code = "1122AB"
|
107
|
+
shopper.city = "Test City"
|
108
|
+
return shopper
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
end
|
data/lib/docdata/version.rb
CHANGED
@@ -0,0 +1,39 @@
|
|
1
|
+
<response>
|
2
|
+
<bank>
|
3
|
+
<bank_id>0031</bank_id>
|
4
|
+
<bank_name>ABN AMRO</bank_name>
|
5
|
+
</bank>
|
6
|
+
<bank>
|
7
|
+
<bank_id>0761</bank_id>
|
8
|
+
<bank_name>ASN Bank</bank_name>
|
9
|
+
</bank>
|
10
|
+
<bank>
|
11
|
+
<bank_id>0721</bank_id>
|
12
|
+
<bank_name>ING</bank_name>
|
13
|
+
</bank>
|
14
|
+
<bank>
|
15
|
+
<bank_id>0801</bank_id>
|
16
|
+
<bank_name>Knab</bank_name>
|
17
|
+
</bank>
|
18
|
+
<bank>
|
19
|
+
<bank_id>0021</bank_id>
|
20
|
+
<bank_name>Rabobank</bank_name>
|
21
|
+
</bank>
|
22
|
+
<bank>
|
23
|
+
<bank_id>0771</bank_id>
|
24
|
+
<bank_name>RegioBank</bank_name>
|
25
|
+
</bank>
|
26
|
+
<bank>
|
27
|
+
<bank_id>0751</bank_id>
|
28
|
+
<bank_name>SNS Bank</bank_name>
|
29
|
+
</bank>
|
30
|
+
<bank>
|
31
|
+
<bank_id>0511</bank_id>
|
32
|
+
<bank_name>Triodos Bank</bank_name>
|
33
|
+
</bank>
|
34
|
+
<bank>
|
35
|
+
<bank_id>0161</bank_id>
|
36
|
+
<bank_name>van Lanschot</bank_name>
|
37
|
+
</bank>
|
38
|
+
<message>This is the current list of banks and their ID's that currently support iDEAL-payments</message>
|
39
|
+
</response>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_1="http://www.docdatapayments.com/services/paymentservice/1_1/">
|
2
|
+
<soapenv:Header/>
|
3
|
+
<soapenv:Body>
|
4
|
+
<_1:cancelRequest version="1.1">
|
5
|
+
<_1:merchant name="<%=Docdata.username%>" password="Docdata.password"/>
|
6
|
+
<_1:paymentOrderKey><%= payment.key %></_1:paymentOrderKey>
|
7
|
+
</_1:cancelRequest>
|
8
|
+
</soapenv:Body>
|
9
|
+
</soapenv:Envelope>
|
@@ -0,0 +1,98 @@
|
|
1
|
+
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_1="http://www.docdatapayments.com/services/paymentservice/1_1/">
|
2
|
+
<soapenv:Header/>
|
3
|
+
<soapenv:Body>
|
4
|
+
<_1:createRequest version="1.1">
|
5
|
+
<_1:merchant name="<%= Docdata.username %>" password="<%= Docdata.password %>"/>
|
6
|
+
<_1:merchantOrderReference><%= payment.order_reference %></_1:merchantOrderReference>
|
7
|
+
<_1:paymentPreferences>
|
8
|
+
<_1:profile><%= payment.profile %></_1:profile>
|
9
|
+
<_1:numberOfDaysToPay>14</_1:numberOfDaysToPay>
|
10
|
+
</_1:paymentPreferences>
|
11
|
+
|
12
|
+
<_1:shopper id="<%= shopper.id %>">
|
13
|
+
<_1:name>
|
14
|
+
<_1:first><%= shopper.first_name %></_1:first>
|
15
|
+
<_1:last><%= shopper.last_name %></_1:last>
|
16
|
+
</_1:name>
|
17
|
+
<_1:email><%= shopper.email %></_1:email>
|
18
|
+
<_1:language code="<%= shopper.language_code %>"/>
|
19
|
+
<_1:gender>M</_1:gender>
|
20
|
+
|
21
|
+
</_1:shopper>
|
22
|
+
<_1:totalGrossAmount currency="<%= payment.currency %>"><%= payment.amount %></_1:totalGrossAmount>
|
23
|
+
<_1:billTo>
|
24
|
+
<_1:name>
|
25
|
+
<_1:first><%= shopper.first_name %></_1:first>
|
26
|
+
<_1:last><%= shopper.last_name %></_1:last>
|
27
|
+
</_1:name>
|
28
|
+
<_1:address>
|
29
|
+
<_1:street><%= shopper.street %></_1:street>
|
30
|
+
<_1:houseNumber><%= shopper.house_number %></_1:houseNumber>
|
31
|
+
<_1:postalCode><%= shopper.postal_code %></_1:postalCode>
|
32
|
+
<_1:city><%= shopper.city %></_1:city>
|
33
|
+
<_1:country code="<%= shopper.country_code %>"/>
|
34
|
+
</_1:address>
|
35
|
+
</_1:billTo>
|
36
|
+
|
37
|
+
<% if payment.description.present? %>
|
38
|
+
<_1:description><%= payment.description %></_1:description>
|
39
|
+
<% end %>
|
40
|
+
<% if payment.receipt_text.present? %>
|
41
|
+
<_1:receiptText><%= payment.receipt_text %></_1:receiptText>
|
42
|
+
<% end %>
|
43
|
+
|
44
|
+
<% if payment.line_items.any? %>
|
45
|
+
<_1:invoice>
|
46
|
+
<!-- TODO: include VAT options -->
|
47
|
+
<_1:totalNetAmount currency="<%= payment.currency %>"><%= payment.amount %></_1:totalNetAmount>
|
48
|
+
<!--1 to 1000 repetitions:-->
|
49
|
+
<% for vat_rate in payment.vat_rates %>
|
50
|
+
<% puts "Rate: #{vat_rate}" %>
|
51
|
+
|
52
|
+
<_1:totalVatAmount currency="<%= payment.currency %>" rate="<%= vat_rate[:rate].to_s %>"><%= vat_rate[:total].to_i.to_s %></_1:totalVatAmount>
|
53
|
+
<% end %>
|
54
|
+
<!--1 to 1000 repetitions:-->
|
55
|
+
<% payment.line_items.each_with_index do |line_item, i| %>
|
56
|
+
<_1:item number="<%= i+1 %>">
|
57
|
+
<_1:name><%= line_item.name %></_1:name>
|
58
|
+
<_1:code><%= line_item.code %></_1:code>
|
59
|
+
<_1:quantity unitOfMeasure="<%= line_item.unit_of_measure %>"><%= line_item.quantity %></_1:quantity>
|
60
|
+
<_1:description><%= line_item.description %></_1:description>
|
61
|
+
|
62
|
+
<% if line_item.image.present? %>
|
63
|
+
<_1:image><%= line_item.image %></_1:image>
|
64
|
+
<% end %>
|
65
|
+
<_1:netAmount currency="<%= payment.currency %>">20</_1:netAmount>
|
66
|
+
<_1:grossAmount currency="<%= payment.currency %>">20</_1:grossAmount>
|
67
|
+
<_1:vat rate="20">
|
68
|
+
<_1:amount currency="<%= payment.currency %>">20</_1:amount>
|
69
|
+
</_1:vat>
|
70
|
+
<_1:totalNetAmount currency="<%= payment.currency %>">20</_1:totalNetAmount>
|
71
|
+
<_1:totalGrossAmount currency="<%= payment.currency %>">20</_1:totalGrossAmount>
|
72
|
+
<_1:totalVat rate="20">
|
73
|
+
<_1:amount currency="20">20</_1:amount>
|
74
|
+
</_1:totalVat>
|
75
|
+
|
76
|
+
</_1:item>
|
77
|
+
<% end %>
|
78
|
+
<_1:shipTo>
|
79
|
+
<_1:name>
|
80
|
+
<_1:first><%= shopper.first_name %></_1:first>
|
81
|
+
<_1:last><%= shopper.first_name %></_1:last>
|
82
|
+
</_1:name>
|
83
|
+
<_1:address>
|
84
|
+
<_1:street><%= shopper.street %></_1:street>
|
85
|
+
<_1:houseNumber><%= shopper.house_number %></_1:houseNumber>
|
86
|
+
<_1:postalCode><%= shopper.postal_code %></_1:postalCode>
|
87
|
+
<_1:city><%= shopper.city %></_1:city>
|
88
|
+
<_1:country code="<%= shopper.country_code %>"/>
|
89
|
+
</_1:address>
|
90
|
+
</_1:shipTo>
|
91
|
+
<!--Optional:-->
|
92
|
+
<_1:additionalDescription>sdf</_1:additionalDescription>
|
93
|
+
</_1:invoice>
|
94
|
+
<% end %>
|
95
|
+
|
96
|
+
</_1:createRequest>
|
97
|
+
</soapenv:Body>
|
98
|
+
</soapenv:Envelope>
|
@@ -0,0 +1,67 @@
|
|
1
|
+
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_1="http://www.docdatapayments.com/services/paymentservice/1_1/">
|
2
|
+
<soapenv:Header/>
|
3
|
+
<soapenv:Body>
|
4
|
+
<_1:startRequest version="1.1">
|
5
|
+
<_1:merchant name="<%= Docdata.username %>" password="<%= Docdata.password %>"/>
|
6
|
+
<_1:paymentOrderKey>?</_1:paymentOrderKey>
|
7
|
+
<!--You have a CHOICE of the next 2 items at this level-->
|
8
|
+
<!--Optional:-->
|
9
|
+
<_1:payment>
|
10
|
+
<_1:paymentMethod><%= payment.key %></_1:paymentMethod>
|
11
|
+
<!--Optional:-->
|
12
|
+
<_1:paymentAmount currency="?">?</_1:paymentAmount>
|
13
|
+
<!--You have a CHOICE of the next 6 items at this level-->
|
14
|
+
<!--Optional:-->
|
15
|
+
<_1:amexPaymentInput>
|
16
|
+
<_1:creditCardNumber>?</_1:creditCardNumber>
|
17
|
+
<_1:expiryDate>?</_1:expiryDate>
|
18
|
+
<_1:cid>?</_1:cid>
|
19
|
+
<_1:cardHolder>?</_1:cardHolder>
|
20
|
+
<_1:emailAddress>?</_1:emailAddress>
|
21
|
+
</_1:amexPaymentInput>
|
22
|
+
<!--Optional:-->
|
23
|
+
<_1:masterCardPaymentInput>
|
24
|
+
<_1:creditCardNumber>?</_1:creditCardNumber>
|
25
|
+
<_1:expiryDate>?</_1:expiryDate>
|
26
|
+
<_1:cvc2>?</_1:cvc2>
|
27
|
+
<_1:cardHolder>?</_1:cardHolder>
|
28
|
+
<_1:emailAddress>?</_1:emailAddress>
|
29
|
+
</_1:masterCardPaymentInput>
|
30
|
+
<!--Optional:-->
|
31
|
+
<_1:visaPaymentInput>
|
32
|
+
<_1:creditCardNumber>?</_1:creditCardNumber>
|
33
|
+
<_1:expiryDate>?</_1:expiryDate>
|
34
|
+
<_1:cvv2>?</_1:cvv2>
|
35
|
+
<_1:cardHolder>?</_1:cardHolder>
|
36
|
+
<_1:emailAddress>?</_1:emailAddress>
|
37
|
+
</_1:visaPaymentInput>
|
38
|
+
<!--Optional:-->
|
39
|
+
<_1:directDebitPaymentInput>
|
40
|
+
<_1:holderName>?</_1:holderName>
|
41
|
+
<_1:holderCity>?</_1:holderCity>
|
42
|
+
<_1:holderCountry code="?"/>
|
43
|
+
<_1:bic>?</_1:bic>
|
44
|
+
<_1:iban>?</_1:iban>
|
45
|
+
</_1:directDebitPaymentInput>
|
46
|
+
<!--Optional:-->
|
47
|
+
<_1:bankTransferPaymentInput>
|
48
|
+
<_1:emailAddress>?</_1:emailAddress>
|
49
|
+
</_1:bankTransferPaymentInput>
|
50
|
+
<!--Optional:-->
|
51
|
+
<_1:elvPaymentInput>
|
52
|
+
<_1:accountNumber>?</_1:accountNumber>
|
53
|
+
<_1:bankCode>?</_1:bankCode>
|
54
|
+
</_1:elvPaymentInput>
|
55
|
+
</_1:payment>
|
56
|
+
<!--Optional:-->
|
57
|
+
<_1:recurringPaymentRequest>
|
58
|
+
<_1:initialPaymentReference>
|
59
|
+
<!--You have a CHOICE of the next 3 items at this level-->
|
60
|
+
<_1:linkId>?</_1:linkId>
|
61
|
+
<_1:paymentId>?</_1:paymentId>
|
62
|
+
<_1:merchantReference>?</_1:merchantReference>
|
63
|
+
</_1:initialPaymentReference>
|
64
|
+
</_1:recurringPaymentRequest>
|
65
|
+
</_1:startRequest>
|
66
|
+
</soapenv:Body>
|
67
|
+
</soapenv:Envelope>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_1="http://www.docdatapayments.com/services/paymentservice/1_1/">
|
2
|
+
<soapenv:Header/>
|
3
|
+
<soapenv:Body>
|
4
|
+
<_1:statusRequest version="1.1">
|
5
|
+
<_1:merchant name="<%=Docdata.username%>" password="<%= Docdata.password %>"/>
|
6
|
+
<_1:paymentOrderKey><%= payment.key %></_1:paymentOrderKey>
|
7
|
+
</_1:statusRequest>
|
8
|
+
</soapenv:Body>
|
9
|
+
</soapenv:Envelope>
|
@@ -0,0 +1,140 @@
|
|
1
|
+
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_1="http://www.docdatapayments.com/services/paymentservice/1_1/">
|
2
|
+
<soapenv:Header/>
|
3
|
+
<soapenv:Body>
|
4
|
+
<_1:createRequest version="1.1">
|
5
|
+
<_1:merchant name="?" password="?"/>
|
6
|
+
<_1:merchantOrderReference>?</_1:merchantOrderReference>
|
7
|
+
<_1:paymentPreferences>
|
8
|
+
<_1:profile>?</_1:profile>
|
9
|
+
<_1:numberOfDaysToPay>?</_1:numberOfDaysToPay>
|
10
|
+
<!--Optional:-->
|
11
|
+
<_1:exhortation>
|
12
|
+
<_1:period1 numberOfDays="?" profile="?"/>
|
13
|
+
<!--Optional:-->
|
14
|
+
<_1:period2 numberOfDays="?" profile="?"/>
|
15
|
+
</_1:exhortation>
|
16
|
+
</_1:paymentPreferences>
|
17
|
+
<!--Optional:-->
|
18
|
+
<_1:menuPreferences>
|
19
|
+
<!--Optional:-->
|
20
|
+
<_1:css id="?"/>
|
21
|
+
</_1:menuPreferences>
|
22
|
+
<_1:shopper id="?">
|
23
|
+
<_1:name>
|
24
|
+
<!--Optional:-->
|
25
|
+
<_1:prefix>?</_1:prefix>
|
26
|
+
<!--Optional:-->
|
27
|
+
<_1:initials>?</_1:initials>
|
28
|
+
<_1:first>?</_1:first>
|
29
|
+
<!--Optional:-->
|
30
|
+
<_1:middle>?</_1:middle>
|
31
|
+
<_1:last>?</_1:last>
|
32
|
+
<!--Optional:-->
|
33
|
+
<_1:suffix>?</_1:suffix>
|
34
|
+
</_1:name>
|
35
|
+
<_1:email>?</_1:email>
|
36
|
+
<_1:language code="?"/>
|
37
|
+
<_1:gender>?</_1:gender>
|
38
|
+
<!--Optional:-->
|
39
|
+
<_1:dateOfBirth>?</_1:dateOfBirth>
|
40
|
+
<!--Optional:-->
|
41
|
+
<_1:phoneNumber>?</_1:phoneNumber>
|
42
|
+
<!--Optional:-->
|
43
|
+
<_1:mobilePhoneNumber>?</_1:mobilePhoneNumber>
|
44
|
+
</_1:shopper>
|
45
|
+
<_1:totalGrossAmount currency="?">?</_1:totalGrossAmount>
|
46
|
+
<_1:billTo>
|
47
|
+
<_1:name>
|
48
|
+
<!--Optional:-->
|
49
|
+
<_1:prefix>?</_1:prefix>
|
50
|
+
<!--Optional:-->
|
51
|
+
<_1:initials>?</_1:initials>
|
52
|
+
<_1:first>?</_1:first>
|
53
|
+
<!--Optional:-->
|
54
|
+
<_1:middle>?</_1:middle>
|
55
|
+
<_1:last>?</_1:last>
|
56
|
+
<!--Optional:-->
|
57
|
+
<_1:suffix>?</_1:suffix>
|
58
|
+
</_1:name>
|
59
|
+
<_1:address>
|
60
|
+
<!--Optional:-->
|
61
|
+
<_1:company>?</_1:company>
|
62
|
+
<_1:street>?</_1:street>
|
63
|
+
<_1:houseNumber>?</_1:houseNumber>
|
64
|
+
<!--Optional:-->
|
65
|
+
<_1:houseNumberAddition>?</_1:houseNumberAddition>
|
66
|
+
<_1:postalCode>?</_1:postalCode>
|
67
|
+
<_1:city>?</_1:city>
|
68
|
+
<_1:country code="?"/>
|
69
|
+
</_1:address>
|
70
|
+
</_1:billTo>
|
71
|
+
<!--Optional:-->
|
72
|
+
<_1:description>?</_1:description>
|
73
|
+
<!--Optional:-->
|
74
|
+
<_1:receiptText>?</_1:receiptText>
|
75
|
+
<!--Optional:-->
|
76
|
+
<_1:includeCosts>false</_1:includeCosts>
|
77
|
+
<!--Optional:-->
|
78
|
+
<_1:paymentRequest>
|
79
|
+
<_1:initialPaymentReference>
|
80
|
+
<!--You have a CHOICE of the next 3 items at this level-->
|
81
|
+
<_1:linkId>?</_1:linkId>
|
82
|
+
<_1:paymentId>?</_1:paymentId>
|
83
|
+
<_1:merchantReference>?</_1:merchantReference>
|
84
|
+
</_1:initialPaymentReference>
|
85
|
+
</_1:paymentRequest>
|
86
|
+
<!--Optional:-->
|
87
|
+
<_1:invoice>
|
88
|
+
<_1:totalNetAmount currency="?">?</_1:totalNetAmount>
|
89
|
+
<!--1 to 1000 repetitions:-->
|
90
|
+
<_1:totalVatAmount currency="?" rate="?">?</_1:totalVatAmount>
|
91
|
+
<!--1 to 1000 repetitions:-->
|
92
|
+
<_1:item number="?">
|
93
|
+
<_1:name>?</_1:name>
|
94
|
+
<_1:code>?</_1:code>
|
95
|
+
<_1:quantity unitOfMeasure="?">?</_1:quantity>
|
96
|
+
<_1:description>?</_1:description>
|
97
|
+
<!--Optional:-->
|
98
|
+
<_1:image>?</_1:image>
|
99
|
+
<_1:netAmount currency="?">?</_1:netAmount>
|
100
|
+
<_1:grossAmount currency="?">?</_1:grossAmount>
|
101
|
+
<_1:vat rate="?">
|
102
|
+
<_1:amount currency="?">?</_1:amount>
|
103
|
+
</_1:vat>
|
104
|
+
<_1:totalNetAmount currency="?">?</_1:totalNetAmount>
|
105
|
+
<_1:totalGrossAmount currency="?">?</_1:totalGrossAmount>
|
106
|
+
<_1:totalVat rate="?">
|
107
|
+
<_1:amount currency="?">?</_1:amount>
|
108
|
+
</_1:totalVat>
|
109
|
+
</_1:item>
|
110
|
+
<_1:shipTo>
|
111
|
+
<_1:name>
|
112
|
+
<!--Optional:-->
|
113
|
+
<_1:prefix>?</_1:prefix>
|
114
|
+
<!--Optional:-->
|
115
|
+
<_1:initials>?</_1:initials>
|
116
|
+
<_1:first>?</_1:first>
|
117
|
+
<!--Optional:-->
|
118
|
+
<_1:middle>?</_1:middle>
|
119
|
+
<_1:last>?</_1:last>
|
120
|
+
<!--Optional:-->
|
121
|
+
<_1:suffix>?</_1:suffix>
|
122
|
+
</_1:name>
|
123
|
+
<_1:address>
|
124
|
+
<!--Optional:-->
|
125
|
+
<_1:company>?</_1:company>
|
126
|
+
<_1:street>?</_1:street>
|
127
|
+
<_1:houseNumber>?</_1:houseNumber>
|
128
|
+
<!--Optional:-->
|
129
|
+
<_1:houseNumberAddition>?</_1:houseNumberAddition>
|
130
|
+
<_1:postalCode>?</_1:postalCode>
|
131
|
+
<_1:city>?</_1:city>
|
132
|
+
<_1:country code="?"/>
|
133
|
+
</_1:address>
|
134
|
+
</_1:shipTo>
|
135
|
+
<!--Optional:-->
|
136
|
+
<_1:additionalDescription>?</_1:additionalDescription>
|
137
|
+
</_1:invoice>
|
138
|
+
</_1:createRequest>
|
139
|
+
</soapenv:Body>
|
140
|
+
</soapenv:Envelope>
|