wechat.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /* package gowechat 一个简单易用的wechat封装.
  2. */
  3. package gowechat
  4. import (
  5. "fmt"
  6. "sync"
  7. "github.com/astaxie/beego/cache"
  8. "github.com/yaotian/gowechat/util"
  9. "github.com/yaotian/gowechat/wxcontext"
  10. )
  11. // Wechat struct
  12. type Wechat struct {
  13. Context *wxcontext.Context
  14. }
  15. // NewWechat init
  16. func NewWechat(cfg wxcontext.Config) *Wechat {
  17. context := new(wxcontext.Context)
  18. initContext(cfg, context)
  19. return &Wechat{context}
  20. }
  21. func initContext(cfg wxcontext.Config, context *wxcontext.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. //Mch 商户平台
  41. func (wc *Wechat) MchMgr() (mch *MchMgr, err error) {
  42. err = wc.checkCfgMch()
  43. if err != nil {
  44. return
  45. }
  46. mch = new(MchMgr)
  47. mch.Wechat = *wc
  48. return
  49. }
  50. //Mp 公众平台
  51. func (wc *Wechat) MpMgr() (mp *MpMgr, err error) {
  52. err = wc.checkCfgBase()
  53. if err != nil {
  54. return
  55. }
  56. mp = new(MpMgr)
  57. mp.Wechat = *wc
  58. return
  59. }
  60. //checkCfgBase 检查配置基本信息
  61. func (wc *Wechat) checkCfgBase() (err error) {
  62. if wc.Context.AppID == "" {
  63. return fmt.Errorf("%s", "配置中没有AppID")
  64. }
  65. if wc.Context.AppSecret == "" {
  66. return fmt.Errorf("%s", "配置中没有AppSecret")
  67. }
  68. if wc.Context.Token == "" {
  69. return fmt.Errorf("%s", "配置中没有Token")
  70. }
  71. return
  72. }
  73. func (wc *Wechat) checkCfgMch() (err error) {
  74. err = wc.checkCfgBase()
  75. if err != nil {
  76. return
  77. }
  78. if wc.Context.MchID == "" {
  79. return fmt.Errorf("%s", "配置中没有MchID")
  80. }
  81. if wc.Context.MchAPIKey == "" {
  82. return fmt.Errorf("%s", "配置中没有MchAPIKey")
  83. }
  84. if wc.Context.SslCertFilePath == "" || wc.Context.SslCertContent == "" {
  85. return fmt.Errorf("%s", "配置中没有SslCert")
  86. }
  87. if wc.Context.SslKeyFilePath == "" || wc.Context.SslKeyContent == "" {
  88. return fmt.Errorf("%s", "配置中没有SslKey")
  89. }
  90. return
  91. }