wechat.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package wechat
  2. import (
  3. "net/http"
  4. "sync"
  5. "github.com/silenceper/wechat/cache"
  6. "github.com/silenceper/wechat/context"
  7. "github.com/silenceper/wechat/js"
  8. "github.com/silenceper/wechat/material"
  9. "github.com/silenceper/wechat/oauth"
  10. "github.com/silenceper/wechat/server"
  11. )
  12. //Wechat struct
  13. type Wechat struct {
  14. Context *context.Context
  15. }
  16. //Config for user
  17. type Config struct {
  18. AppID string
  19. AppSecret string
  20. Token string
  21. EncodingAESKey string
  22. Cache cache.Cache
  23. }
  24. //NewWechat init
  25. func NewWechat(cfg *Config) *Wechat {
  26. context := new(context.Context)
  27. copyConfigToContext(cfg, context)
  28. return &Wechat{context}
  29. }
  30. func copyConfigToContext(cfg *Config, context *context.Context) {
  31. context.AppID = cfg.AppID
  32. context.AppSecret = cfg.AppSecret
  33. context.Token = cfg.Token
  34. context.EncodingAESKey = cfg.EncodingAESKey
  35. context.Cache = cfg.Cache
  36. context.SetAccessTokenLock(new(sync.RWMutex))
  37. context.SetJsApiTicketLock(new(sync.RWMutex))
  38. }
  39. //GetServer init
  40. func (wc *Wechat) GetServer(req *http.Request, writer http.ResponseWriter) *server.Server {
  41. wc.Context.Request = req
  42. wc.Context.Writer = writer
  43. return server.NewServer(wc.Context)
  44. }
  45. //GetMaterial init
  46. func (wc *Wechat) GetMaterial() *material.Material {
  47. return material.NewMaterial(wc.Context)
  48. }
  49. //GetOauth init
  50. func (wc *Wechat) GetOauth(req *http.Request, writer http.ResponseWriter) *oauth.Oauth {
  51. wc.Context.Request = req
  52. wc.Context.Writer = writer
  53. return oauth.NewOauth(wc.Context)
  54. }
  55. //GetJs init
  56. func (wc *Wechat) GetJs(req *http.Request, writer http.ResponseWriter) *js.Js {
  57. wc.Context.Request = req
  58. wc.Context.Writer = writer
  59. return js.NewJs(wc.Context)
  60. }