mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-06 21:52:27 +08:00
94 lines
2.3 KiB
Go
94 lines
2.3 KiB
Go
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
|
|
}
|