# pip install requests qrcode import sys from configparser import ConfigParser from argparse import ArgumentParser from datetime import datetime import hmac import hashlib import base64 import requests import qrcode def get_headers(userid: str, password: str, timestamp: str) -> dict: msg = '&'.join([str(userid), timestamp]) msg = msg.encode('utf-8') password = password.encode('utf-8') signature = hmac.new(password, msg=msg, digestmod=hashlib.sha256) signature = signature.digest() s = base64.encodebytes(signature) s = s.decode() s = s.replace('\n', '') return dict(userid=userid, signature=s, key=timestamp) image_file = 'qris.png' help_image = f'default {image_file}' pars = ArgumentParser() pars.add_argument('conf') pars.add_argument('--amount', type=int, required=True) pars.add_argument('--image-file', default=image_file, help=help_image) option = pars.parse_args(sys.argv[1:]) conf = ConfigParser() conf.read(option.conf) cf = dict(conf.items('main')) url = cf.get('url', 'https://devel.agratek.id/api/merchant') dt = datetime.now() seconds = int(dt.timestamp()) seconds = str(seconds) headers = get_headers(cf['user_id'], cf['key'], seconds) data = { "jsonrpc": "2.0", "id": 1, "method": "register", "params": { "data": { "time_stamp": seconds, "denom": "QRIS", "amount": option.amount, "invoice_no": "-", "description": "-", "fee": 0, "vat": 0, "req_dt": dt.strftime('%Y%m%d'), "req_tm": dt.strftime('%H%M%S'), "customer": { "name": "-", "phone": "-", "email": "-", "city": "-", "state": "-", "post_code": "-", "country": "Indonesia", "ip": "-", }, "deliver_to": { "name": "-", "phone": "-", "address": "-", "city": "-", "state": "-", "post_code": "-", "country": "Indonesia" }, } } } r = requests.post(url, headers=headers, json=data) if r.status_code != 200: print(r.text) print(f'HTTP Error {r.status_code}') sys.exit() result = r.json() if 'result' not in result: print(result) print('Tidak ada key result') sys.exit() result = result['result'] if result['code'] != 0: print(result) print(f'Ada kesalahan, code = {result["code"]}') sys.exit() data = result['qris']['qris'] print(data) qr = qrcode.QRCode(version=1, box_size=10, border=5) qr.add_data(data) qr.make(fit=True) img = qr.make_image(fill_color='black', back_color='white') img.save(option.image_file) print(f'Sudah disimpan di {option.image_file}')