wechat.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. //Package gowechat 一个简单易用的wechat封装.
  2. package gowechat
  3. import (
  4. "fmt"
  5. "sync"
  6. "github.com/astaxie/beego/cache"
  7. "github.com/yaotian/gowechat/util"
  8. "github.com/yaotian/gowechat/wxcontext"
  9. )
  10. // Wechat struct
  11. type Wechat struct {
  12. Context *wxcontext.Context
  13. }
  14. // NewWechat init
  15. func NewWechat(cfg wxcontext.Config) *Wechat {
  16. context := new(wxcontext.Context)
  17. initContext(cfg, context)
  18. return &Wechat{context}
  19. }
  20. func initContext(cfg wxcontext.Config, context *wxcontext.Context) {
  21. if cfg.Cache == nil {
  22. cfg.Cache, _ = cache.NewCache("memory", `{"interval":60}`)
  23. }
  24. context.Config = cfg
  25. context.SetAccessTokenLock(new(sync.RWMutex))
  26. context.SetJsAPITicketLock(new(sync.RWMutex))
  27. //create http client
  28. if cfg.SslCertFilePath != "" && cfg.SslKeyFilePath != "" {
  29. if client, err := util.NewTLSHttpClient(cfg.SslCertFilePath, cfg.SslKeyFilePath); err == nil {
  30. context.SHTTPClient = client
  31. }
  32. }
  33. if cfg.SslCertContent != "" && cfg.SslKeyContent != "" {
  34. if client, err := util.NewTLSHttpClientFromContent(cfg.SslCertContent, cfg.SslKeyContent); err == nil {
  35. context.SHTTPClient = client
  36. }
  37. }
  38. }
  39. //MchMgr 商户平台
  40. func (wc *Wechat) MchMgr() (mch *MchMgr, err error) {
  41. err = wc.checkCfgMch()
  42. if err != nil {
  43. return
  44. }
  45. mch = new(MchMgr)
  46. mch.Wechat = *wc
  47. return
  48. }
  49. //MpMgr 公众平台
  50. func (wc *Wechat) MpMgr() (mp *MpMgr, err error) {
  51. err = wc.checkCfgBase()
  52. if err != nil {
  53. return
  54. }
  55. mp = new(MpMgr)
  56. mp.Wechat = *wc
  57. return
  58. }
  59. //checkCfgBase 检查配置基本信息
  60. func (wc *Wechat) checkCfgBase() (err error) {
  61. if wc.Context.AppID == "" {
  62. return fmt.Errorf("%s", "配置中没有AppID")
  63. }
  64. if wc.Context.AppSecret == "" {
  65. return fmt.Errorf("%s", "配置中没有AppSecret")
  66. }
  67. if wc.Context.Token == "" {
  68. return fmt.Errorf("%s", "配置中没有Token")
  69. }
  70. return
  71. }
  72. func (wc *Wechat) checkCfgMch() (err error) {
  73. err = wc.checkCfgBase()
  74. if err != nil {
  75. return
  76. }
  77. if wc.Context.MchID == "" {
  78. return fmt.Errorf("%s", "配置中没有MchID")
  79. }
  80. if wc.Context.MchAPIKey == "" {
  81. return fmt.Errorf("%s", "配置中没有MchAPIKey")
  82. }
  83. if wc.Context.SslCertFilePath == "" || wc.Context.SslCertContent == "" {
  84. return fmt.Errorf("%s", "配置中没有SslCert")
  85. }
  86. if wc.Context.SslKeyFilePath == "" || wc.Context.SslKeyContent == "" {
  87. return fmt.Errorf("%s", "配置中没有SslKey")
  88. }
  89. return
  90. }