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 {