#!/usr/bin/env python # -*- coding: utf-8 -*- """ 易收米支付SDK Web服务演示 这个演示展示了如何在Web应用中集成易收米支付: 1. 创建支付页面 2. 处理支付回调 3. 查询订单状态 运行前请安装依赖: pip install fastapi uvicorn jinja2 python-multipart 运行方式: python web_demo.py 然后访问: http://localhost:8000 """ import json import time import asyncio from fastapi import FastAPI, Request, Form, Response from fastapi.responses import HTMLResponse, JSONResponse from fastapi.templating import Jinja2Templates from pay import create_payment from query import query_order from notify import PaymentNotify # 创建FastAPI应用 app = FastAPI(title="易收米支付演示", description="易收米支付SDK Web演示") # 配置信息 - 请替换为你的真实配置 APPID = 'YSMcd16b45d' APPSECRET = '899850e778e8d2b53e4c4a4e88695688' # 回调地址 - 实际使用时应该是你的域名 NOTIFY_URL = "http://localhost:8000/notify" NOPAY_URL = "http://localhost:8000/cancel" CALLBACK_URL = "http://localhost:8000/success" # 模板引擎 templates = Jinja2Templates(directory="templates") @app.get("/", response_class=HTMLResponse) async def index(request: Request): """首页 - 支付表单""" html_content = """
{json.dumps(order_info, ensure_ascii=False, indent=2)}
🏠 返回首页
"""
return HTMLResponse(content=result_html)
else:
return JSONResponse(
content={"error": "订单不存在或查询失败"},
status_code=404
)
except Exception as e:
return JSONResponse(
content={"error": f"查询订单时出错: {str(e)}"},
status_code=500
)
@app.post("/notify")
async def payment_notify(request: Request):
"""支付成功回调处理"""
try:
# 获取请求数据
request_data = await request.body()
# 创建通知处理器
notify_handler = PaymentNotify(APPID, APPSECRET)
# 处理通知
success, message = await notify_handler.process(request_data)
if success:
# 这里应该更新数据库中的订单状态
print(f"💰 支付成功回调处理: {message}")
return Response(content=message)
else:
print(f"❌ 支付回调处理失败: {message}")
return JSONResponse(content={"error": message}, status_code=400)
except Exception as e:
print(f"❌ 处理支付回调时出错: {str(e)}")
return JSONResponse(content={"error": str(e)}, status_code=500)
@app.get("/success")
async def payment_success(request: Request):
"""支付成功页面"""
html_content = """
您的订单已支付成功,感谢您的购买!
您取消了支付,如有需要可以重新发起支付。
{json.dumps(order_info, ensure_ascii=False, indent=2)}
🏠 返回首页
"""
return HTMLResponse(content=html_content)
except:
pass
# 显示查询表单
html_content = """