chore: initialize tuhui repository
This commit is contained in:
153
backend/app/ysm_sdk/tmp/qr_payment.py
Normal file
153
backend/app/ysm_sdk/tmp/qr_payment.py
Normal file
@@ -0,0 +1,153 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
易收米支付二维码演示
|
||||
|
||||
生成微信扫码支付二维码,真实支付场景演示
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import time
|
||||
import qrcode
|
||||
from io import BytesIO
|
||||
from PIL import Image
|
||||
from pay import create_payment
|
||||
|
||||
async def create_qr_payment():
|
||||
"""创建二维码支付"""
|
||||
print("易收米微信扫码支付演示")
|
||||
print("=" * 50)
|
||||
|
||||
# 配置信息
|
||||
appid = 'YSMcd16b45d'
|
||||
appsecret = '899850e778e8d2b53e4c4a4e88695688'
|
||||
|
||||
# 生成订单号
|
||||
order_id = f"qr_{int(time.time())}"
|
||||
|
||||
print(f"订单号: {order_id}")
|
||||
print(f"商品: 测试商品 - 数据线")
|
||||
print(f"金额: 0.01元")
|
||||
print(f"支付方式: 微信扫码支付")
|
||||
print()
|
||||
print("正在生成支付二维码...")
|
||||
|
||||
try:
|
||||
# 创建扫码支付订单 - 使用 pay_type=2
|
||||
pay_url = await create_payment(
|
||||
appid=appid,
|
||||
appsecret=appsecret,
|
||||
order_id=order_id,
|
||||
description="测试商品 - 数据线",
|
||||
amount=1, # 1分钱
|
||||
notify_url="http://your-domain.com/notify",
|
||||
nopay_url="http://your-domain.com/cancel",
|
||||
callback_url="http://your-domain.com/success",
|
||||
pay_type=2 # 微信扫码支付
|
||||
)
|
||||
|
||||
if pay_url:
|
||||
print("支付订单创建成功!")
|
||||
print(f"支付链接: {pay_url}")
|
||||
print()
|
||||
|
||||
# 生成二维码
|
||||
qr = qrcode.QRCode(
|
||||
version=1,
|
||||
error_correction=qrcode.constants.ERROR_CORRECT_L,
|
||||
box_size=10,
|
||||
border=4,
|
||||
)
|
||||
qr.add_data(pay_url)
|
||||
qr.make(fit=True)
|
||||
|
||||
# 创建二维码图片
|
||||
qr_img = qr.make_image(fill_color="black", back_color="white")
|
||||
|
||||
# 保存二维码
|
||||
qr_filename = f"payment_qr_{order_id}.png"
|
||||
qr_img.save(qr_filename)
|
||||
|
||||
print(f"二维码已生成: {qr_filename}")
|
||||
print()
|
||||
print("使用方法:")
|
||||
print("1. 打开微信扫一扫")
|
||||
print(f"2. 扫描生成的二维码文件: {qr_filename}")
|
||||
print("3. 完成0.01元支付")
|
||||
print("4. 支付完成后可以查询订单状态")
|
||||
print()
|
||||
print("=" * 50)
|
||||
print("二维码图片已保存到当前目录")
|
||||
print("请使用微信扫描二维码文件进行支付")
|
||||
print("=" * 50)
|
||||
|
||||
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 check_payment_status(order_id):
|
||||
"""检查支付状态"""
|
||||
if not order_id:
|
||||
return
|
||||
|
||||
print(f"\n检查订单状态: {order_id}")
|
||||
|
||||
from query import query_order
|
||||
|
||||
try:
|
||||
# 查询订单状态
|
||||
order_info = await query_order(
|
||||
appid='YSMcd16b45d',
|
||||
mch_orderid=order_id
|
||||
)
|
||||
|
||||
if order_info:
|
||||
state = order_info.get('state', 'UNKNOWN')
|
||||
|
||||
if state == 'SUCCESS':
|
||||
print("支付状态: 支付成功! 🎉")
|
||||
elif state == 'NOTPAY':
|
||||
print("支付状态: 等待支付...")
|
||||
elif 'code' in order_info and order_info.get('code') == 'ORDER_NOT_EXIST':
|
||||
print("支付状态: 订单查询中...")
|
||||
else:
|
||||
print(f"支付状态: {state}")
|
||||
|
||||
print(f"详细信息: {order_info}")
|
||||
else:
|
||||
print("查询失败")
|
||||
|
||||
except Exception as e:
|
||||
print(f"查询订单时出错: {str(e)}")
|
||||
|
||||
async def main():
|
||||
"""主函数"""
|
||||
# 生成支付二维码
|
||||
order_id, pay_url, qr_file = await create_qr_payment()
|
||||
|
||||
if order_id:
|
||||
# 等待用户扫码支付
|
||||
input("\n按回车键查询支付状态...")
|
||||
|
||||
# 检查支付状态
|
||||
await check_payment_status(order_id)
|
||||
|
||||
# 可以持续查询
|
||||
while True:
|
||||
check_again = input("\n是否再次查询订单状态? (y/n): ")
|
||||
if check_again.lower() == 'y':
|
||||
await check_payment_status(order_id)
|
||||
else:
|
||||
break
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("请确保已安装依赖: pip install qrcode[pil]")
|
||||
print()
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user