更新支付和推荐系统逻辑,新增根据推荐配置计算支付金额的功能,确保用户享受优惠。调整绑定推荐关系的有效期读取方式,支持从配置中获取。优化提现流程,增加最低提现金额的配置读取,提升系统灵活性和用户体验。同时,更新管理界面中的支付设置链接,确保一致性。
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user