/gosepa

Go SEPA

Primary LanguageGoMIT LicenseMIT

gosepa

Go Report Card

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.

Install

$ go get github.com/flofuenf/gosepa/sepa

Usage

Direct Debit

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))
}

Credit Transfer

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))
}

Tests

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

Ressources