update pay function
This commit is contained in:
106
app.py
106
app.py
@@ -1917,11 +1917,17 @@ def create_payment_order():
|
|||||||
|
|
||||||
# 创建订单
|
# 创建订单
|
||||||
try:
|
try:
|
||||||
|
# 获取原价和折扣金额
|
||||||
|
original_amount = price_result.get('original_amount', amount)
|
||||||
|
discount_amount = price_result.get('discount_amount', 0)
|
||||||
|
|
||||||
order = PaymentOrder(
|
order = PaymentOrder(
|
||||||
user_id=session['user_id'],
|
user_id=session['user_id'],
|
||||||
plan_name=plan_name,
|
plan_name=plan_name,
|
||||||
billing_cycle=billing_cycle,
|
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'):
|
if promo_code and price_result.get('promo_code'):
|
||||||
promo_obj = PromoCode.query.filter_by(code=promo_code.upper()).first()
|
promo_obj = PromoCode.query.filter_by(code=promo_code.upper()).first()
|
||||||
if promo_obj:
|
if promo_obj:
|
||||||
# 注意:需要在 PaymentOrder 表中添加 promo_code_id 字段
|
order.promo_code_id = promo_obj.id
|
||||||
# 如果没有该字段,这行会报错,可以注释掉
|
print(f"📦 订单关联优惠码: {promo_obj.code} (ID: {promo_obj.id})")
|
||||||
try:
|
|
||||||
order.promo_code_id = promo_obj.id
|
|
||||||
except:
|
|
||||||
pass # 如果表中没有该字段,跳过
|
|
||||||
|
|
||||||
db.session.add(order)
|
db.session.add(order)
|
||||||
db.session.commit()
|
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)
|
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({
|
return jsonify({
|
||||||
'success': True,
|
'success': True,
|
||||||
'data': order.to_dict(),
|
'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)
|
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:
|
try:
|
||||||
promo_usage = PromoCodeUsage(
|
# 检查是否已经记录过(防止重复)
|
||||||
promo_code_id=order.promo_code_id,
|
existing_usage = PromoCodeUsage.query.filter_by(order_id=order.id).first()
|
||||||
user_id=order.user_id,
|
if not existing_usage:
|
||||||
order_id=order.id,
|
promo_usage = PromoCodeUsage(
|
||||||
original_amount=order.original_amount if hasattr(order, 'original_amount') else order.amount,
|
promo_code_id=order.promo_code_id,
|
||||||
discount_amount=order.discount_amount if hasattr(order, 'discount_amount') else 0,
|
user_id=order.user_id,
|
||||||
final_amount=order.amount
|
order_id=order.id,
|
||||||
)
|
original_amount=order.original_amount or order.amount,
|
||||||
db.session.add(promo_usage)
|
discount_amount=order.discount_amount or 0,
|
||||||
|
final_amount=order.amount
|
||||||
|
)
|
||||||
|
db.session.add(promo_usage)
|
||||||
|
|
||||||
# 更新优惠码使用次数
|
# 更新优惠码使用次数
|
||||||
promo = PromoCode.query.get(order.promo_code_id)
|
promo = PromoCode.query.get(order.promo_code_id)
|
||||||
if promo:
|
if promo:
|
||||||
promo.current_uses = (promo.current_uses or 0) + 1
|
promo.current_uses = (promo.current_uses or 0) + 1
|
||||||
|
print(f"🎫 优惠码使用记录已创建: {promo.code}")
|
||||||
|
else:
|
||||||
|
print(f"ℹ️ 优惠码使用记录已存在,跳过")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"记录优惠码使用失败: {e}")
|
print(f"⚠️ 记录优惠码使用失败: {e}")
|
||||||
|
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
@@ -2254,6 +2285,37 @@ def wechat_payment_callback():
|
|||||||
else:
|
else:
|
||||||
print(f"⚠️ 订阅激活失败,但订单已标记为已支付")
|
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()
|
db.session.commit()
|
||||||
|
|
||||||
# 返回成功响应给微信
|
# 返回成功响应给微信
|
||||||
|
|||||||
Reference in New Issue
Block a user