#!/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())