get_api_wx_card_qrcode_logic.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package wxcard
  2. import (
  3. "context"
  4. "fmt"
  5. "io"
  6. "net/http"
  7. "net/url"
  8. "strconv"
  9. "wechat-api/hook/wechat"
  10. "wechat-api/internal/svc"
  11. "wechat-api/internal/types"
  12. "github.com/ArtisanCloud/PowerWeChat/v2/src/kernel/power"
  13. "github.com/zeromicro/go-zero/core/logx"
  14. )
  15. type GetApiWxCardQrcodeLogic struct {
  16. logx.Logger
  17. ctx context.Context
  18. svcCtx *svc.ServiceContext
  19. }
  20. func NewGetApiWxCardQrcodeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetApiWxCardQrcodeLogic {
  21. return &GetApiWxCardQrcodeLogic{
  22. Logger: logx.WithContext(ctx),
  23. ctx: ctx,
  24. svcCtx: svcCtx}
  25. }
  26. func (l *GetApiWxCardQrcodeLogic) GetApiWxCardQrcode(req *types.QrcodeReq, w http.ResponseWriter) {
  27. AppId := l.svcCtx.Config.Miniprogram.Appid
  28. Secret := l.svcCtx.Config.Miniprogram.Secret
  29. // 1. 初始化小程序应用实例
  30. app, err := wechat.NewClient(AppId, Secret)
  31. if err != nil {
  32. fmt.Printf("init wechat miniprogram failed:%v\n", err)
  33. return
  34. }
  35. // Urldecode 操作
  36. rawPath, _ := url.QueryUnescape(req.Path)
  37. // 从解析后的URL里获取信息
  38. parser, _ := url.Parse(rawPath)
  39. //fmt.Printf("path=%v, query_string=%v\n", parser.Path, parser.RawQuery)
  40. scene, path := parser.RawQuery, parser.Path
  41. if scene == "" {
  42. scene = "share"
  43. }
  44. pphash := power.HashMap{}
  45. resp, err := app.WXACode.GetUnlimited(
  46. scene,
  47. path,
  48. false,
  49. req.EnvVersion,
  50. req.Width,
  51. false,
  52. &pphash,
  53. false,
  54. )
  55. if err != nil {
  56. fmt.Printf("get miniprogram qrcode failed:%v\n", err)
  57. return
  58. }
  59. defer resp.Body.Close()
  60. imageContent, _ := io.ReadAll(resp.Body)
  61. w.Header().Set("Content-Type", "image/png")
  62. w.Header().Set("Content-Length", strconv.Itoa(len(imageContent)))
  63. nbytes, err := w.Write(imageContent)
  64. fmt.Printf("nbytes=%d err=%v\n", nbytes, err)
  65. }