fix: resolve public dulupay callback origin
This commit is contained in:
parent
7b69e7dcee
commit
55bed5087c
@ -29,6 +29,36 @@ function buildOutTradeNo() {
|
||||
return `DP${Date.now()}${random}`.slice(0, 64);
|
||||
}
|
||||
|
||||
function normalizeBaseUrl(value?: string | null) {
|
||||
const raw = String(value || "").trim();
|
||||
if (!raw) return "";
|
||||
|
||||
try {
|
||||
const parsed = new URL(raw);
|
||||
return `${parsed.protocol}//${parsed.host}`;
|
||||
} catch {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
function resolvePublicOrigin(request: NextRequest) {
|
||||
const fromEnv =
|
||||
normalizeBaseUrl(process.env.AUTH_URL) ||
|
||||
normalizeBaseUrl(process.env.NEXTAUTH_URL);
|
||||
if (fromEnv) return fromEnv;
|
||||
|
||||
const forwardedHost = request.headers.get("x-forwarded-host");
|
||||
const host = request.headers.get("host");
|
||||
const resolvedHost = String(forwardedHost || host || "").trim();
|
||||
if (!resolvedHost) {
|
||||
return new URL(request.url).origin;
|
||||
}
|
||||
|
||||
const forwardedProto = request.headers.get("x-forwarded-proto");
|
||||
const protocol = String(forwardedProto || "").trim() || "https";
|
||||
return `${protocol}://${resolvedHost}`;
|
||||
}
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
try {
|
||||
const session = await auth();
|
||||
@ -99,7 +129,7 @@ export async function POST(request: NextRequest) {
|
||||
const amountCents = Math.round(amount * 100);
|
||||
const payType = body.payType || dulupayConfig.defaultType || "alipay";
|
||||
|
||||
const defaultOrigin = new URL(request.url).origin;
|
||||
const defaultOrigin = resolvePublicOrigin(request);
|
||||
const notifyUrl =
|
||||
dulupayConfig.notifyUrl || `${defaultOrigin}/api/payment/dulupay/notify`;
|
||||
const returnUrl = dulupayConfig.returnUrl || `${defaultOrigin}/`;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user