#!/usr/bin/env python # -*- coding: utf-8 -*- """ 隐私支付二维码生成器 生成微信扫码支付二维码,隐藏商户和商品信息 """ import asyncio import time import qrcode from pay import create_payment async def create_private_payment(): """创建隐私支付二维码""" print("微信扫码支付 - 隐私模式") print("=" * 40) # 配置信息 appid = 'YSMcd16b45d' appsecret = '899850e778e8d2b53e4c4a4e88695688' # 生成订单号 order_id = f"pay_{int(time.time())}" print(f"订单号: {order_id}") print(f"金额: 0.01元") print() print("正在生成支付二维码...") try: # 创建扫码支付订单 - 使用简化的描述 pay_url = await create_payment( appid=appid, appsecret=appsecret, order_id=order_id, description="支付", # 简化商品描述 amount=1, # 1分钱 notify_url="http://localhost/notify", # 简化回调地址 nopay_url="http://localhost/cancel", callback_url="http://localhost/success", pay_type=2 # 微信扫码支付 ) if pay_url: print("支付二维码生成成功!") print() # 生成二维码 qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=8, # 稍微小一点的二维码 border=2, ) qr.add_data(pay_url) qr.make(fit=True) # 创建二维码图片 qr_img = qr.make_image(fill_color="black", back_color="white") # 保存二维码 qr_filename = f"private_qr_{order_id}.png" qr_img.save(qr_filename) print(f"二维码已生成: {qr_filename}") print() print("使用方法:") print("1. 用微信扫描生成的二维码") print("2. 完成0.01元支付") print("3. 支付页面将显示最小化的商户信息") print() print("隐私设置:") print("- 商品描述: 仅显示'支付'") print("- 商户信息: 使用平台默认设置") print("- 订单金额: 0.01元") return order_id, pay_url, qr_filename else: print("支付订单创建失败") return None, None, None except Exception as e: print(f"创建支付时出错: {str(e)}") return None, None, None async def create_custom_payment(): """创建自定义支付二维码""" print("\n" + "=" * 40) print("自定义支付设置") print("=" * 40) # 让用户自定义设置 description_options = { "1": "支付", "2": "订单支付", "3": "在线支付", "4": "服务费用", "5": "充值" } print("选择商品描述:") for key, value in description_options.items(): print(f"{key}. {value}") # 由于是演示,我们使用默认选项 choice = "1" # 默认选择"支付" description = description_options.get(choice, "支付") # 配置信息 appid = 'YSMcd16b45d' appsecret = '899850e778e8d2b53e4c4a4e88695688' # 生成订单号 order_id = f"custom_{int(time.time())}" print(f"\n订单设置:") print(f"订单号: {order_id}") print(f"描述: {description}") print(f"金额: 0.01元") print("\n正在生成支付二维码...") try: # 创建支付订单 pay_url = await create_payment( appid=appid, appsecret=appsecret, order_id=order_id, description=description, amount=1, notify_url="http://localhost/notify", nopay_url="http://localhost/cancel", callback_url="http://localhost/success", pay_type=2 ) if pay_url: # 生成二维码 qr = qrcode.QRCode(version=1, box_size=8, border=2) qr.add_data(pay_url) qr.make(fit=True) qr_img = qr.make_image(fill_color="black", back_color="white") # 保存二维码 qr_filename = f"custom_qr_{order_id}.png" qr_img.save(qr_filename) print(f"自定义支付二维码已生成: {qr_filename}") return order_id, pay_url, qr_filename else: print("支付订单创建失败") return None, None, None except Exception as e: print(f"创建支付时出错: {str(e)}") return None, None, None async def batch_create_payments(): """批量创建不同类型的支付二维码""" print("批量生成支付二维码") print("=" * 40) payment_types = [ ("支付", "simple"), ("订单", "order"), ("充值", "recharge"), ("服务", "service") ] appid = 'YSMcd16b45d' appsecret = '899850e778e8d2b53e4c4a4e88695688' created_qrs = [] for desc, type_name in payment_types: order_id = f"{type_name}_{int(time.time())}" try: pay_url = await create_payment( appid=appid, appsecret=appsecret, order_id=order_id, description=desc, amount=1, notify_url="http://localhost/notify", nopay_url="http://localhost/cancel", callback_url="http://localhost/success", pay_type=2 ) if pay_url: # 生成二维码 qr = qrcode.QRCode(version=1, box_size=6, border=2) qr.add_data(pay_url) qr.make(fit=True) qr_img = qr.make_image(fill_color="black", back_color="white") qr_filename = f"{type_name}_qr_{order_id}.png" qr_img.save(qr_filename) created_qrs.append({ 'order_id': order_id, 'description': desc, 'filename': qr_filename, 'url': pay_url }) print(f"✓ {desc} - {qr_filename}") except Exception as e: print(f"✗ 创建{desc}支付失败: {str(e)}") print(f"\n成功生成 {len(created_qrs)} 个支付二维码") return created_qrs async def main(): """主函数""" print("微信支付二维码生成器 - 隐私版") print("支持隐藏商户信息和自定义商品描述") print() # 选择模式 print("选择生成模式:") print("1. 隐私模式 - 最小化信息显示") print("2. 自定义模式 - 自定义商品描述") print("3. 批量模式 - 生成多种类型二维码") # 默认使用隐私模式进行演示 mode = "1" if mode == "1": await create_private_payment() elif mode == "2": await create_custom_payment() elif mode == "3": await batch_create_payments() print("\n" + "=" * 40) print("提示:") print("- 所有二维码都已保存到当前目录") print("- 使用微信扫描任意二维码进行支付测试") print("- 支付金额均为0.01元") print("- 商户信息已最小化显示") if __name__ == "__main__": asyncio.run(main())