fix: 修复分销数据不显示和用户ID唯一性问题

1. 分销数据修复:
   - 添加访问记录API,即使未登录也记录访问
   - 登录成功后自动绑定推荐码
   - 在链接访问时立即记录访问统计

2. 支付商品名称修复:
   - 支付时显示完整章节名称而非仅ID
   - 格式:章节9.12-美业整合:一个人的公司如何月入十万

3. 用户ID唯一性修复:
   - 移除mockLogin,必须使用真实微信登录
   - 用户ID使用openId作为唯一标识
   - 同一微信用户每次登录都是同一ID
This commit is contained in:
卡若
2026-01-29 11:11:58 +08:00
parent 6989ade3e2
commit 395501e961
3 changed files with 172 additions and 48 deletions

View File

@@ -0,0 +1,100 @@
/**
* 推荐访问记录API
* 用于统计「通过链接进的人数」
* 不需要用户登录即可记录
*/
import { NextRequest, NextResponse } from 'next/server'
import { query } from '@/lib/db'
/**
* POST - 记录推荐访问
*/
export async function POST(request: NextRequest) {
try {
const body = await request.json()
const { referralCode, visitorOpenId, visitorId, source, page } = body
if (!referralCode) {
return NextResponse.json({
success: false,
error: '推荐码不能为空'
}, { status: 400 })
}
// 查找推荐人
const referrers = await query(
'SELECT id FROM users WHERE referral_code = ?',
[referralCode]
) as any[]
if (referrers.length === 0) {
return NextResponse.json({
success: false,
error: '推荐码无效'
}, { status: 400 })
}
const referrerId = referrers[0].id
// 记录访问(允许重复访问记录,用于统计总访问次数)
try {
await query(`
INSERT INTO referral_visits (
referrer_id, visitor_id, visitor_openid, source, page, created_at
) VALUES (?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
`, [
referrerId,
visitorId || null,
visitorOpenId || null,
source || 'miniprogram',
page || ''
])
console.log(`[Referral Visit] 记录访问: 推荐人=${referrerId}, 访客openId=${visitorOpenId?.slice(0,10) || 'unknown'}`)
} catch (insertError) {
// 表可能不存在,尝试创建
console.log('[Referral Visit] 插入失败,尝试创建表...')
await query(`
CREATE TABLE IF NOT EXISTS referral_visits (
id INT AUTO_INCREMENT PRIMARY KEY,
referrer_id VARCHAR(50) NOT NULL COMMENT '推广者ID',
visitor_id VARCHAR(50) COMMENT '访客ID可能为空',
visitor_openid VARCHAR(100) COMMENT '访客openId',
source VARCHAR(50) DEFAULT 'miniprogram' COMMENT '来源miniprogram/web/share',
page VARCHAR(200) COMMENT '落地页路径',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_referrer_id (referrer_id),
INDEX idx_visitor_id (visitor_id),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
`)
// 重试插入
await query(`
INSERT INTO referral_visits (
referrer_id, visitor_id, visitor_openid, source, page, created_at
) VALUES (?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
`, [
referrerId,
visitorId || null,
visitorOpenId || null,
source || 'miniprogram',
page || ''
])
}
return NextResponse.json({
success: true,
message: '访问已记录'
})
} catch (error) {
console.error('[Referral Visit] 错误:', error)
// 即使出错也返回成功,不影响用户体验
return NextResponse.json({
success: true,
message: '已处理'
})
}
}