ArtisanCloud / PowerWeChat

PowerWechat是一款基于WeChat SDK for Golang,支持小程序、微信支付、企业微信、公众号等全微信生态
https://powerwechat.artisan-cloud.com
MIT License
1.36k stars 177 forks source link

微信支付下单接口报错,日志无输出 #262

Closed FourLeafTec closed 1 year ago

FourLeafTec commented 1 year ago

SDK版本:v3.0.9

问题描述: 从v2.0.40升级sdk到v3.0.9 下单接口 Payment.Order.JSAPITransaction() 报错

request failed: Post "https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi": context deadline exceeded

只有这个error返回,debug日志均无输出

日志部分配置如下:

{
  HttpDebug: true,
  Log: payment.Log{
      Level: "debug",
      File:  fmt.Sprintf("%s/wechat-pay.log", Conf.Logger.FilePath),
  }
}
FourLeafTec commented 1 year ago

定位到问题了,看上去是v3.0.9版本对context.CancelFunc实现有点问题

问题重现代码:

ctx, cancel := context.WithTimeout(context.Background(), 10)
defer cancel()
res, err := global.Payment.Order.JSAPITransaction(ctx, options)

这段代码按golang的习惯对可关闭或者可取消直接defer取消,但是整个代码块执行结束实际上sdk仍然没有返回, 这就导致整个请求被取消了

Matrix-X commented 1 year ago

不好意思,这个问题可能我们没太理解,现在context按照取消的写法,我们测试是正常的。

能否加企业微信群直接沟通?

wecom-temp-4e8166b4116dbd127d2d66b36323cc85

wecom-temp-249caf0d5427a01dee733987c3679f68

FourLeafTec commented 1 year ago

抱歉,我找到问题了,是我这边的问题,超时时间设置太短了,timeDuration忘了乘time.Second的倍数了