Initial import of QR payment implementation.
This commit is contained in:
parent
826a5f1070
commit
306b9cb20e
2 changed files with 84 additions and 2 deletions
10
src/Makefile
10
src/Makefile
|
@ -43,7 +43,8 @@ HACKERBASE-DEPS=hackerbase.scm cal-month.import.scm \
|
||||||
progress.import.scm cal-period.import.scm \
|
progress.import.scm cal-period.import.scm \
|
||||||
util-stdout.import.scm export-web-static.import.scm \
|
util-stdout.import.scm export-web-static.import.scm \
|
||||||
dokuwiki.import.scm mailinglist.import.scm \
|
dokuwiki.import.scm mailinglist.import.scm \
|
||||||
export-sheet.import.scm mbase-query.import.scm
|
export-sheet.import.scm mbase-query.import.scm \
|
||||||
|
qr-payment.import.scm
|
||||||
|
|
||||||
HACKERBASE-OBJS=hackerbase.o testing.o listing.o cal-month.o \
|
HACKERBASE-OBJS=hackerbase.o testing.o listing.o cal-month.o \
|
||||||
cal-period.o ansi.o util-bst-ldict.o command-line.o mbase.o \
|
cal-period.o ansi.o util-bst-ldict.o command-line.o mbase.o \
|
||||||
|
@ -61,7 +62,7 @@ HACKERBASE-OBJS=hackerbase.o testing.o listing.o cal-month.o \
|
||||||
util-dir.o dokuwiki.o racket-kwargs.o duck.o util-bst.o \
|
util-dir.o dokuwiki.o racket-kwargs.o duck.o util-bst.o \
|
||||||
util-bst-bdict.o util-bst-ldict.o util-bst-lset.o mailman2.o \
|
util-bst-bdict.o util-bst-ldict.o util-bst-lset.o mailman2.o \
|
||||||
mailman-common.o mailman3.o mailman3-sql.o tiocgwinsz.o \
|
mailman-common.o mailman3.o mailman3-sql.o tiocgwinsz.o \
|
||||||
mailinglist.o export-sheet.o mbase-query.o
|
mailinglist.o export-sheet.o mbase-query.o qr-payment.o
|
||||||
|
|
||||||
GENDOC-SOURCES=gendoc.scm duck-extract.import.scm \
|
GENDOC-SOURCES=gendoc.scm duck-extract.import.scm \
|
||||||
util-time.import.scm util-csv.import.scm util-git.import.scm \
|
util-time.import.scm util-csv.import.scm util-git.import.scm \
|
||||||
|
@ -577,3 +578,8 @@ MBASE-QUERY-SOURCES=mbase-query.scm mbase.import.scm \
|
||||||
|
|
||||||
mbase-query.o: mbase-query.import.scm
|
mbase-query.o: mbase-query.import.scm
|
||||||
mbase-query.import.scm: $(MBASE-QUERY-SOURCES)
|
mbase-query.import.scm: $(MBASE-QUERY-SOURCES)
|
||||||
|
|
||||||
|
QR-PAYMENT-SOURCES=qr-payment.scm
|
||||||
|
|
||||||
|
qr-payment.o: qr-payment.import.scm
|
||||||
|
qr-payment.import.scm: $(QR-PAYMENT-SOURCES)
|
||||||
|
|
76
src/qr-payment.scm
Normal file
76
src/qr-payment.scm
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
;;
|
||||||
|
;; qr-payment.scm
|
||||||
|
;;
|
||||||
|
;; QR payment generator.
|
||||||
|
;;
|
||||||
|
;; ISC License
|
||||||
|
;;
|
||||||
|
;; Copyright 2023-2025 Brmlab, z.s.
|
||||||
|
;; Dominik Pantůček <dominik.pantucek@trustica.cz>
|
||||||
|
;;
|
||||||
|
;; Permission to use, copy, modify, and/or distribute this software
|
||||||
|
;; for any purpose with or without fee is hereby granted, provided
|
||||||
|
;; that the above copyright notice and this permission notice appear
|
||||||
|
;; in all copies.
|
||||||
|
;;
|
||||||
|
;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||||
|
;; WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||||
|
;; WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||||
|
;; AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
|
||||||
|
;; CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||||
|
;; OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
;; NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||||
|
;; CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
;;
|
||||||
|
|
||||||
|
(declare (unit qr-payment))
|
||||||
|
|
||||||
|
(module
|
||||||
|
qr-payment
|
||||||
|
(
|
||||||
|
make-qrp
|
||||||
|
make-brmlab-qrp
|
||||||
|
)
|
||||||
|
|
||||||
|
(import scheme
|
||||||
|
(chicken format)
|
||||||
|
(chicken string)
|
||||||
|
(chicken base))
|
||||||
|
|
||||||
|
(define (make-empty-qrp . vs)
|
||||||
|
(let ((v (if (null? vs) "1.0" (car vs))))
|
||||||
|
(list v "SPD")))
|
||||||
|
|
||||||
|
(define (add-field-to-qrp qrp key value)
|
||||||
|
(cons (format "~A:~A" key value)
|
||||||
|
qrp))
|
||||||
|
|
||||||
|
(define (serialize-qrp qrp)
|
||||||
|
(string-intersperse (reverse qrp) "*"))
|
||||||
|
|
||||||
|
(define (ensure-amount-format amt)
|
||||||
|
(if (string? amt)
|
||||||
|
amt
|
||||||
|
amt))
|
||||||
|
|
||||||
|
(define (make-qrp iban amt cc vs msg)
|
||||||
|
(let loop ((keys '(ACC AM CC MSG X-CS))
|
||||||
|
(vals (list iban (ensure-amount-format amt) cc msg vs))
|
||||||
|
(qrp (make-empty-qrp)))
|
||||||
|
(if (null? keys)
|
||||||
|
(serialize-qrp qrp)
|
||||||
|
(loop (cdr keys)
|
||||||
|
(cdr vals)
|
||||||
|
(add-field-to-qrp qrp (car keys) (car vals))))))
|
||||||
|
|
||||||
|
(define (make-brmlab-qrp amt cc vs)
|
||||||
|
(let ((iban (if (equal? cc "CZK")
|
||||||
|
"CZ0520100000002500079551"
|
||||||
|
(if (equal? cc "EUR")
|
||||||
|
"CZ9320100000002100079552"
|
||||||
|
(error "Invalid currency!")))))
|
||||||
|
(make-qrp iban amt cc vs "Brmlab")))
|
||||||
|
|
||||||
|
(print (make-brmlab-qrp 1000 "CZK" 1234))
|
||||||
|
|
||||||
|
)
|
Loading…
Add table
Add a link
Reference in a new issue