发货链接返回完整域名:DELIVERY_BASE_URL 未配置时按请求 scheme+Host 推导
- GetOrCreateDeliveryLink/RestoreDeliveryLink 增加 requestBaseURL 参数 - buildDeliveryURL 优先级:DELIVERY_BASE_URL → 请求域名 → 路径 - 支持 X-Forwarded-Proto 与 TLS 判断 https
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// requestBaseURL 根据当前请求推导站点基础地址(如 https://skin.khhao.com)。
|
||||
// 优先取配置的 DELIVERY_BASE_URL(服务层),为空时由请求的 scheme + Host 推导,
|
||||
// 保证发货链接始终返回完整可访问的 URL。
|
||||
func requestBaseURL(c *gin.Context) string {
|
||||
scheme := "http"
|
||||
if c.Request.TLS != nil || strings.EqualFold(c.GetHeader("X-Forwarded-Proto"), "https") {
|
||||
scheme = "https"
|
||||
}
|
||||
return scheme + "://" + c.Request.Host
|
||||
}
|
||||
@@ -168,7 +168,7 @@ func (h *MerchantHandler) CreateTestOrder(c *gin.Context) {
|
||||
}
|
||||
|
||||
func (h *MerchantHandler) GetDeliveryLink(c *gin.Context) {
|
||||
link, err := h.deliverySvc.GetOrCreateDeliveryLink(middleware.GetMerchantID(c), c.Param("order_no"))
|
||||
link, err := h.deliverySvc.GetOrCreateDeliveryLink(middleware.GetMerchantID(c), c.Param("order_no"), requestBaseURL(c))
|
||||
if err != nil {
|
||||
writeDeliveryError(c, err)
|
||||
return
|
||||
@@ -185,7 +185,7 @@ func (h *MerchantHandler) RevokeDeliveryLink(c *gin.Context) {
|
||||
}
|
||||
|
||||
func (h *MerchantHandler) RestoreDeliveryLink(c *gin.Context) {
|
||||
link, err := h.deliverySvc.RestoreDeliveryLink(middleware.GetMerchantID(c), c.Param("order_no"))
|
||||
link, err := h.deliverySvc.RestoreDeliveryLink(middleware.GetMerchantID(c), c.Param("order_no"), requestBaseURL(c))
|
||||
if err != nil {
|
||||
writeDeliveryError(c, err)
|
||||
return
|
||||
|
||||
@@ -163,7 +163,7 @@ func (h *OpenV1Handler) GetDeliveryLink(c *gin.Context) {
|
||||
openlog.SetAction(c, openlog.ActionQuery)
|
||||
orderNo := c.Param("order_no")
|
||||
openlog.Info(c, "delivery_link start order_no=%s", orderNo)
|
||||
link, err := h.deliverySvc.GetOrCreateDeliveryLink(middleware.GetMerchantID(c), orderNo)
|
||||
link, err := h.deliverySvc.GetOrCreateDeliveryLink(middleware.GetMerchantID(c), orderNo, requestBaseURL(c))
|
||||
if err != nil {
|
||||
openlog.Warn(c, "delivery_link fail order_no=%s err=%v", orderNo, err)
|
||||
if sc, ok := err.(interface{ HTTPStatus() int }); ok {
|
||||
|
||||
Reference in New Issue
Block a user