From a5527e831287fc517c5660ced0e51758c2a6a7d8 Mon Sep 17 00:00:00 2001 From: jeremygan2021 Date: Sat, 14 Feb 2026 12:27:49 +0800 Subject: [PATCH] pay --- backend/shop/views.py | 14 +++++++++++--- miniprogram/src/api/index.ts | 1 + miniprogram/src/pages/order/payment.tsx | 10 +++++++++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/backend/shop/views.py b/backend/shop/views.py index f965e74..ba078cc 100644 --- a/backend/shop/views.py +++ b/backend/shop/views.py @@ -741,12 +741,20 @@ class OrderViewSet(viewsets.ModelViewSet): description = f"报名 {order.course.title}" else: description = f"支付订单 {order.id}" - + + # 强制修正回调地址为正确的后端接口地址 + # 用户配置可能是 /pay (前端页面),我们需要的是 /api/finish/ (后端回调接口) + current_notify = wechat_config.notify_url + if 'quant-speed.com' in current_notify: + notify_url = "https://market.quant-speed.com/api/finish/" + else: + notify_url = current_notify # Fallback + 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}") + print(f" NotifyURL: {notify_url}") # 统一下单 (JSAPI) code, message = wxpay.pay( @@ -754,7 +762,7 @@ class OrderViewSet(viewsets.ModelViewSet): out_trade_no=out_trade_no, amount={'total': amount_in_cents, 'currency': 'CNY'}, payer={'openid': user.openid}, # 小程序支付必须传 openid - notify_url=wechat_config.notify_url + notify_url=notify_url ) print(f"微信支付响应: Code={code}, Message={message}") diff --git a/miniprogram/src/api/index.ts b/miniprogram/src/api/index.ts index 020843d..48f2908 100644 --- a/miniprogram/src/api/index.ts +++ b/miniprogram/src/api/index.ts @@ -9,6 +9,7 @@ export const createOrder = (data: any) => request({ url: '/orders/', method: 'PO export const getOrder = (id: number) => request({ url: `/orders/${id}/` }) export const getMyOrders = () => request({ url: '/orders/' }) export const prepayMiniprogram = (orderId: number) => request({ url: `/orders/${orderId}/prepay_miniprogram/`, method: 'POST' }) +export const queryOrderStatus = (orderId: number) => request({ url: `/orders/${orderId}/query_status/` }) // AI Services export const getServices = () => request({ url: '/services/' }) diff --git a/miniprogram/src/pages/order/payment.tsx b/miniprogram/src/pages/order/payment.tsx index a15bdc6..f5777bf 100644 --- a/miniprogram/src/pages/order/payment.tsx +++ b/miniprogram/src/pages/order/payment.tsx @@ -1,7 +1,7 @@ import { View, Text, Button } from '@tarojs/components' import Taro, { useRouter, useLoad } from '@tarojs/taro' import { useState } from 'react' -import { getOrder, prepayMiniprogram } from '../../api' +import { getOrder, prepayMiniprogram, queryOrderStatus } from '../../api' import './payment.scss' export default function Payment() { @@ -36,6 +36,14 @@ export default function Payment() { }) Taro.showToast({ title: '支付成功', icon: 'success' }) + + // 主动查询订单状态,确保后台已更新 + try { + await queryOrderStatus(order.id) + } catch (e) { + console.error('Query status failed', e) + } + setTimeout(() => { Taro.redirectTo({ url: '/pages/order/list' }) }, 1500)