John Smith
2 years ago
commit
45bf8e247f
1 changed files with 56 additions and 0 deletions
@ -0,0 +1,56 @@
@@ -0,0 +1,56 @@
|
||||
# coding: utf |
||||
|
||||
from Crypto.Hash import SHA256 |
||||
from Crypto.PublicKey import RSA |
||||
from Crypto.Signature import PKCS1_v1_5 |
||||
|
||||
import pyqrcode |
||||
import qrcode |
||||
|
||||
import base64 |
||||
import json |
||||
|
||||
PRIVATE_KEY_FILE = "domain.key" |
||||
|
||||
BOX_SIZE = 5 |
||||
BORDER = 2 |
||||
|
||||
|
||||
def sign(message, private_key_str): |
||||
priv_key = RSA.importKey(private_key_str) |
||||
h = SHA256.new(message.encode("utf-8")) |
||||
signature = PKCS1_v1_5.new(priv_key).sign(h) |
||||
result = base64.b64encode(signature).decode() |
||||
return result |
||||
|
||||
|
||||
def create_qr(orderId, skuList, output_filename): |
||||
""" |
||||
Create a QR code for an order and write it as a PNG. |
||||
Params: |
||||
* orderId - order identifier. |
||||
* skuList - list of SKUs of the order. |
||||
* output_filename: the name of the output file. |
||||
""" |
||||
with open(PRIVATE_KEY_FILE, "r") as file: |
||||
key = file.read() |
||||
|
||||
|
||||
# dump to str to avoid ordering issues when verifying signature |
||||
order = json.dumps({"i": orderId, "sk": skuList}) |
||||
signed_order = sign(order, key) |
||||
data = {"o": order, "s": signed_order} |
||||
|
||||
data_str = json.dumps(data) |
||||
|
||||
#data_str_compressed = zlib.compress(data_str) |
||||
|
||||
qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=BOX_SIZE, border=BORDER) |
||||
qr.add_data(data_str) |
||||
qr.make(fit=True) |
||||
|
||||
img = qr.make_image(fill_color="black", back_color="white") |
||||
img.save(output_filename) |
||||
|
||||
|
||||
create_qr("1234-5678", ["001", "002", "003", "004", "005", "006", "007", "008", "009"], "output.png") |
Loading…
Reference in new issue