fix: correct return_url generation for payment in frontend-backend separated deployment

This commit is contained in:
xboard
2025-07-21 23:54:00 +08:00
parent 6649924d10
commit 06cbe0e478
2 changed files with 23 additions and 7 deletions

View File

@@ -41,17 +41,33 @@ if (!function_exists('admin_settings_batch')) {
}
}
if (!function_exists('origin_url')) {
if (!function_exists('source_base_url')) {
/**
* 根据 HTTP_ORIGIN 拼接完整 URL
* 获取来源基础URL优先Referer其次Host
* @param string $path
* @return string
*/
function origin_url(string $path = ''): string
function source_base_url(string $path = ''): string
{
$origin = request()->getSchemeAndHttpHost(); // 自动带端口
$origin = rtrim($origin, '/');
$baseUrl = '';
$referer = request()->header('Referer');
if ($referer) {
$parsedUrl = parse_url($referer);
if (isset($parsedUrl['scheme']) && isset($parsedUrl['host'])) {
$baseUrl = $parsedUrl['scheme'] . '://' . $parsedUrl['host'];
if (isset($parsedUrl['port'])) {
$baseUrl .= ':' . $parsedUrl['port'];
}
}
}
if (!$baseUrl) {
$baseUrl = request()->getSchemeAndHttpHost();
}
$baseUrl = rtrim($baseUrl, '/');
$path = ltrim($path, '/');
return $origin . '/' . $path;
return $baseUrl . '/' . $path;
}
}

View File

@@ -53,7 +53,7 @@ class PaymentService
return $this->payment->pay([
'notify_url' => $notifyUrl,
'return_url' => origin_url('/#/order/' . $order['trade_no']),
'return_url' => source_base_url('/#/order/' . $order['trade_no']),
'trade_no' => $order['trade_no'],
'total_amount' => $order['total_amount'],
'user_id' => $order['user_id'],