1.qrcode 生成
def qrcode_gen(version=1, box_size=10, border=4, words=None, save_name=None):
"""
将参数words生成文件名为save_name的二维码
:param version: 值为1~40的整数,控制二维码的大小(最小值是1,是个12×12的矩阵)。 如果想让程序自动确定,将值设置为 None 并使用 fit 参数即可。
:param box_size: 控制二维码中每个小格子包含的像素数。
:param border: 控制边框(二维码与图片边界的距离)包含的格子数(默认为4,是相关标准规定的最小值)
:param words: 生成二维码的内容
:param save_name: 生成二维码后的文件名
error_correction:控制纠错水平,范围是ERROR_CORRECT_L (L、M、Q、H),从左到右依次升高
"""
qr = qrcode.QRCode(
version=version,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=box_size,
border=border,
)
try:
words = "https://www.12dms.com" if words is None else words
save_name = "../static/img/" + "qrcode_" + str(time.ctime()) + ".png" if save_name is None else save_name
print(">>二维码图片名称:{}".format(save_name))
qr.add_data(words)
qr.make()
img = qr.make_image()
img.save(save_name)
except Exception as e:
raise ManagerParamsError("103")
2.微信支付code_url 获取 生成二维码
class WxPayManager(object):
APP_ID = WX_APP_ID
MCH_ID = WX_MCH_ID
CREATE_IP = WX_CREATE_IP
NOTIFY_URL = WX_NOTIFY_URL
API_KEY = WX_API_KEY
UFDODER_URL = WX_UFDODER_URL
def __init__(self):
pass
@staticmethod
def get_sign(data_dict, key):
"""
签名函数
:param data_dict: 需要签名的参数,格式为字典
:param key: 密钥 ,即上面的API_KEY
:return: 字符串
"""
params_list = sorted(data_dict.items(), key=lambda e: e[0], reverse=False)
params_str = "&".join(u"{}={}".format(k, v) for k, v in params_list) + '&key=' + key
md5 = hashlib.md5()
md5.update(params_str.encode('utf-8'))
sign = md5.hexdigest().upper()
return sign
@staticmethod
def order_num(mobile):
"""
生成扫码付款订单号
:param phone: 手机号
:return:
"""
local_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
result = mobile + 'T' + local_time + WxPayManager.random_str(5)
return result
@staticmethod
def random_str(randomlength=8):
"""
生成随机字符串
:param randomlength: 字符串长度
:return:
"""
strs = ''
chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
length = len(chars) - 1
random = Random()
for i in range(randomlength):
strs += chars[random.randint(0, length)]
return strs
@staticmethod
def trans_dict_to_xml(data_dict):
"""
定义字典转XML的函数
:param data_dict:
:return:
"""
data_xml = []
for k in sorted(data_dict.keys()):
v = data_dict.get(k)
if k == 'detail' and not v.startswith('<![CDATA['):
v = '<![CDATA[{}]]>'.format(v)
data_xml.append('<{key}>{value}</{key}>'.format(key=k, value=v))
return '<xml>{}</xml>'.format(''.join(data_xml))
@staticmethod
def trans_xml_to_dict(data_xml):
"""
定义XML转字典的函数
:param data_xml:
:return:
"""
soup = BeautifulSoup(data_xml, features='xml')
xml = soup.find('xml')
if not xml:
return {}
data_dict = dict([(item.name, item.text) for item in xml.find_all()])
return data_dict
@staticmethod
def qrcode_gen(version=1, box_size=10, border=4, words=None, save_name=None):
"""
将参数words生成文件名为save_name的二维码
:param version: 值为1~40的整数,控制二维码的大小(最小值是1,是个12×12的矩阵)。 如果想让程序自动确定,将值设置为 None 并使用 fit 参数即可。
:param box_size: 控制二维码中每个小格子包含的像素数。
:param border: 控制边框(二维码与图片边界的距离)包含的格子数(默认为4,是相关标准规定的最小值)
:param words: 生成二维码的内容
:param save_name: 生成二维码后的文件名
error_correction:控制纠错水平,范围是ERROR_CORRECT_L (L、M、Q、H),从左到右依次升高
"""
qr = qrcode.QRCode(
version=version,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=box_size,
border=border,
)
try:
words = "https://www.12dms.com" if words is None else words
save_name = "../static/img/" + "qrcode_" + str(time.ctime()) + ".png" if save_name is None else save_name
print(">>二维码图片名称:{}".format(save_name))
qr.add_data(words)
qr.make()
img = qr.make_image()
img.save(save_name)
except Exception as e:
raise ManagerParamsError("103")
@staticmethod
async def wxpay(total_fee, order_id):
"""
发起微信支付请求
:param total_fee: 支付总金额
:param order_id: 自定义订单ID
:return: 微信支付请求响应 字典格式数据
"""
nonce_str = WxPayManager.random_str()
total_fee = total_fee
total_fee = 1
params = {
'appid': WX_APP_ID,
'mch_id': WX_MCH_ID,
'nonce_str': nonce_str,
'out_trade_no': order_id,
'total_fee': total_fee,
'spbill_create_ip': WX_CREATE_IP,
'notify_url': WX_NOTIFY_URL,
'body': '十二维度科技有限公司',
'detail': '商品--支付测试',
'trade_type': 'NATIVE',
}
sign = WxPayManager.get_sign(params, WX_API_KEY)
params['sign'] = sign
print(">>获取签名后的微信支付请求参数:{}".format(params))
xml = WxPayManager.trans_dict_to_xml(params)
try:
client = tornado.httpclient.AsyncHTTPClient()
response = await client.fetch(WX_UFDODER_URL, method='POST', body=xml)
resp = response.body.decode()
print(">>发起微信支付请求 响应结果:{}".format(resp))
data_dict = WxPayManager.trans_xml_to_dict(response.body)
return data_dict
except Exception as e:
print("发起微信支付错误:{}".format(e))
3.资料-qrcode-具体案例(简单生成, 自定义图标,更改颜色)
Python学习笔记8-利用qrcode模块生成普通二维码和带图标的二维码: https://blog.csdn.net/weixin_42703239/article/details/104349417
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步