wechat.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package gowechat
  2. import (
  3. "fmt"
  4. "net/http"
  5. "sync"
  6. "github.com/astaxie/beego/cache"
  7. "github.com/yaotian/gowechat/server"
  8. "github.com/yaotian/gowechat/server/context"
  9. "github.com/yaotian/gowechat/util"
  10. )
  11. // Wechat struct
  12. type Wechat struct {
  13. Context *context.Context
  14. }
  15. // NewWechat init
  16. func NewWechat(cfg context.Config) *Wechat {
  17. context := new(context.Context)
  18. initContext(cfg, context)
  19. return &Wechat{context}
  20. }
  21. func initContext(cfg context.Config, context *context.Context) {
  22. if cfg.Cache == nil {
  23. cfg.Cache, _ = cache.NewCache("memory", `{"interval":60}`)
  24. }
  25. context.Config = cfg
  26. context.SetAccessTokenLock(new(sync.RWMutex))
  27. context.SetJsAPITicketLock(new(sync.RWMutex))
  28. //create http client
  29. if cfg.SslCertFilePath != "" && cfg.SslKeyFilePath != "" {
  30. if client, err := util.NewTLSHttpClient(cfg.SslCertFilePath, cfg.SslKeyFilePath); err == nil {
  31. context.SHTTPClient = client
  32. }
  33. }
  34. if cfg.SslCertContent != "" && cfg.SslKeyContent != "" {
  35. if client, err := util.NewTLSHttpClientFromContent(cfg.SslCertContent, cfg.SslKeyContent); err == nil {
  36. context.SHTTPClient = client
  37. }
  38. }
  39. }
  40. // GetServer 消息管理
  41. func (wc *Wechat) GetServer(req *http.Request, writer http.ResponseWriter) *server.Server {
  42. wc.Context.Request = req
  43. wc.Context.Writer = writer
  44. return server.NewServer(wc.Context)
  45. }
  46. //Mch 商户平台
  47. func (wc *Wechat) Mch() (mch *MchMgr, err error) {
  48. mch = new(MchMgr)
  49. mch.Wechat = *wc
  50. return
  51. }
  52. //Mp 公众平台
  53. func (wc *Wechat) Mp() (mp *MpMgr, err error) {
  54. err = wc.checkCfgBase()
  55. if err != nil {
  56. return
  57. }
  58. mp = new(MpMgr)
  59. mp.Wechat = *wc
  60. return
  61. }
  62. //checkCfgBase 检查配置基本信息
  63. func (wc *Wechat) checkCfgBase() (err error) {
  64. return
  65. }
  66. func (wc *Wechat) checkCfgMch() (err error) {
  67. err = wc.checkCfgBase()
  68. if err != nil {
  69. return
  70. }
  71. if wc.Context.MchID == "" || wc.Context.MchAPIKey == "" {
  72. return fmt.Errorf("%s", "配置中没有MchID或者MchAPIKey")
  73. }
  74. return
  75. }