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 \
|
||||
util-stdout.import.scm export-web-static.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 \
|
||||
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-bst-bdict.o util-bst-ldict.o util-bst-lset.o mailman2.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 \
|
||||
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.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