gosepa is a sepa xml file generator written in Go compatible with pain.001.001.03 schema (Customer Credit Transfer Initiation V03).
Forked from github.com/softinnov/gosepa and added some extra information in the generated XML file.
In contrast to the original package, I'm using differente ID's in the generator. The XML-Output got verified from a official bank service.
$ go get github.com/flofuenf/gosepa/sepa
package main
import (
"fmt"
"log"
"github.com/flofuenf/gosepa/sepa"
)
func main() {
// Direct Debit
doc := &sepa.DirectDebit{}
if err := doc.InitDoc("MSGID", "2017-06-07T14:39:33", "2017-06-07T14:39:33",
"2017-06-11", "Emiter Name", "FR1420041010050500013M02606", "BKAUATWW",
"emitterID", "US", "Your Street 120", "76657 Your City, Country"); err != nil {
log.Fatal("can't create sepa document : ", err)
}
if err := doc.AddTransaction("F201705", 70000, "EUR", "DEV Electronics",
"GB29NWBK60161331926819", "BFAUAUWA", "Invoice 12345", "mandandtIT", "2017-06-07T14:39:33"); err != nil {
log.Fatal("can't add transaction in the sepa document : ", err)
}
res, err := doc.PrettySerialize()
if err != nil {
log.Fatal("can't get the xml doc : ", err)
}
fmt.Println(string(res))
}
package main
import (
"fmt"
"log"
"github.com/flofuenf/gosepa/sepa"
)
func main() {
// Credit Transfer
ctXML := &sepa.CreditTransfer{}
if err := ctXML.InitDoc("MSGID", "paymentInfoID", "2017-06-07T14:39:33",
"2017-06-11", "Emitter Name", "FR1420041010050500013M02606", "BKAUATWW",
"US", "Your Street 120", "76657 Your City, Country"); err != nil {
log.Fatal("can't create sepa credit transfer document : ", err)
}
if err := ddXML.AddTransaction("F201705", 70000, "EUR", "DEV Electronics",
"GB29NWBK60161331926819", "BFAUAUWA", "Invoice 12345", "mandandtIT", "2017-06-07T14:39:33"); err != nil {
log.Fatal("can't add transaction in the sepa document : ", err)
}
res, err = ddXML.PrettySerialize()
if err != nil {
log.Fatal("can't get the xml doc : ", err)
}
fmt.Println(string(res))
}
Unit test the go way :
$ go test -v
You can use any xsd validation tool. I use xmllint from libxml.
$ sudo apt install libxml2-utils
You have to generate a file so xmllint can check it. From the sample in the 'tests' folder :
$ go run usage.go > test.xml
$ xmllint --noout --schema pain.001.001.03.xsd test.xml