更新支付和推荐系统逻辑,新增根据推荐配置计算支付金额的功能,确保用户享受优惠。调整绑定推荐关系的有效期读取方式,支持从配置中获取。优化提现流程,增加最低提现金额的配置读取,提升系统灵活性和用户体验。同时,更新管理界面中的支付设置链接,确保一致性。

This commit is contained in:
乘风
2026-02-05 18:45:28 +08:00
parent 19d0e625db
commit 1a95aee112
9 changed files with 858 additions and 24 deletions

View File

@@ -10,7 +10,7 @@
import { NextResponse } from 'next/server'
import crypto from 'crypto'
import { query } from '@/lib/db'
import { query, getConfig } from '@/lib/db'
// 微信支付配置 - 2026-01-25 更新
// 小程序支付绑定状态: 审核中申请单ID: 201554696918
@@ -101,8 +101,33 @@ export async function POST(request: Request) {
}, { status: 400 })
}
// === 根据推广配置计算好友优惠后的实际支付金额 ===
let finalAmount = amount
try {
// 读取推广/分销配置,获取好友优惠比例(如 5 表示 5%
const referralConfig = await getConfig('referral_config')
const userDiscount = referralConfig?.userDiscount ? Number(referralConfig.userDiscount) : 0
// 若存在有效的推荐码且配置了优惠比例,则给好友打折
if (userDiscount > 0 && body.referralCode) {
const discountRate = userDiscount / 100
const discounted = amount * (1 - discountRate)
// 保证至少 0.01 元,并保留两位小数
finalAmount = Math.max(0.01, Math.round(discounted * 100) / 100)
console.log('[MiniPay] 应用好友优惠:', {
originalAmount: amount,
discountPercent: userDiscount,
finalAmount,
referralCode: body.referralCode,
})
}
} catch (e) {
console.warn('[MiniPay] 读取 referral_config.userDiscount 失败,使用原价金额:', e)
finalAmount = amount
}
const orderSn = generateOrderSn()
const totalFee = Math.round(amount * 100) // 转换为分
const totalFee = Math.round(finalAmount * 100) // 转换为分(单位分)
const goodsBody = description || (productType === 'fullbook' ? '《一场Soul的创业实验》全书' : `章节购买-${productId}`)
// 获取客户端IP
@@ -207,7 +232,7 @@ export async function POST(request: Request) {
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW())
`, [
orderSn, orderSn, userId, openId,
productType, productId || 'fullbook', amount, goodsBody,
productType, productId || 'fullbook', finalAmount, goodsBody,
'created', null, referrerId, orderReferralCode
])
} catch (insertErr: any) {
@@ -224,7 +249,7 @@ export async function POST(request: Request) {
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW())
`, [
orderSn, orderSn, userId, openId,
productType, productId || 'fullbook', amount, goodsBody,
productType, productId || 'fullbook', finalAmount, goodsBody,
'created', null, referrerId
])
console.log('[MiniPay] 订单已插入(未含 referral_code请执行 scripts/add_orders_referral_code.py)')
@@ -238,7 +263,7 @@ export async function POST(request: Request) {
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW())
`, [
orderSn, orderSn, userId, openId,
productType, productId || 'fullbook', amount, goodsBody,
productType, productId || 'fullbook', finalAmount, goodsBody,
'created', null
])
console.log('[MiniPay] 订单已插入(未含 referrer_id/referral_code请执行迁移脚本)')
@@ -257,7 +282,8 @@ export async function POST(request: Request) {
userId,
productType,
productId,
amount
originalAmount: amount,
finalAmount,
})
} catch (dbError) {
console.error('[MiniPay] ❌ 插入订单失败:', dbError)