| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package wxcontext
- import (
- "net/http"
- "sync"
- "github.com/yaotian/gowechat/util"
- )
- // Context struct
- type Context struct {
- *Config
- Writer http.ResponseWriter
- Request *http.Request
- //accessTokenLock 读写锁 同一个AppID一个
- accessTokenLock *sync.RWMutex
- //jsAPITicket 读写锁 同一个AppID一个
- jsAPITicketLock *sync.RWMutex
- HTTPClient *http.Client
- SHTTPClient *http.Client //SSL client
- }
- // Query returns the keyed url query value if it exists
- func (ctx *Context) Query(key string) string {
- value, _ := ctx.GetQuery(key)
- return value
- }
- // GetQuery is like Query(), it returns the keyed url query value
- func (ctx *Context) GetQuery(key string) (string, bool) {
- req := ctx.Request
- if values, ok := req.URL.Query()[key]; ok && len(values) > 0 {
- return values[0], true
- }
- return "", false
- }
- // SetJsAPITicketLock 设置jsAPITicket的lock
- func (ctx *Context) SetJsAPITicketLock(lock *sync.RWMutex) {
- ctx.jsAPITicketLock = lock
- }
- // GetJsAPITicketLock 获取jsAPITicket 的lock
- func (ctx *Context) GetJsAPITicketLock() *sync.RWMutex {
- return ctx.jsAPITicketLock
- }
- //InitHTTPClients Context中初始化 httpclient httpsclient
- func (ctx *Context) InitHTTPClients() (err error) {
- //create http client
- if ctx.SslCertFilePath != "" && ctx.SslKeyFilePath != "" {
- if client, err := util.NewTLSHttpClient(ctx.SslCertFilePath, ctx.SslKeyFilePath); err == nil {
- ctx.SHTTPClient = client
- } else {
- return err
- }
- }
- if ctx.SslCertContent != "" && ctx.SslKeyContent != "" {
- if client, err := util.NewTLSHttpClientFromContent(ctx.SslCertContent, ctx.SslKeyContent); err == nil {
- ctx.SHTTPClient = client
- } else {
- return err
- }
- }
- ctx.HTTPClient = http.DefaultClient
- return
- }
|