js.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package js
  2. import (
  3. "fmt"
  4. "github.com/silenceper/wechat/v2/credential"
  5. "github.com/silenceper/wechat/v2/officialaccount/context"
  6. officialJs "github.com/silenceper/wechat/v2/officialaccount/js"
  7. "github.com/silenceper/wechat/v2/util"
  8. )
  9. // Js wx jssdk
  10. type Js struct {
  11. *context.Context
  12. credential.JsTicketHandle
  13. }
  14. // NewJs init
  15. func NewJs(context *context.Context, appID string) *Js {
  16. js := new(Js)
  17. js.Context = context
  18. jsTicketHandle := credential.NewDefaultJsTicket(appID, credential.CacheKeyOfficialAccountPrefix, context.Cache)
  19. js.SetJsTicketHandle(jsTicketHandle)
  20. return js
  21. }
  22. // SetJsTicketHandle 自定义js ticket取值方式
  23. func (js *Js) SetJsTicketHandle(ticketHandle credential.JsTicketHandle) {
  24. js.JsTicketHandle = ticketHandle
  25. }
  26. // GetConfig 第三方平台 - 获取jssdk需要的配置参数
  27. // uri 为当前网页地址
  28. func (js *Js) GetConfig(uri, appid string) (config *officialJs.Config, err error) {
  29. config = new(officialJs.Config)
  30. var accessToken string
  31. accessToken, err = js.GetAccessToken()
  32. if err != nil {
  33. return
  34. }
  35. var ticketStr string
  36. ticketStr, err = js.GetTicket(accessToken)
  37. if err != nil {
  38. return
  39. }
  40. nonceStr := util.RandomStr(16)
  41. timestamp := util.GetCurrTS()
  42. str := fmt.Sprintf("jsapi_ticket=%s&noncestr=%s&timestamp=%d&url=%s", ticketStr, nonceStr, timestamp, uri)
  43. sigStr := util.Signature(str)
  44. config.AppID = appid
  45. config.NonceStr = nonceStr
  46. config.Timestamp = timestamp
  47. config.Signature = sigStr
  48. return
  49. }