module QRGenerator
Public Class Methods
create(params, qrcode_path)
click to toggle source
payload:
"SPC\r\n" + # indicator for swiss qr code: SPC (swiss payments code) "0200\r\n" + # version of the specifications, 0200 = v2.0 "1\r\n" + # character set code: 1 = utf-8 restricted to the latin character set "CH4431999123000889012\r\n" + # iban of the creditor (payable to) "S\r\n" + # adress type: S = structured address, K = combined address elements (2 lines) "Robert Schneider AG\r\n" + # creditor's name or company, max 70 characters "Via Casa Postale\r\n" + # structured address: creditor's address street; combined address: address line 1 street and building number "1268/2/22\r\n" + # structured address: creditor's building number; combined address: address line 2 including postal code and town "2501\r\n" + # creditor's postal code "Biel\r\n" + # creditor's town "CH\r\n" + # creditor's country "\r\n" + # optional: ultimate creditor's address type: S/K "\r\n" + # optional: ultimate creditor's name/company "\r\n" + # optional: ultimate creditor's street or address line 1 "\r\n" + # optional: ultimate creditor's building number or address line 2 "\r\n" + # optional: ultimate creditor's postal code "\r\n" + # optional: ultimate creditor's town "\r\n" + # optional: ultimate creditor's country "123949.75\r\n" + # amount "CHF\r\n" + # currency "S\r\n"+ # debtor's address type (S/K) (payable by) "Pia-Maria Rutschmann-Schnyder\r\n" + # debtor's name / company "Grosse Marktgasse\r\n" + # debtor's street or address line 1 "28/5\r\n" + # debtor's building number or address line 2 "9400\r\n" + # debtor's postal code "Rorschach\r\n" + # debtor's town "CH\r\n" + # debtor's country "QRR\r\n" + # reference type: QRR = QR reference, SCOR = Creditor reference, NON = without reference "210000000003139471430009017\r\n" + # reference QR Reference: 27 chars check sum modulo 10 recursive, Creditor reference max 25 chars "Beachten sie unsere Sonderangebotswoche bis 23.02.2017!\r\n" + # additional information unstructured message max 140 chars "EPD\r\n" + # fixed indicator for EPD (end payment data) "//S1/10/10201409/11/181105/40/0:30\r\n" + # bill information coded for automated booking of payment, data is not forwarded with the payment "eBill/B/41010560425610173"; # alternative scheme paramaters, max 100 chars
# File lib/qr-bills/qr-generator.rb, line 39 def self.create(params, qrcode_path) payload = "SPC\r\n" payload += "0200\r\n" payload += "1\r\n" payload += "#{params[:bill_params][:creditor][:iban].delete(' ')}\r\n" payload += "#{params[:bill_params][:creditor][:address][:type]}\r\n" payload += "#{params[:bill_params][:creditor][:address][:name]}\r\n" payload += "#{params[:bill_params][:creditor][:address][:line1]}\r\n" payload += "#{params[:bill_params][:creditor][:address][:line2]}\r\n" payload += "#{params[:bill_params][:creditor][:address][:postal_code]}\r\n" payload += "#{params[:bill_params][:creditor][:address][:town]}\r\n" payload += "#{params[:bill_params][:creditor][:address][:country]}\r\n" payload += "\r\n" payload += "\r\n" payload += "\r\n" payload += "\r\n" payload += "\r\n" payload += "\r\n" payload += "\r\n" payload += "#{params[:bill_params][:amount]}\r\n" payload += "#{params[:bill_params][:currency]}\r\n" payload += "#{params[:bill_params][:debtor][:address][:type]}\r\n" payload += "#{params[:bill_params][:debtor][:address][:name]}\r\n" payload += "#{params[:bill_params][:debtor][:address][:line1]}\r\n" payload += "#{params[:bill_params][:debtor][:address][:line2]}\r\n" payload += "#{params[:bill_params][:debtor][:address][:postal_code]}\r\n" payload += "#{params[:bill_params][:debtor][:address][:town]}\r\n" payload += "#{params[:bill_params][:debtor][:address][:country]}\r\n" payload += "#{params[:bill_params][:reference_type]}\r\n" payload += "#{params[:bill_params][:reference].delete(' ')}\r\n" payload += "#{params[:bill_params][:additionally_information]}\r\n" payload += "EPD\r\n" payload += "#{params[:bill_params][:bill_information_coded]}\r\n" payload += "#{params[:bill_params][:alternative_scheme_parameters]}\r\n" qrcode = RQRCode::QRCode.new(payload) png = qrcode.as_png( bit_depth: 1, border_modules: 0, color_mode: ChunkyPNG::COLOR_GRAYSCALE, color: 'black', file: nil, fill: 'white', module_px_size: 10, resize_exactly_to: false, resize_gte_to: false, size: 1024, ) swiss_cross = ChunkyPNG::Image.from_file(File.expand_path("#{File.dirname(__FILE__)}/../../web/assets/images/swiss_cross.png")) final_qr = png.compose!(swiss_cross, (png.width - swiss_cross.width) / 2, (png.height - swiss_cross.height) / 2) final_qr.save(qrcode_path) end