jsapi.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package jsapi
  2. import (
  3. "fmt"
  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. str := fmt.Sprintf("jsapi_ticket=%s&noncestr=%s&timestamp=%d&url=%s", ticketStr, config.NonceStr, config.Timestamp, uri)
  47. config.Signature = util.Signature(str)
  48. return
  49. }
  50. // GetAgentConfig 获取企业微信应用JS配置 https://developer.work.weixin.qq.com/document/path/94313
  51. func (js *Js) GetAgentConfig(uri string) (config *Config, err error) {
  52. config = new(Config)
  53. var accessToken string
  54. accessToken, err = js.GetAccessToken()
  55. if err != nil {
  56. return
  57. }
  58. var ticketStr string
  59. ticketStr, err = js.jsTicket.GetTicket(accessToken, credential.TicketTypeAgentJs)
  60. if err != nil {
  61. return
  62. }
  63. config.NonceStr = util.RandomStr(16)
  64. config.Timestamp = util.GetCurrTS()
  65. str := fmt.Sprintf("jsapi_ticket=%s&noncestr=%s&timestamp=%d&url=%s", ticketStr, config.NonceStr, config.Timestamp, uri)
  66. config.Signature = util.Signature(str)
  67. return
  68. }