fix: 修复微信支付容器内 mkdir 权限错误,新增 wechat_v2 支付渠道
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m11s

- NewPaymentAppFromConfig 加 Log.Stdout=true,禁止 PowerWeChat SDK 在容器
  工作目录创建 wechat/ 日志文件夹(Permission denied 根因)
- 新增 ProviderTypeWechatV2 = wechat_v2 常量,与 wechat(v3) 独立区分
- 新增 PaymentV2Service:直连统一下单 v2 接口,XML + MD5 签名
- newPaymentProvider 按 ProviderType 分支路由到对应版本
This commit is contained in:
2026-03-31 12:12:13 +08:00
parent 4e65cf95d1
commit 5b283285a2
4 changed files with 247 additions and 2 deletions

View File

@@ -96,6 +96,11 @@ func NewPaymentAppFromConfig(wechatConfig *model.WechatConfig, appID string, cac
SerialNo: wechatConfig.WxSerialNo,
Cache: cache,
NotifyURL: wechatConfig.WxNotifyURL,
// 禁止 PowerWeChat SDK 在当前目录创建 wechat/ 日志文件夹
// 容器内工作目录通常无写权限,会导致 "mkdir wechat: permission denied"
Log: payment.Log{
Stdout: true,
},
}
app, err := payment.NewPayment(userConfig)
@@ -111,6 +116,22 @@ func NewPaymentAppFromConfig(wechatConfig *model.WechatConfig, appID string, cac
return app, nil
}
// NewPaymentV2ServiceFromConfig 从数据库配置创建微信支付 v2 服务实例
// v2 仅需 APIv2Key不要求证书序列号和 v3 密钥
func NewPaymentV2ServiceFromConfig(wechatConfig *model.WechatConfig, appID string, logger *zap.Logger) (*PaymentV2Service, error) {
if wechatConfig == nil {
return nil, fmt.Errorf("微信配置不能为空")
}
if appID == "" {
return nil, fmt.Errorf("appID 不能为空")
}
if wechatConfig.WxMchID == "" || wechatConfig.WxAPIV2Key == "" {
return nil, fmt.Errorf("微信支付 v2 配置不完整:缺少 wx_mch_id 或 wx_api_v2_key")
}
return NewPaymentV2Service(appID, wechatConfig.WxMchID, wechatConfig.WxAPIV2Key, wechatConfig.WxNotifyURL, logger), nil
}
func writeWechatPemTempFile(pattern, content string) (string, error) {
if content == "" {
return "", fmt.Errorf("证书内容不能为空")