package js import ( "fmt" "github.com/silenceper/wechat/v2/credential" "github.com/silenceper/wechat/v2/util" "github.com/silenceper/wechat/v2/work/context" ) // Js struct type Js struct { *context.Context credential.JsTicketHandle } // Config 返回给用户jssdk配置信息 type Config struct { CorpID string `json:"corp_id"` Agentid string `json:"agentid"` Timestamp int64 `json:"timestamp"` NonceStr string `json:"nonce_str"` Signature string `json:"signature"` } //NewJs init func NewJs(context *context.Context) *Js { js := new(Js) js.Context = context jsTicketHandle := credential.NewWorkJsTicket(context.CorpID, context.AgentID, credential.CacheKeyWorkPrefix, context.Cache) js.SetJsTicketHandle(jsTicketHandle) return js } //SetJsTicketHandle 自定义js ticket取值方式 func (js *Js) SetJsTicketHandle(ticketHandle credential.JsTicketHandle) { js.JsTicketHandle = ticketHandle } //GetConfig 获取jssdk需要的配置参数 //uri 为当前网页地址 func (js *Js) GetConfig(uri string) (config *Config, err error) { config = new(Config) var accessToken string accessToken, err = js.GetAccessToken() if err != nil { return } var ticketStr string ticketStr, err = js.GetTicket(accessToken) if err != nil { return } nonceStr := util.RandomStr(16) timestamp := util.GetCurrTS() str := fmt.Sprintf("jsapi_ticket=%s&noncestr=%s×tamp=%d&url=%s", ticketStr, nonceStr, timestamp, uri) sigStr := util.Signature(str) config.CorpID = js.CorpID config.Agentid = js.AgentID config.NonceStr = nonceStr config.Timestamp = timestamp config.Signature = sigStr return } //GetAgentConfig 获取jssdk需要的配置参数 //uri 为当前网页地址 func (js *Js) GetAgentConfig(uri string) (config *Config, err error) { config = new(Config) var accessToken string accessToken, err = js.GetAccessToken() if err != nil { return } var ticketStr string ticketStr, err = js.GetTicket(accessToken) if err != nil { return } nonceStr := util.RandomStr(16) timestamp := util.GetCurrTS() str := fmt.Sprintf("jsapi_ticket=%s&noncestr=%s×tamp=%d&url=%s", ticketStr, nonceStr, timestamp, uri) sigStr := util.Signature(str) config.CorpID = js.CorpID config.NonceStr = nonceStr config.Timestamp = timestamp config.Signature = sigStr return }