1
0
mirror of https://github.com/silenceper/wechat.git synced 2026-02-07 22:22:28 +08:00

企业微信内部开发API:新增jssdk支持

This commit is contained in:
hb
2022-01-26 11:53:36 +08:00
parent 5704abb3b0
commit 88f07bc5fb
5 changed files with 189 additions and 5 deletions

View File

@@ -20,7 +20,7 @@ type ReqGetByUser struct {
type OneUser struct {
util.CommonError
ExternalContact ExternalContact `json:"external_contact"`
FollowUser []FollowInfo `json:"follow_user"` //注意,仅获取单个客户详情的时候这里返回的是跟进记录列表
FollowUser []FollowInfo `json:"follow_user"` //注意,仅获取单个客户详情的时候这里返回的是跟进列表
NextCursor string `json:"next_cursor"`
}
type resUserList struct {
@@ -35,7 +35,7 @@ type resUserids struct {
type UserInfo struct {
ExternalContact ExternalContact `json:"external_contact"`
FollowInfo FollowInfo `json:"follow_info"` //企业成员客户跟进信息可以参考获取客户详情但标签信息只会返回企业标签和规则组标签的tag_id个人标签将不再返回
FollowInfo FollowInfo `json:"follow_info"` //企业成员客户跟进信息可以参考获取客户详情但标签信息只会返回企业标签和规则组标签的tag_id个人标签将不再返回
}
type ExternalContact struct {
@@ -134,7 +134,7 @@ func (tpl *Client) GetQyUserInfoList(qyUserid []string) ([]UserInfo, error) {
return userInfoList, nil
}
//GetUserInfoAndAllFollow 获取客户详情以及全部跟进记录
//GetUserInfoAndAllFollow 获取客户详情以及全部跟进
func (tpl *Client) GetUserInfoAndAllFollow(userid string) (OneUser, error) {
var result, res OneUser
var err error

93
work/js/js.go Normal file
View File

@@ -0,0 +1,93 @@
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&timestamp=%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&timestamp=%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
}

View File

@@ -13,7 +13,7 @@ const (
userInfoURL = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=%s&userid=%s"
updateURL = "https://qyapi.weixin.qq.com/cgi-bin/user/simplelist?access_token=%s&department_id=%s&fetch_child=1"
userListURL = "https://qyapi.weixin.qq.com/cgi-bin/user/get"
launchCode = "https://qyapi.weixin.qq.com/cgi-bin/get_launch_code"
launchCode = "https://qyapi.weixin.qq.com/cgi-bin/get_launch_code?access_token=%s"
)
//User 用户管理
@@ -207,7 +207,7 @@ func (user *User) GetLaunchCode(userID, other string) (userInfo *RespLaunchCode,
return
}
uri := fmt.Sprintf(launchCode, accessToken, userID)
uri := fmt.Sprintf(launchCode, accessToken)
var response []byte
response, err = util.PostJSON(uri, map[string]interface{}{"operator_userid": userID, "single_chat": map[string]string{"userid": other}})
if err != nil {

View File

@@ -5,6 +5,7 @@ import (
"github.com/silenceper/wechat/v2/work/config"
"github.com/silenceper/wechat/v2/work/context"
"github.com/silenceper/wechat/v2/work/externalcontact"
"github.com/silenceper/wechat/v2/work/js"
"github.com/silenceper/wechat/v2/work/kf"
"github.com/silenceper/wechat/v2/work/msgaudit"
"github.com/silenceper/wechat/v2/work/oauth"
@@ -47,6 +48,11 @@ func (wk *Work) GetOauth() *oauth.Oauth {
return oauth.NewOauth(wk.ctx)
}
// GetJs js-sdk配置
func (wk *Work) GetJs() *js.Js {
return js.NewJs(wk.ctx)
}
// GetMsgAudit get msgAudit
func (wk *Work) GetMsgAudit() (*msgaudit.Client, error) {
return msgaudit.NewClient(wk.ctx.Config)