context.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package wxcontext
  2. import (
  3. "net/http"
  4. "sync"
  5. "github.com/yaotian/gowechat/util"
  6. )
  7. // Context struct
  8. type Context struct {
  9. *Config
  10. Writer http.ResponseWriter
  11. Request *http.Request
  12. //accessTokenLock 读写锁 同一个AppID一个
  13. accessTokenLock *sync.RWMutex
  14. //jsAPITicket 读写锁 同一个AppID一个
  15. jsAPITicketLock *sync.RWMutex
  16. HTTPClient *http.Client
  17. SHTTPClient *http.Client //SSL client
  18. }
  19. // Query returns the keyed url query value if it exists
  20. func (ctx *Context) Query(key string) string {
  21. value, _ := ctx.GetQuery(key)
  22. return value
  23. }
  24. // GetQuery is like Query(), it returns the keyed url query value
  25. func (ctx *Context) GetQuery(key string) (string, bool) {
  26. req := ctx.Request
  27. if values, ok := req.URL.Query()[key]; ok && len(values) > 0 {
  28. return values[0], true
  29. }
  30. return "", false
  31. }
  32. // SetJsAPITicketLock 设置jsAPITicket的lock
  33. func (ctx *Context) SetJsAPITicketLock(lock *sync.RWMutex) {
  34. ctx.jsAPITicketLock = lock
  35. }
  36. // GetJsAPITicketLock 获取jsAPITicket 的lock
  37. func (ctx *Context) GetJsAPITicketLock() *sync.RWMutex {
  38. return ctx.jsAPITicketLock
  39. }
  40. //InitHTTPClients Context中初始化 httpclient httpsclient
  41. func (ctx *Context) InitHTTPClients() (err error) {
  42. //create http client
  43. if ctx.SslCertFilePath != "" && ctx.SslKeyFilePath != "" {
  44. if client, err := util.NewTLSHttpClient(ctx.SslCertFilePath, ctx.SslKeyFilePath); err == nil {
  45. ctx.SHTTPClient = client
  46. } else {
  47. return err
  48. }
  49. }
  50. if ctx.SslCertContent != "" && ctx.SslKeyContent != "" {
  51. if client, err := util.NewTLSHttpClientFromContent(ctx.SslCertContent, ctx.SslKeyContent); err == nil {
  52. ctx.SHTTPClient = client
  53. } else {
  54. return err
  55. }
  56. }
  57. ctx.HTTPClient = http.DefaultClient
  58. return
  59. }