主要更新: 1. 按H5网页端完全重构匹配功能(match页面) - 4种匹配类型: 创业合伙/资源对接/导师顾问/团队招募 - 资源对接等类型弹出手机号/微信号输入框 - 去掉重新匹配按钮,改为返回按钮 2. 修复所有卡片对齐和宽度问题 - 目录页附录卡片居中 - 首页阅读进度卡片满宽度 - 我的页面菜单卡片对齐 - 推广中心分享卡片统一宽度 3. 修复目录页图标和文字对齐 - section-icon固定40rpx宽高 - section-title与图标垂直居中 4. 更新真实完整文章标题(62篇) - 从book目录读取真实markdown文件名 - 替换之前的简化标题 5. 新增文章数据API - /api/db/chapters - 获取完整书籍结构 - 支持按ID获取单篇文章内容
75 lines
2.2 KiB
TypeScript
75 lines
2.2 KiB
TypeScript
/**
|
|
* 支付宝回调通知 API
|
|
* 基于 Universal_Payment_Module v4.0 设计
|
|
*
|
|
* POST /api/payment/alipay/notify
|
|
*/
|
|
|
|
import { type NextRequest, NextResponse } from "next/server"
|
|
import { PaymentFactory, SignatureError } from "@/lib/payment"
|
|
|
|
// 确保网关已注册
|
|
import "@/lib/payment/alipay"
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
// 获取表单数据
|
|
const formData = await request.formData()
|
|
const params: Record<string, string> = {}
|
|
|
|
formData.forEach((value, key) => {
|
|
params[key] = value.toString()
|
|
})
|
|
|
|
console.log("[Alipay Notify] 收到回调:", {
|
|
out_trade_no: params.out_trade_no,
|
|
trade_status: params.trade_status,
|
|
total_amount: params.total_amount,
|
|
})
|
|
|
|
// 创建支付宝网关
|
|
const gateway = PaymentFactory.create("alipay_wap")
|
|
|
|
try {
|
|
// 解析并验证回调数据
|
|
const notifyResult = gateway.parseNotify(params)
|
|
|
|
if (notifyResult.status === "paid") {
|
|
console.log("[Alipay Notify] 支付成功:", {
|
|
tradeSn: notifyResult.tradeSn,
|
|
platformSn: notifyResult.platformSn,
|
|
amount: notifyResult.payAmount / 100, // 转换为元
|
|
payTime: notifyResult.payTime,
|
|
})
|
|
|
|
// TODO: 更新订单状态
|
|
// await OrderService.updateStatus(notifyResult.tradeSn, 'paid')
|
|
|
|
// TODO: 解锁内容/开通权限
|
|
// await ContentService.unlockForUser(notifyResult.attach?.userId, notifyResult.attach?.productId)
|
|
|
|
// TODO: 分配佣金(如果有推荐人)
|
|
// if (notifyResult.attach?.referralCode) {
|
|
// await ReferralService.distributeCommission(notifyResult)
|
|
// }
|
|
} else {
|
|
console.log("[Alipay Notify] 非支付成功状态:", notifyResult.status)
|
|
}
|
|
|
|
// 返回成功响应
|
|
return new NextResponse(gateway.successResponse())
|
|
|
|
} catch (error) {
|
|
if (error instanceof SignatureError) {
|
|
console.error("[Alipay Notify] 签名验证失败")
|
|
return new NextResponse(gateway.failResponse())
|
|
}
|
|
throw error
|
|
}
|
|
|
|
} catch (error) {
|
|
console.error("[Alipay Notify] 处理失败:", error)
|
|
return new NextResponse("fail")
|
|
}
|
|
}
|