wechat.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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) Mch() (mch *MchMgr, err error) {
  42. mch = new(MchMgr)
  43. mch.Wechat = *wc
  44. return
  45. }
  46. //Mp 公众平台
  47. func (wc *Wechat) Mp() (mp *MpMgr, err error) {
  48. err = wc.checkCfgBase()
  49. if err != nil {
  50. return
  51. }
  52. mp = new(MpMgr)
  53. mp.Wechat = *wc
  54. return
  55. }
  56. //checkCfgBase 检查配置基本信息
  57. func (wc *Wechat) checkCfgBase() (err error) {
  58. if wc.Context.AppID == "" {
  59. return fmt.Errorf("%s", "配置中没有AppID")
  60. }
  61. if wc.Context.AppSecret == "" {
  62. return fmt.Errorf("%s", "配置中没有AppSecret")
  63. }
  64. if wc.Context.Token == "" {
  65. return fmt.Errorf("%s", "配置中没有Token")
  66. }
  67. return
  68. }
  69. func (wc *Wechat) checkCfgMch() (err error) {
  70. err = wc.checkCfgBase()
  71. if err != nil {
  72. return
  73. }
  74. if wc.Context.MchID == "" {
  75. return fmt.Errorf("%s", "配置中没有MchID")
  76. }
  77. if wc.Context.MchAPIKey == "" {
  78. return fmt.Errorf("%s", "配置中没有MchAPIKey")
  79. }
  80. if wc.Context.SslCertFilePath == "" || wc.Context.SslCertContent == "" {
  81. return fmt.Errorf("%s", "配置中没有SslCert")
  82. }
  83. if wc.Context.SslKeyFilePath == "" || wc.Context.SslKeyContent == "" {
  84. return fmt.Errorf("%s", "配置中没有SslKey")
  85. }
  86. return
  87. }