From bc2dbcb4161448ae4774d036999ace87acf34336 Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 31 Mar 2026 14:59:43 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20V2=20=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E6=94=AF=E4=BB=98=E5=8F=82=E6=95=B0=E5=85=A8=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E5=AD=97=E7=AC=A6=E4=B8=B2=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit extractPaymentResult 只处理 map[string]any,而 V2 自建实现返回 map[string]string,类型断言静默失败导致所有字段为空字符串。 增加对 map[string]string 的处理分支,兼容 V1 和 V2 两种支付渠道。 --- .../service/client_order/payment_provider.go | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/internal/service/client_order/payment_provider.go b/internal/service/client_order/payment_provider.go index 472a475..50a16b1 100644 --- a/internal/service/client_order/payment_provider.go +++ b/internal/service/client_order/payment_provider.go @@ -139,20 +139,32 @@ func buildClientPayConfigFromResult(result *PaymentResult) *dto.ClientPayConfig } // extractPaymentResult 从微信 SDK 的 map 配置中提取统一支付参数。 +// 支持两种类型: +// - map[string]any:V1 标准微信 SDK(PowerWeChat)返回 +// - map[string]string:V2 自建实现返回 func extractPaymentResult(payConfig any) *PaymentResult { - configMap, _ := payConfig.(map[string]any) - if configMap == nil { - configMap = map[string]any{} + if configMap, ok := payConfig.(map[string]any); ok { + return &PaymentResult{ + AppID: payFirstNonEmpty(payStringFromAny(configMap["appId"])), + TimeStamp: payFirstNonEmpty(payStringFromAny(configMap["timeStamp"]), payStringFromAny(configMap["timestamp"])), + NonceStr: payStringFromAny(configMap["nonceStr"]), + Package: payStringFromAny(configMap["package"]), + SignType: payStringFromAny(configMap["signType"]), + PaySign: payStringFromAny(configMap["paySign"]), + } } - - return &PaymentResult{ - AppID: payFirstNonEmpty(payStringFromAny(configMap["appId"])), - TimeStamp: payFirstNonEmpty(payStringFromAny(configMap["timeStamp"]), payStringFromAny(configMap["timestamp"])), - NonceStr: payStringFromAny(configMap["nonceStr"]), - Package: payStringFromAny(configMap["package"]), - SignType: payStringFromAny(configMap["signType"]), - PaySign: payStringFromAny(configMap["paySign"]), + // V2 自建实现返回 map[string]string,原 map[string]any 断言会失败导致字段全空 + if configMap, ok := payConfig.(map[string]string); ok { + return &PaymentResult{ + AppID: configMap["appId"], + TimeStamp: payFirstNonEmpty(configMap["timeStamp"], configMap["timestamp"]), + NonceStr: configMap["nonceStr"], + Package: configMap["package"], + SignType: configMap["signType"], + PaySign: configMap["paySign"], + } } + return &PaymentResult{} } func payStringFromAny(value any) string {