wechat.go 1.6 KB

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