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);
|
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) {
|
export async function POST(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
const session = await auth();
|
const session = await auth();
|
||||||
@ -99,7 +129,7 @@ export async function POST(request: NextRequest) {
|
|||||||
const amountCents = Math.round(amount * 100);
|
const amountCents = Math.round(amount * 100);
|
||||||
const payType = body.payType || dulupayConfig.defaultType || "alipay";
|
const payType = body.payType || dulupayConfig.defaultType || "alipay";
|
||||||
|
|
||||||
const defaultOrigin = new URL(request.url).origin;
|
const defaultOrigin = resolvePublicOrigin(request);
|
||||||
const notifyUrl =
|
const notifyUrl =
|
||||||
dulupayConfig.notifyUrl || `${defaultOrigin}/api/payment/dulupay/notify`;
|
dulupayConfig.notifyUrl || `${defaultOrigin}/api/payment/dulupay/notify`;
|
||||||
const returnUrl = dulupayConfig.returnUrl || `${defaultOrigin}/`;
|
const returnUrl = dulupayConfig.returnUrl || `${defaultOrigin}/`;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user