update pay function

This commit is contained in:
2025-11-25 16:20:39 +08:00
parent b9eddbe752
commit 6ad56b9882

106
app.py
View File

@@ -1917,11 +1917,17 @@ def create_payment_order():
# 创建订单
try:
# 获取原价和折扣金额
original_amount = price_result.get('original_amount', amount)
discount_amount = price_result.get('discount_amount', 0)
order = PaymentOrder(
user_id=session['user_id'],
plan_name=plan_name,
billing_cycle=billing_cycle,
amount=amount
amount=amount,
original_amount=original_amount,
discount_amount=discount_amount
)
# 添加订阅类型标记(用于前端展示)
@@ -1931,12 +1937,8 @@ def create_payment_order():
if promo_code and price_result.get('promo_code'):
promo_obj = PromoCode.query.filter_by(code=promo_code.upper()).first()
if promo_obj:
# 注意:需要在 PaymentOrder 表中添加 promo_code_id 字段
# 如果没有该字段,这行会报错,可以注释掉
try:
order.promo_code_id = promo_obj.id
except:
pass # 如果表中没有该字段,跳过
order.promo_code_id = promo_obj.id
print(f"📦 订单关联优惠码: {promo_obj.code} (ID: {promo_obj.id})")
db.session.add(order)
db.session.commit()
@@ -2058,6 +2060,29 @@ def check_order_status(order_id):
# 激活用户订阅
activate_user_subscription(order.user_id, order.plan_name, order.billing_cycle)
# 记录优惠码使用情况
if order.promo_code_id:
try:
existing_usage = PromoCodeUsage.query.filter_by(order_id=order.id).first()
if not existing_usage:
usage = PromoCodeUsage(
promo_code_id=order.promo_code_id,
user_id=order.user_id,
order_id=order.id,
original_amount=order.original_amount or order.amount,
discount_amount=order.discount_amount or 0,
final_amount=order.amount
)
db.session.add(usage)
promo = PromoCode.query.get(order.promo_code_id)
if promo:
promo.current_uses = (promo.current_uses or 0) + 1
print(f"🎫 优惠码使用记录已创建: {promo.code}")
except Exception as e:
print(f"⚠️ 记录优惠码使用失败: {e}")
db.session.commit()
return jsonify({
'success': True,
'data': order.to_dict(),
@@ -2136,24 +2161,30 @@ def force_update_order_status(order_id):
activate_user_subscription(order.user_id, order.plan_name, order.billing_cycle)
# 记录优惠码使用(如果使用了优惠码)
if hasattr(order, 'promo_code_id') and order.promo_code_id:
if order.promo_code_id:
try:
promo_usage = PromoCodeUsage(
promo_code_id=order.promo_code_id,
user_id=order.user_id,
order_id=order.id,
original_amount=order.original_amount if hasattr(order, 'original_amount') else order.amount,
discount_amount=order.discount_amount if hasattr(order, 'discount_amount') else 0,
final_amount=order.amount
)
db.session.add(promo_usage)
# 检查是否已经记录过(防止重复)
existing_usage = PromoCodeUsage.query.filter_by(order_id=order.id).first()
if not existing_usage:
promo_usage = PromoCodeUsage(
promo_code_id=order.promo_code_id,
user_id=order.user_id,
order_id=order.id,
original_amount=order.original_amount or order.amount,
discount_amount=order.discount_amount or 0,
final_amount=order.amount
)
db.session.add(promo_usage)
# 更新优惠码使用次数
promo = PromoCode.query.get(order.promo_code_id)
if promo:
promo.current_uses = (promo.current_uses or 0) + 1
# 更新优惠码使用次数
promo = PromoCode.query.get(order.promo_code_id)
if promo:
promo.current_uses = (promo.current_uses or 0) + 1
print(f"🎫 优惠码使用记录已创建: {promo.code}")
else:
print(f" 优惠码使用记录已存在,跳过")
except Exception as e:
print(f"记录优惠码使用失败: {e}")
print(f"⚠️ 记录优惠码使用失败: {e}")
db.session.commit()
@@ -2254,6 +2285,37 @@ def wechat_payment_callback():
else:
print(f"⚠️ 订阅激活失败,但订单已标记为已支付")
# 记录优惠码使用情况
if order.promo_code_id:
try:
# 检查是否已经记录过(防止重复)
existing_usage = PromoCodeUsage.query.filter_by(
order_id=order.id
).first()
if not existing_usage:
# 创建优惠码使用记录
usage = PromoCodeUsage(
promo_code_id=order.promo_code_id,
user_id=order.user_id,
order_id=order.id,
original_amount=order.original_amount or order.amount,
discount_amount=order.discount_amount or 0,
final_amount=order.amount
)
db.session.add(usage)
# 更新优惠码使用次数
promo = PromoCode.query.get(order.promo_code_id)
if promo:
promo.current_uses = (promo.current_uses or 0) + 1
print(f"🎫 优惠码使用记录已创建: {promo.code}, 当前使用次数: {promo.current_uses}")
else:
print(f" 优惠码使用记录已存在,跳过")
except Exception as e:
print(f"⚠️ 记录优惠码使用失败: {e}")
# 不影响主流程,继续执行
db.session.commit()
# 返回成功响应给微信