jsapi.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package jsapi
  2. import (
  3. "strconv"
  4. "github.com/silenceper/wechat/v2/credential"
  5. "github.com/silenceper/wechat/v2/util"
  6. "github.com/silenceper/wechat/v2/work/context"
  7. )
  8. // Js struct
  9. type Js struct {
  10. *context.Context
  11. jsTicket *credential.WorkJsTicket
  12. }
  13. // NewJs init
  14. func NewJs(context *context.Context) *Js {
  15. js := new(Js)
  16. js.Context = context
  17. js.jsTicket = credential.NewWorkJsTicket(
  18. context.Config.CorpID,
  19. context.Config.AgentID,
  20. credential.CacheKeyWorkPrefix,
  21. context.Cache,
  22. )
  23. return js
  24. }
  25. // Config 返回给用户使用的配置
  26. type Config struct {
  27. Timestamp int64 `json:"timestamp"`
  28. NonceStr string `json:"nonce_str"`
  29. Signature string `json:"signature"`
  30. }
  31. // GetConfig 获取企业微信JS配置 https://developer.work.weixin.qq.com/document/path/90514
  32. func (js *Js) GetConfig(uri string) (config *Config, err error) {
  33. config = new(Config)
  34. var accessToken string
  35. accessToken, err = js.GetAccessToken()
  36. if err != nil {
  37. return
  38. }
  39. var ticketStr string
  40. ticketStr, err = js.jsTicket.GetTicket(accessToken, credential.TicketTypeCorpJs)
  41. if err != nil {
  42. return
  43. }
  44. config.NonceStr = util.RandomStr(16)
  45. config.Timestamp = util.GetCurrTS()
  46. config.Signature = util.Signature(ticketStr, config.NonceStr, strconv.FormatInt(config.Timestamp, 10), uri)
  47. return
  48. }
  49. // GetAgentConfig 获取企业微信应用JS配置 https://developer.work.weixin.qq.com/document/path/94313
  50. func (js *Js) GetAgentConfig(uri string) (config *Config, err error) {
  51. config = new(Config)
  52. var accessToken string
  53. accessToken, err = js.GetAccessToken()
  54. if err != nil {
  55. return
  56. }
  57. var ticketStr string
  58. ticketStr, err = js.jsTicket.GetTicket(accessToken, credential.TicketTypeAgentJs)
  59. if err != nil {
  60. return
  61. }
  62. config.NonceStr = util.RandomStr(16)
  63. config.Timestamp = util.GetCurrTS()
  64. config.Signature = util.Signature(ticketStr, config.NonceStr, strconv.FormatInt(config.Timestamp, 10), uri)
  65. return
  66. }