's'
This commit is contained in:
@@ -97,7 +97,7 @@ export async function POST(request: NextRequest) {
|
|||||||
|
|
||||||
const pb = getPocketBaseConfig();
|
const pb = getPocketBaseConfig();
|
||||||
const joinConfig = getJoinPaymentConfig();
|
const joinConfig = getJoinPaymentConfig();
|
||||||
const totalFee = Number(joinConfig?.amount ?? 100);
|
const totalFee = Number(joinConfig?.amount ?? 8800);
|
||||||
|
|
||||||
const checkPayments = await fetch(
|
const checkPayments = await fetch(
|
||||||
`${pb.url}/api/collections/payments/records?filter=${encodeURIComponent(`order_id="${orderId}"`)}&perPage=1`,
|
`${pb.url}/api/collections/payments/records?filter=${encodeURIComponent(`order_id="${orderId}"`)}&perPage=1`,
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { usePayStatusPoll } from "@/app/lib/payment/usePayStatusPoll";
|
|||||||
* 全局支付轮询:支付返回任意页面时检测 paid,调用 confirm 后跳转首页
|
* 全局支付轮询:支付返回任意页面时检测 paid,调用 confirm 后跳转首页
|
||||||
*/
|
*/
|
||||||
export function PayStatusPollProvider() {
|
export function PayStatusPollProvider() {
|
||||||
usePayStatusPoll(() => {
|
usePayStatusPoll((_orderId) => {
|
||||||
window.location.href = "/";
|
window.location.href = "/";
|
||||||
});
|
});
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -54,18 +54,27 @@ function parsePendingOrder(raw: string | null): [string | null, boolean] {
|
|||||||
return [orderId, true];
|
return [orderId, true];
|
||||||
}
|
}
|
||||||
|
|
||||||
export function usePayStatusPoll(onPaid: () => void): boolean {
|
export function usePayStatusPoll(onPaid: (orderId: string) => void): boolean {
|
||||||
const [polling, setPolling] = useState(false);
|
const [polling, setPolling] = useState(false);
|
||||||
const onPaidRef = useRef(onPaid);
|
const onPaidRef = useRef(onPaid);
|
||||||
onPaidRef.current = onPaid;
|
onPaidRef.current = onPaid;
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
const urlOrderId =
|
||||||
|
typeof window !== "undefined"
|
||||||
|
? new URLSearchParams(window.location.search).get("order_id") || ""
|
||||||
|
: "";
|
||||||
const cookieRaw = getCookie(COOKIE_NAME);
|
const cookieRaw = getCookie(COOKIE_NAME);
|
||||||
const [cookieOrderId, cookieValid] = parsePendingOrder(cookieRaw);
|
const [cookieOrderId, cookieValid] = parsePendingOrder(cookieRaw);
|
||||||
const storageRaw = getStorage(STORAGE_NAME);
|
const storageRaw = getStorage(STORAGE_NAME);
|
||||||
const [storageOrderId, storageValid] = parsePendingOrder(storageRaw);
|
const [storageOrderId, storageValid] = parsePendingOrder(storageRaw);
|
||||||
const orderId = cookieValid ? cookieOrderId : storageValid ? storageOrderId : null;
|
let orderId = cookieValid ? cookieOrderId : storageValid ? storageOrderId : null;
|
||||||
const activeRaw = cookieValid ? cookieRaw : storageValid ? storageRaw : null;
|
let activeRaw = cookieValid ? cookieRaw : storageValid ? storageRaw : null;
|
||||||
|
if (!orderId && urlOrderId.trim()) {
|
||||||
|
orderId = urlOrderId.trim();
|
||||||
|
activeRaw = `${orderId}|${Date.now()}`;
|
||||||
|
persistPendingOrder(activeRaw);
|
||||||
|
}
|
||||||
|
|
||||||
if (!orderId) {
|
if (!orderId) {
|
||||||
if (cookieRaw || storageRaw) {
|
if (cookieRaw || storageRaw) {
|
||||||
@@ -134,7 +143,7 @@ export function usePayStatusPoll(onPaid: () => void): boolean {
|
|||||||
} catch {
|
} catch {
|
||||||
/* 忽略,不影响跳转 */
|
/* 忽略,不影响跳转 */
|
||||||
}
|
}
|
||||||
onPaidRef.current();
|
onPaidRef.current(orderId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ export function getPaymentConfig(themeOverride?: { amount?: number; type?: strin
|
|||||||
enabled: true,
|
enabled: true,
|
||||||
apiUrl: process.env.PAYMENT_API_URL || DEFAULT_PAYMENT_API_URL,
|
apiUrl: process.env.PAYMENT_API_URL || DEFAULT_PAYMENT_API_URL,
|
||||||
provider: (process.env.PAYMENT_PROVIDER as "zpay" | "xorpay") || "zpay",
|
provider: (process.env.PAYMENT_PROVIDER as "zpay" | "xorpay") || "zpay",
|
||||||
defaultAmount: Number(process.env.PAYMENT_DEFAULT_AMOUNT) || 100,
|
defaultAmount: Number(process.env.PAYMENT_DEFAULT_AMOUNT) || 8800,
|
||||||
defaultType: process.env.PAYMENT_DEFAULT_TYPE || "meetup",
|
defaultType: process.env.PAYMENT_DEFAULT_TYPE || "meetup",
|
||||||
zpaySubmitUrl: process.env.ZPAY_SUBMIT_URL || "https://zpayz.cn/submit.php",
|
zpaySubmitUrl: process.env.ZPAY_SUBMIT_URL || "https://zpayz.cn/submit.php",
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ export const THEME_CONFIGS: Record<ThemeId, ThemeConfig> = {
|
|||||||
accent: "amber",
|
accent: "amber",
|
||||||
},
|
},
|
||||||
services: {
|
services: {
|
||||||
join: { amount: 100, type: "meetup" },
|
join: { amount: 8800, type: "meetup" },
|
||||||
pocketbaseJoinCollection: "solan",
|
pocketbaseJoinCollection: "solan",
|
||||||
shopUrl: process.env.NEXT_PUBLIC_SHOP_URL || "https://store.hackrobot.cn/", // 独立站域名
|
shopUrl: process.env.NEXT_PUBLIC_SHOP_URL || "https://store.hackrobot.cn/", // 独立站域名
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user