- Posts: 13
- Thank you received: 1
PEPPOL requirements for Events and Memberships
- MOLEDesign
- Topic Author
- Offline
- New Member
-
Less
More
1 month 2 weeks ago #175760
by MOLEDesign
Replied by MOLEDesign on topic PEPPOL requirements for Events and Memberships
The XML is standard so 95% of the code is stamdard I would have thought, all you need to do is allow 'end point' addition in the plugin similar to sandbox / live with stripe
Here is an XML
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<!-- Unique invoice ID -->
<cbc:ID>INV-2025-000123</cbc:ID>
<!-- Invoice issue date -->
<cbc:IssueDate>2025-11-16</cbc:IssueDate>
<!-- Type code "380" = commercial invoice -->
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<!-- Currency -->
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<!-- Seller (Your Organisation) -->
<cac:AccountingSupplierParty>
<cac:Party>
<cac:PartyName>
<cbc:Name>My Pricing Company</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Main Street 1</cbc:StreetName>
<cbc:CityName>Brussels</cbc:CityName>
<cbc:PostalZone>1000</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>BE0123456789</cbc:CompanyID> <!-- VAT number -->
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:CompanyID>BE0123456789</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingSupplierParty>
<!-- Buyer -->
<cac:AccountingCustomerParty>
<cac:Party>
<cac:PartyName>
<cbc:Name>Registering Corporation</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Customer Street 99</cbc:StreetName>
<cbc:CityName>Antwerp</cbc:CityName>
<cbc:PostalZone>2000</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>BE9876543210</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
</cac:Party>
</cac:AccountingCustomerParty>
<!-- Invoice Line(s) -->
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="EA">1</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Description>Test Forum 2025 – Registration</cbc:Description>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">1000.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
<!-- Tax summary -->
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">210.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">1000.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">210.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<!-- Totals -->
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">1000.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">1210.00</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="EUR">1210.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
</Invoice>
Here is an XML
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<!-- Unique invoice ID -->
<cbc:ID>INV-2025-000123</cbc:ID>
<!-- Invoice issue date -->
<cbc:IssueDate>2025-11-16</cbc:IssueDate>
<!-- Type code "380" = commercial invoice -->
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<!-- Currency -->
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<!-- Seller (Your Organisation) -->
<cac:AccountingSupplierParty>
<cac:Party>
<cac:PartyName>
<cbc:Name>My Pricing Company</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Main Street 1</cbc:StreetName>
<cbc:CityName>Brussels</cbc:CityName>
<cbc:PostalZone>1000</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>BE0123456789</cbc:CompanyID> <!-- VAT number -->
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:CompanyID>BE0123456789</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingSupplierParty>
<!-- Buyer -->
<cac:AccountingCustomerParty>
<cac:Party>
<cac:PartyName>
<cbc:Name>Registering Corporation</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Customer Street 99</cbc:StreetName>
<cbc:CityName>Antwerp</cbc:CityName>
<cbc:PostalZone>2000</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>BE9876543210</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
</cac:Party>
</cac:AccountingCustomerParty>
<!-- Invoice Line(s) -->
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="EA">1</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Description>Test Forum 2025 – Registration</cbc:Description>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">1000.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
<!-- Tax summary -->
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">210.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">1000.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">210.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<!-- Totals -->
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">1000.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">1210.00</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="EUR">1210.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
</Invoice>
Please Log in or Create an account to join the conversation.
- Tuan Pham Ngoc
- Offline
- Administrator
-
1 month 2 weeks ago #175761
by Tuan Pham Ngoc
Replied by Tuan Pham Ngoc on topic PEPPOL requirements for Events and Memberships
Thanks @MOLEDesign . This XML is simpler than what I saw before. But even if we can generate that xml invoice like that, the next question is where should that XML is sent to? And how to send it?
Tuan
Tuan
Please Log in or Create an account to join the conversation.
- MOLEDesign
- Topic Author
- Offline
- New Member
-
Less
More
- Posts: 13
- Thank you received: 1
1 month 2 weeks ago #175762
by MOLEDesign
Replied by MOLEDesign on topic PEPPOL requirements for Events and Memberships
I was playing with PEPPOL before i started this thread - but i think you just send the file to BILLET as FILE, dont send an XML string for Billit
I have uploaded my code to GIT with a readme - may get you started if you havnt already
You will have to work with one of the others in this thread to test with BILLIT itself, my client owns that system, not myself
github.com/MOLEDesign/PEPPOL-and-BILLET/tree/main
Honestly, the XML is standard, all that changes is the end point and delivery (XML vs XML File)
I have uploaded my code to GIT with a readme - may get you started if you havnt already
You will have to work with one of the others in this thread to test with BILLIT itself, my client owns that system, not myself
github.com/MOLEDesign/PEPPOL-and-BILLET/tree/main
Honestly, the XML is standard, all that changes is the end point and delivery (XML vs XML File)
Please Log in or Create an account to join the conversation.
- MOLEDesign
- Topic Author
- Offline
- New Member
-
Less
More
- Posts: 13
- Thank you received: 1
1 month 2 weeks ago - 1 month 2 weeks ago #175763
by MOLEDesign
Replied by MOLEDesign on topic PEPPOL requirements for Events and Memberships
The PEPPOL process
- User registers for an event / membership
- Stripe (or whatever) processes the payment
- Stripe Payment confirmed
- Joomla Create normal PDF invoice (for user)
- Joomla Generate PEPPOL XML version of the invoice
- Joomla Send that XML to a PEPPOL Access Point via API
- Access Point → Delivers to customer’s PEPPOL endpoint (nothing to do with us)
Here is where it gets messed up (as I hate VAT) - Customers do NOT need to manually give you a PEPPOL ID For most cases, we only need their VAT number and their registered company details. However i can tell youi now this is going to be painful BUT we can put the ownership on the customer to make sure info is correct. I will be damned if i try to integrate VIES again
- User registers for an event / membership
- Stripe (or whatever) processes the payment
- Stripe Payment confirmed
- Joomla Create normal PDF invoice (for user)
- Joomla Generate PEPPOL XML version of the invoice
- Joomla Send that XML to a PEPPOL Access Point via API
- Access Point → Delivers to customer’s PEPPOL endpoint (nothing to do with us)
Here is where it gets messed up (as I hate VAT) - Customers do NOT need to manually give you a PEPPOL ID For most cases, we only need their VAT number and their registered company details. However i can tell youi now this is going to be painful BUT we can put the ownership on the customer to make sure info is correct. I will be damned if i try to integrate VIES again
Last edit: 1 month 2 weeks ago by MOLEDesign. Reason: Added info
Please Log in or Create an account to join the conversation.
- Tuan Pham Ngoc
- Offline
- Administrator
-
1 month 2 weeks ago #175764
by Tuan Pham Ngoc
Replied by Tuan Pham Ngoc on topic PEPPOL requirements for Events and Memberships
For billit, they provide API for us to pass data to them to generate invoice. We do not generate xml invoice ourself. I do not know about other providers. Maybe for the time being, we can try to have a plugin integrate with billit first, then we will see how it goes
Regards,
Tuan
Regards,
Tuan
Please Log in or Create an account to join the conversation.
- Tuan Pham Ngoc
- Offline
- Administrator
-
1 month 1 week ago #175830
by Tuan Pham Ngoc
Replied by Tuan Pham Ngoc on topic PEPPOL requirements for Events and Memberships
OK. So I just finished developing the plugin which is integrated with Billit
www.billit.eu/nl-be/
to generate and sent Peppol invoices. If you need it, go to
joomdonation.com/joomla-extensions/event...ts-registration.html
, look at Paid add-ons tab, find and purchase EB Billit plugin to have this feature. I will make it available for Membership Pro and other extensions, too. I will also try to look at and implement support for other providers if requested
Regards,
Tuan
Regards,
Tuan
The following user(s) said Thank You: nieta
Please Log in or Create an account to join the conversation.
- Tuan Pham Ngoc
- Offline
- Administrator
-
1 month 1 week ago #175832
by Tuan Pham Ngoc
Replied by Tuan Pham Ngoc on topic PEPPOL requirements for Events and Memberships
I wrote a quick instructions for the plugin here
docs.joomdonation.com/eventsbooking/paid...vents-booking-billit
. If you use it and have any questions, feel free to submit a support ticket and we will be happy to assist
Regards,
Tuan
Regards,
Tuan
Please Log in or Create an account to join the conversation.
- webatwork
- Offline
- Senior Member
-
Less
More
- Posts: 59
- Thank you received: 0
1 month 1 week ago #175838
by webatwork
Replied by webatwork on topic PEPPOL requirements for Events and Memberships
Hi Tuan, I bought the plugin but when I download it, I receive the einvoice plugin, not the billit plugin. can you check please?
Please Log in or Create an account to join the conversation.
- Tuan Pham Ngoc
- Offline
- Administrator
-
1 month 1 week ago #175841
by Tuan Pham Ngoc
Replied by Tuan Pham Ngoc on topic PEPPOL requirements for Events and Memberships
Sorry my bad. Please access to My Downloads menu item to download the correct payment plugin. Copy paste error
Please setup and use it and let me know the feedback
Regards,
Tuan
Please setup and use it and let me know the feedback
Regards,
Tuan
Please Log in or Create an account to join the conversation.
- webatwork
- Offline
- Senior Member
-
Less
More
- Posts: 59
- Thank you received: 0
1 month 1 week ago #175850
by webatwork
Replied by webatwork on topic PEPPOL requirements for Events and Memberships
testing it now but so far not working. No invoice is delivered to the customer, no outgoiing invoice to be seen in my own Billit dashboard. I contacted Billit to check if my account is sepup oke. Waiting now ...
Please Log in or Create an account to join the conversation.
Support
Documentation
Information
Copyright © 2026 Joomla Extensions by Joomdonation. All Rights Reserved.
joomdonation.com is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters the trademark holder in the United States and other countries.
The Joomla! name and logo is used under a limited license granted by Open Source Matters the trademark holder in the United States and other countries.