| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package js
- import (
- "fmt"
- "github.com/silenceper/wechat/v2/credential"
- "github.com/silenceper/wechat/v2/officialaccount/context"
- "github.com/silenceper/wechat/v2/util"
- )
- // Js struct
- type Js struct {
- *context.Context
- credential.JsTicketHandle
- }
- // Config 返回给用户jssdk配置信息
- type Config struct {
- AppID string `json:"app_id"`
- 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.NewDefaultJsTicket(context.AppID, credential.CacheKeyOfficialAccountPrefix, 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.AppID = js.AppID
- config.NonceStr = nonceStr
- config.Timestamp = timestamp
- config.Signature = sigStr
- return
- }
|