mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-04 12:52:27 +08:00
Add JSSDK context method functionality (#828)
* Add JSSDK context method functionality * 善JSSDK上下文方法,并添加测试文件 * feat: 完善JSSDK上下文方法,保证协程安全,并添加测试文件 * 修改 import 包分组处理 * feat: 修改测试文件中 fmt.Print -> t.Log * 删除空行
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package js
|
||||
|
||||
import (
|
||||
context2 "context"
|
||||
"fmt"
|
||||
|
||||
"github.com/silenceper/wechat/v2/credential"
|
||||
@@ -39,20 +40,40 @@ func (js *Js) SetJsTicketHandle(ticketHandle credential.JsTicketHandle) {
|
||||
// GetConfig 获取jssdk需要的配置参数
|
||||
// uri 为当前网页地址
|
||||
func (js *Js) GetConfig(uri string) (config *Config, err error) {
|
||||
return js.GetConfigContext(context2.Background(), uri)
|
||||
}
|
||||
|
||||
// GetConfigContext 新方法,允许传入上下文,避免协程泄漏
|
||||
func (js *Js) GetConfigContext(ctx context2.Context, uri string) (config *Config, err error) {
|
||||
var accessToken string
|
||||
accessToken, err = js.GetAccessToken()
|
||||
// 类型断言,如果断言成功,调用安全的 GetAccessTokenContext 方法
|
||||
if ctxHandle, ok := js.Context.AccessTokenHandle.(credential.AccessTokenContextHandle); ok {
|
||||
accessToken, err = ctxHandle.GetAccessTokenContext(ctx)
|
||||
} else {
|
||||
// 如果没有实现 AccessTokenContextHandle 接口,调用旧的 GetAccessToken 方法
|
||||
accessToken, err = js.Context.GetAccessToken()
|
||||
}
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
var ticketStr string
|
||||
ticketStr, err = js.GetTicket(accessToken)
|
||||
// 类型断言 jsTicket
|
||||
if ticketCtxHandle, ok := js.JsTicketHandle.(credential.JsTicketContextHandle); ok {
|
||||
ticketStr, err = ticketCtxHandle.GetTicketContext(ctx, accessToken)
|
||||
} else {
|
||||
// 如果没有实现 JsTicketContextHandle 接口,调用旧的 GetTicket 方法
|
||||
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 = new(Config)
|
||||
config.AppID = js.AppID
|
||||
config.NonceStr = nonceStr
|
||||
|
||||
Reference in New Issue
Block a user