mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-04 12:52:27 +08:00
而第三方平台开发者代替公众号使用 JS SDK 的步骤如下: 1、在申请第三方平台时填写的网页开发域名,将作为旗下授权公众号的 JS SDK 安全域名(详情见“接入前必读”-“申请资料说明”) 2、在第三方平台的网页中正常引入 JS 文件 3、通过 config 接口注入权限验证配置,但在获取 jsapi_ticket 时,不通过公众号的 access_token 来获取,而是通过第三方平台的授权公众号 token(公众号授权给第三方平台后,第三方平台通过“接口说明”中的 api_authorizer_token 接口得到的 token),来获取 jsapi_ticket,然后使用这个 jsapi_ticket 来得到 signature,进行 JS SDK 的配置和开发。**注意 JS SDK 的其他配置中,其他信息均为正常的公众号的资料(而非第三方平台的)**。 4、通过 ready 接口处理成功验证 5、通过 error 接口处理失败验证 fix: #329.
58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
package js
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/silenceper/wechat/v2/credential"
|
|
"github.com/silenceper/wechat/v2/officialaccount/context"
|
|
officialJs "github.com/silenceper/wechat/v2/officialaccount/js"
|
|
"github.com/silenceper/wechat/v2/util"
|
|
)
|
|
|
|
// Js wx jssdk
|
|
type Js struct {
|
|
*context.Context
|
|
credential.JsTicketHandle
|
|
}
|
|
|
|
//NewJs init
|
|
func NewJs(context *context.Context, appID string) *Js {
|
|
js := new(Js)
|
|
js.Context = context
|
|
jsTicketHandle := credential.NewDefaultJsTicket(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, appid string) (config *officialJs.Config, err error) {
|
|
config = new(officialJs.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 = appid
|
|
config.NonceStr = nonceStr
|
|
config.Timestamp = timestamp
|
|
config.Signature = sigStr
|
|
return
|
|
}
|