n
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||

|
||||
|
||||
## 📖 项目简介
|
||||
|
||||
npm run dev:weapp
|
||||
Quant Speed Market 是一个基于现代技术栈构建的综合性平台,旨在为用户提供从商品购买、技术交流到 AI 工具使用的全方位体验。项目采用前后端分离架构,包含 Django 后端 API、React Web 管理端以及 Taro 微信小程序客户端。
|
||||
|
||||
## ✨ 功能特性
|
||||
@@ -30,7 +30,6 @@ Quant Speed Market 是一个基于现代技术栈构建的综合性平台,旨
|
||||
- **Core**: React 19 + Vite 7
|
||||
- **UI Library**: Ant Design 6
|
||||
- **3D Engine**: Three.js + @react-three/fiber
|
||||
- **State Management**: React Context
|
||||
- **Routing**: React Router v7
|
||||
|
||||
### Miniprogram (小程序)
|
||||
|
||||
Binary file not shown.
@@ -41,7 +41,7 @@ def patched_request(self, *args, **kwargs):
|
||||
return original_request(self, *args, **kwargs)
|
||||
Core.request = patched_request
|
||||
|
||||
def get_wechat_pay_client():
|
||||
def get_wechat_pay_client(pay_type=WeChatPayType.NATIVE):
|
||||
"""
|
||||
获取微信支付 V3 客户端实例的辅助函数
|
||||
"""
|
||||
@@ -108,7 +108,7 @@ def get_wechat_pay_client():
|
||||
|
||||
try:
|
||||
wxpay = WeChatPay(
|
||||
wechatpay_type=WeChatPayType.NATIVE,
|
||||
wechatpay_type=pay_type,
|
||||
mchid=mch_id,
|
||||
private_key=private_key,
|
||||
cert_serial_no=serial_no,
|
||||
@@ -699,7 +699,7 @@ class OrderViewSet(viewsets.ModelViewSet):
|
||||
return Response({'error': '支付系统维护中'}, status=status.HTTP_503_SERVICE_UNAVAILABLE)
|
||||
|
||||
# 初始化支付客户端
|
||||
wxpay, error_msg = get_wechat_pay_client()
|
||||
wxpay, error_msg = get_wechat_pay_client(pay_type=WeChatPayType.JSAPI)
|
||||
if not wxpay:
|
||||
return Response({'error': error_msg}, status=500)
|
||||
|
||||
@@ -717,6 +717,12 @@ class OrderViewSet(viewsets.ModelViewSet):
|
||||
else:
|
||||
description = f"支付订单 {order.id}"
|
||||
|
||||
print(f"准备发起微信支付(小程序):")
|
||||
print(f" OutTradeNo: {out_trade_no}")
|
||||
print(f" Amount: {amount_in_cents} 分")
|
||||
print(f" OpenID: {user.openid}")
|
||||
print(f" NotifyURL: {wechat_config.notify_url}")
|
||||
|
||||
# 统一下单 (JSAPI)
|
||||
code, message = wxpay.pay(
|
||||
description=description,
|
||||
@@ -726,6 +732,8 @@ class OrderViewSet(viewsets.ModelViewSet):
|
||||
notify_url=wechat_config.notify_url
|
||||
)
|
||||
|
||||
print(f"微信支付响应: Code={code}, Message={message}")
|
||||
|
||||
result = json.loads(message)
|
||||
if code in range(200, 300):
|
||||
prepay_id = result.get('prepay_id')
|
||||
|
||||
@@ -47,22 +47,23 @@ const ActivityDetail = () => {
|
||||
refetchOnMount: 'always', // Force refetch on mount
|
||||
});
|
||||
|
||||
//// /
|
||||
// Force a refresh if needed (as requested by user)
|
||||
// useEffect(() => {
|
||||
// // 1. Force React Query refetch
|
||||
// refetch();
|
||||
useEffect(() => {
|
||||
// 1. Force React Query refetch
|
||||
refetch();
|
||||
|
||||
// // 2. Hard refresh logic after 1 second delay
|
||||
// const timer = setTimeout(() => {
|
||||
// const hasRefreshedKey = `has_refreshed_activity_${id}`;
|
||||
// if (!sessionStorage.getItem(hasRefreshedKey)) {
|
||||
// sessionStorage.setItem(hasRefreshedKey, 'true');
|
||||
// window.location.reload();
|
||||
// }
|
||||
// }, 0);
|
||||
// 2. Hard refresh logic after 1 second delay
|
||||
const timer = setTimeout(() => {
|
||||
const hasRefreshedKey = `has_refreshed_activity_${id}`;
|
||||
if (!sessionStorage.getItem(hasRefreshedKey)) {
|
||||
sessionStorage.setItem(hasRefreshedKey, 'true');
|
||||
window.location.reload();
|
||||
}
|
||||
}, 500);
|
||||
|
||||
// return () => clearTimeout(timer);
|
||||
// }, [id, refetch]);
|
||||
return () => clearTimeout(timer);
|
||||
}, [id, refetch]);
|
||||
|
||||
const signUpMutation = useMutation({
|
||||
mutationFn: (values) => signUpActivity(id, { signup_info: values || {} }),
|
||||
|
||||
Reference in New Issue
Block a user