mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-23 13:42:25 +08:00
Compare commits
3 Commits
74e3e9c04e
...
9f14122a87
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9f14122a87 | ||
|
|
7fcd7a34dd | ||
|
|
5b29289dbb |
2
.github/workflows/go.yml
vendored
2
.github/workflows/go.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
||||
golangci:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ '1.16','1.17','1.18','1.19','1.20','1.21.4' ]
|
||||
go-version: [ '1.16','1.17','1.18','1.19','1.20','1.21.4' ]
|
||||
name: golangci-lint
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
@@ -90,9 +90,9 @@ func (ak *DefaultAccessToken) GetAccessTokenContext(ctx context.Context) (access
|
||||
return
|
||||
}
|
||||
|
||||
if err = ak.cache.Set(accessTokenCacheKey, resAccessToken.AccessToken, time.Duration(resAccessToken.ExpiresIn-1500)*time.Second); err != nil {
|
||||
return
|
||||
}
|
||||
expires := resAccessToken.ExpiresIn - 1500
|
||||
err = ak.cache.Set(accessTokenCacheKey, resAccessToken.AccessToken, time.Duration(expires)*time.Second)
|
||||
|
||||
accessToken = resAccessToken.AccessToken
|
||||
return
|
||||
}
|
||||
@@ -141,7 +141,7 @@ func (ak *StableAccessToken) GetAccessTokenContext(ctx context.Context) (accessT
|
||||
}
|
||||
|
||||
expires := resAccessToken.ExpiresIn - 300
|
||||
_ = ak.cache.Set(accessTokenCacheKey, resAccessToken.AccessToken, time.Duration(expires)*time.Second)
|
||||
err = ak.cache.Set(accessTokenCacheKey, resAccessToken.AccessToken, time.Duration(expires)*time.Second)
|
||||
|
||||
accessToken = resAccessToken.AccessToken
|
||||
return
|
||||
@@ -219,9 +219,7 @@ func (ak *WorkAccessToken) GetAccessTokenContext(ctx context.Context) (accessTok
|
||||
|
||||
expires := resAccessToken.ExpiresIn - 1500
|
||||
err = ak.cache.Set(accessTokenCacheKey, resAccessToken.AccessToken, time.Duration(expires)*time.Second)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
accessToken = resAccessToken.AccessToken
|
||||
return
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import (
|
||||
"github.com/silenceper/wechat/v2/miniprogram/order"
|
||||
"github.com/silenceper/wechat/v2/miniprogram/privacy"
|
||||
"github.com/silenceper/wechat/v2/miniprogram/qrcode"
|
||||
"github.com/silenceper/wechat/v2/miniprogram/redpacketcover"
|
||||
"github.com/silenceper/wechat/v2/miniprogram/riskcontrol"
|
||||
"github.com/silenceper/wechat/v2/miniprogram/security"
|
||||
"github.com/silenceper/wechat/v2/miniprogram/shortlink"
|
||||
@@ -155,3 +156,8 @@ func (miniProgram *MiniProgram) GetShipping() *order.Shipping {
|
||||
func (miniProgram *MiniProgram) GetMiniDrama() *minidrama.MiniDrama {
|
||||
return minidrama.NewMiniDrama(miniProgram.ctx)
|
||||
}
|
||||
|
||||
// GetRedPacketCover 小程序微信红包封面 API
|
||||
func (miniProgram *MiniProgram) GetRedPacketCover() *redpacketcover.RedPacketCover {
|
||||
return redpacketcover.NewRedPacketCover(miniProgram.ctx)
|
||||
}
|
||||
|
||||
59
miniprogram/redpacketcover/redpacketcover.go
Normal file
59
miniprogram/redpacketcover/redpacketcover.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package redpacketcover
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/silenceper/wechat/v2/miniprogram/context"
|
||||
"github.com/silenceper/wechat/v2/util"
|
||||
)
|
||||
|
||||
const (
|
||||
getRedPacketCoverURL = "https://api.weixin.qq.com/redpacketcover/wxapp/cover_url/get_by_token?access_token=%s"
|
||||
)
|
||||
|
||||
// RedPacketCover struct
|
||||
type RedPacketCover struct {
|
||||
*context.Context
|
||||
}
|
||||
|
||||
// NewRedPacketCover 实例
|
||||
func NewRedPacketCover(context *context.Context) *RedPacketCover {
|
||||
redPacketCover := new(RedPacketCover)
|
||||
redPacketCover.Context = context
|
||||
return redPacketCover
|
||||
}
|
||||
|
||||
// GetRedPacketCoverRequest 获取微信红包封面参数
|
||||
type GetRedPacketCoverRequest struct {
|
||||
// openid 可领取用户的openid
|
||||
OpenID string `json:"openid"`
|
||||
// ctoken 在红包封面平台获取发放ctoken(需要指定可以发放的appid)
|
||||
CToken string `json:"ctoken"`
|
||||
}
|
||||
|
||||
// GetRedPacketCoverResp 获取微信红包封面
|
||||
type GetRedPacketCoverResp struct {
|
||||
util.CommonError
|
||||
Data struct {
|
||||
URL string `json:"url"`
|
||||
} `json:"data"` // 唯一请求标识
|
||||
}
|
||||
|
||||
// GetRedPacketCoverURL 获得指定用户可以领取的红包封面链接。获取参数ctoken参考微信红包封面开放平台
|
||||
// 文档地址: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/red-packet-cover/getRedPacketCoverUrl.html
|
||||
func (cover *RedPacketCover) GetRedPacketCoverURL(coderParams GetRedPacketCoverRequest) (res GetRedPacketCoverResp, err error) {
|
||||
accessToken, err := cover.GetAccessToken()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
uri := fmt.Sprintf(getRedPacketCoverURL, accessToken)
|
||||
response, err := util.PostJSON(uri, coderParams)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// 使用通用方法返回错误
|
||||
err = util.DecodeWithError(response, &res, "GetRedPacketCoverURL")
|
||||
return
|
||||
}
|
||||
387
work/checkin/checkin.go
Normal file
387
work/checkin/checkin.go
Normal file
@@ -0,0 +1,387 @@
|
||||
package checkin
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/silenceper/wechat/v2/util"
|
||||
)
|
||||
|
||||
const (
|
||||
// setScheduleListURL 为打卡人员排班
|
||||
setScheduleListURL = "https://qyapi.weixin.qq.com/cgi-bin/checkin/setcheckinschedulist?access_token=%s"
|
||||
// punchCorrectionURL 为打卡人员补卡
|
||||
punchCorrectionURL = "https://qyapi.weixin.qq.com/cgi-bin/checkin/punch_correction?access_token=%s"
|
||||
// addUserFaceURL 录入打卡人员人脸信息
|
||||
addUserFaceURL = "https://qyapi.weixin.qq.com/cgi-bin/checkin/addcheckinuserface?access_token=%s"
|
||||
// addOptionURL 创建打卡规则
|
||||
addOptionURL = "https://qyapi.weixin.qq.com/cgi-bin/checkin/add_checkin_option?access_token=%s"
|
||||
// updateOptionURL 修改打卡规则
|
||||
updateOptionURL = "https://qyapi.weixin.qq.com/cgi-bin/checkin/update_checkin_option?access_token=%s"
|
||||
// clearOptionURL 清空打卡规则数组元素
|
||||
clearOptionURL = "https://qyapi.weixin.qq.com/cgi-bin/checkin/clear_checkin_option_array_field?access_token=%s"
|
||||
// delOptionURL 删除打卡规则
|
||||
delOptionURL = "https://qyapi.weixin.qq.com/cgi-bin/checkin/del_checkin_option?access_token=%s"
|
||||
)
|
||||
|
||||
// SetScheduleListRequest 为打卡人员排班请求
|
||||
type SetScheduleListRequest struct {
|
||||
GroupID int64 `json:"groupid"`
|
||||
Items []SetScheduleListItem `json:"items"`
|
||||
YearMonth int64 `json:"yearmonth"`
|
||||
}
|
||||
|
||||
// SetScheduleListItem 排班表信息
|
||||
type SetScheduleListItem struct {
|
||||
UserID string `json:"userid"`
|
||||
Day int64 `json:"day"`
|
||||
ScheduleID int64 `json:"schedule_id"`
|
||||
}
|
||||
|
||||
// SetScheduleList 为打卡人员排班
|
||||
// see https://developer.work.weixin.qq.com/document/path/93385
|
||||
func (r *Client) SetScheduleList(req *SetScheduleListRequest) error {
|
||||
var (
|
||||
accessToken string
|
||||
err error
|
||||
)
|
||||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||||
return err
|
||||
}
|
||||
var response []byte
|
||||
if response, err = util.PostJSON(fmt.Sprintf(setScheduleListURL, accessToken), req); err != nil {
|
||||
return err
|
||||
}
|
||||
return util.DecodeWithCommonError(response, "SetScheduleList")
|
||||
}
|
||||
|
||||
// PunchCorrectionRequest 为打卡人员补卡请求
|
||||
type PunchCorrectionRequest struct {
|
||||
UserID string `json:"userid"`
|
||||
ScheduleDateTime int64 `json:"schedule_date_time"`
|
||||
ScheduleCheckinTime int64 `json:"schedule_checkin_time"`
|
||||
CheckinTime int64 `json:"checkin_time"`
|
||||
Remark string `json:"remark"`
|
||||
}
|
||||
|
||||
// PunchCorrection 为打卡人员补卡
|
||||
// see https://developer.work.weixin.qq.com/document/path/95803
|
||||
func (r *Client) PunchCorrection(req *PunchCorrectionRequest) error {
|
||||
var (
|
||||
accessToken string
|
||||
err error
|
||||
)
|
||||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||||
return err
|
||||
}
|
||||
var response []byte
|
||||
if response, err = util.PostJSON(fmt.Sprintf(punchCorrectionURL, accessToken), req); err != nil {
|
||||
return err
|
||||
}
|
||||
return util.DecodeWithCommonError(response, "PunchCorrection")
|
||||
}
|
||||
|
||||
// AddUserFaceRequest 录入打卡人员人脸信息请求
|
||||
type AddUserFaceRequest struct {
|
||||
UserID string `json:"userid"`
|
||||
UserFace string `json:"userface"`
|
||||
}
|
||||
|
||||
// AddUserFace 录入打卡人员人脸信息
|
||||
// see https://developer.work.weixin.qq.com/document/path/93378
|
||||
func (r *Client) AddUserFace(req *AddUserFaceRequest) error {
|
||||
var (
|
||||
accessToken string
|
||||
err error
|
||||
)
|
||||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||||
return err
|
||||
}
|
||||
var response []byte
|
||||
if response, err = util.PostJSON(fmt.Sprintf(addUserFaceURL, accessToken), req); err != nil {
|
||||
return err
|
||||
}
|
||||
return util.DecodeWithCommonError(response, "AddUserFace")
|
||||
}
|
||||
|
||||
// AddOptionRequest 创建打卡规则请求
|
||||
type AddOptionRequest struct {
|
||||
EffectiveNow bool `json:"effective_now,omitempty"`
|
||||
Group OptionGroupRule `json:"group,omitempty"`
|
||||
}
|
||||
|
||||
// OptionGroupRule 打卡规则字段
|
||||
type OptionGroupRule struct {
|
||||
GroupID int64 `json:"groupid,omitempty"`
|
||||
GroupType int64 `json:"grouptype"`
|
||||
GroupName string `json:"groupname"`
|
||||
CheckinDate []OptionGroupRuleCheckinDate `json:"checkindate,omitempty"`
|
||||
SpeWorkdays []OptionGroupSpeWorkdays `json:"spe_workdays,omitempty"`
|
||||
SpeOffDays []OptionGroupSpeOffDays `json:"spe_offdays,omitempty"`
|
||||
SyncHolidays bool `json:"sync_holidays,omitempty"`
|
||||
NeedPhoto bool `json:"need_photo,omitempty"`
|
||||
NoteCanUseLocalPic bool `json:"note_can_use_local_pic,omitempty"`
|
||||
WifiMacInfos []OptionGroupWifiMacInfos `json:"wifimac_infos,omitempty"`
|
||||
LocInfos []OptionGroupLocInfos `json:"loc_infos,omitempty"`
|
||||
AllowCheckinOffWorkday bool `json:"allow_checkin_offworkday,omitempty"`
|
||||
AllowApplyOffWorkday bool `json:"allow_apply_offworkday,omitempty"`
|
||||
Range []OptionGroupRange `json:"range"`
|
||||
WhiteUsers []string `json:"white_users,omitempty"`
|
||||
Type int64 `json:"type,omitempty"`
|
||||
ReporterInfo OptionGroupReporterInfo `json:"reporterinfo,omitempty"`
|
||||
AllowApplyBkCnt int64 `json:"allow_apply_bk_cnt,omitempty"`
|
||||
AllowApplyBkDayLimit int64 `json:"allow_apply_bk_day_limit,omitempty"`
|
||||
BukaLimitNextMonth int64 `json:"buka_limit_next_month,omitempty"`
|
||||
OptionOutRange int64 `json:"option_out_range,omitempty"`
|
||||
ScheduleList []OptionGroupScheduleList `json:"schedulelist,omitempty"`
|
||||
OffWorkIntervalTime int64 `json:"offwork_interval_time,omitempty"`
|
||||
UseFaceDetect bool `json:"use_face_detect,omitempty"`
|
||||
OpenFaceLiveDetect bool `json:"open_face_live_detect,omitempty"`
|
||||
OtInfoV2 OptionGroupOtInfoV2 `json:"ot_info_v2,omitempty"`
|
||||
SyncOutCheckin bool `json:"sync_out_checkin,omitempty"`
|
||||
BukaRemind OptionGroupBukaRemind `json:"buka_remind,omitempty"`
|
||||
BukaRestriction int64 `json:"buka_restriction,omitempty"`
|
||||
SpanDayTime int64 `json:"span_day_time,omitempty"`
|
||||
StandardWorkDuration int64 `json:"standard_work_duration,omitempty"`
|
||||
}
|
||||
|
||||
// OptionGroupRuleCheckinDate 固定时间上下班打卡时间
|
||||
type OptionGroupRuleCheckinDate struct {
|
||||
Workdays []int64 `json:"workdays"`
|
||||
CheckinTime []OptionGroupRuleCheckinTime `json:"checkintime"`
|
||||
FlexTime int64 `json:"flex_time"`
|
||||
AllowFlex bool `json:"allow_flex"`
|
||||
FlexOnDutyTime int64 `json:"flex_on_duty_time"`
|
||||
FlexOffDutyTime int64 `json:"flex_off_duty_time"`
|
||||
MaxAllowArriveEarly int64 `json:"max_allow_arrive_early"`
|
||||
MaxAllowArriveLate int64 `json:"max_allow_arrive_late"`
|
||||
LateRule OptionGroupLateRule `json:"late_rule"`
|
||||
}
|
||||
|
||||
// OptionGroupRuleCheckinTime 工作日上下班打卡时间信息
|
||||
type OptionGroupRuleCheckinTime struct {
|
||||
TimeID int64 `json:"time_id"`
|
||||
WorkSec int64 `json:"work_sec"`
|
||||
OffWorkSec int64 `json:"off_work_sec"`
|
||||
RemindWorkSec int64 `json:"remind_work_sec"`
|
||||
RemindOffWorkSec int64 `json:"remind_off_work_sec"`
|
||||
AllowRest bool `json:"allow_rest"`
|
||||
RestBeginTime int64 `json:"rest_begin_time"`
|
||||
RestEndTime int64 `json:"rest_end_time"`
|
||||
EarliestWorkSec int64 `json:"earliest_work_sec"`
|
||||
LatestWorkSec int64 `json:"latest_work_sec"`
|
||||
EarliestOffWorkSec int64 `json:"earliest_off_work_sec"`
|
||||
LatestOffWorkSec int64 `json:"latest_off_work_sec"`
|
||||
NoNeedCheckOn bool `json:"no_need_checkon"`
|
||||
NoNeedCheckOff bool `json:"no_need_checkoff"`
|
||||
}
|
||||
|
||||
// OptionGroupLateRule 晚走晚到时间规则信息
|
||||
type OptionGroupLateRule struct {
|
||||
OffWorkAfterTime int64 `json:"offwork_after_time"`
|
||||
OnWorkFlexTime int64 `json:"onwork_flex_time"`
|
||||
AllowOffWorkAfterTime int64 `json:"allow_offwork_after_time"`
|
||||
TimeRules []OptionGroupTimeRule `json:"timerules"`
|
||||
}
|
||||
|
||||
// OptionGroupTimeRule 晚走晚到时间规则
|
||||
type OptionGroupTimeRule struct {
|
||||
OffWorkAfterTime int64 `json:"offwork_after_time"`
|
||||
OnWorkFlexTime int64 `json:"onwork_flex_time"`
|
||||
}
|
||||
|
||||
// OptionGroupSpeWorkdays 特殊工作日
|
||||
type OptionGroupSpeWorkdays struct {
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
Notes string `json:"notes"`
|
||||
CheckinTime []OptionGroupCheckinTime `json:"checkintime"`
|
||||
Type int64 `json:"type"`
|
||||
BegTime int64 `json:"begtime"`
|
||||
EndTime int64 `json:"endtime"`
|
||||
}
|
||||
|
||||
// OptionGroupCheckinTime 特殊工作日的上下班打卡时间配置
|
||||
type OptionGroupCheckinTime struct {
|
||||
TimeID int64 `json:"time_id"`
|
||||
WorkSec int64 `json:"work_sec"`
|
||||
OffWorkSec int64 `json:"off_work_sec"`
|
||||
RemindWorkSec int64 `json:"remind_work_sec"`
|
||||
RemindOffWorkSec int64 `json:"remind_off_work_sec"`
|
||||
}
|
||||
|
||||
// OptionGroupSpeOffDays 特殊非工作日
|
||||
type OptionGroupSpeOffDays struct {
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
Notes string `json:"notes"`
|
||||
Type int64 `json:"type"`
|
||||
BegTime int64 `json:"begtime"`
|
||||
EndTime int64 `json:"endtime"`
|
||||
}
|
||||
|
||||
// OptionGroupWifiMacInfos WIFI信息
|
||||
type OptionGroupWifiMacInfos struct {
|
||||
WifiName string `json:"wifiname"`
|
||||
WifiMac string `json:"wifimac"`
|
||||
}
|
||||
|
||||
// OptionGroupLocInfos 地点信息
|
||||
type OptionGroupLocInfos struct {
|
||||
Lat int64 `json:"lat"`
|
||||
Lng int64 `json:"lng"`
|
||||
LocTitle string `json:"loc_title"`
|
||||
LocDetail string `json:"loc_detail"`
|
||||
Distance int64 `json:"distance"`
|
||||
}
|
||||
|
||||
// OptionGroupRange 人员信息
|
||||
type OptionGroupRange struct {
|
||||
PartyID []string `json:"party_id"`
|
||||
UserID []string `json:"userid"`
|
||||
TagID []int64 `json:"tagid"`
|
||||
}
|
||||
|
||||
// OptionGroupReporterInfo 汇报人
|
||||
type OptionGroupReporterInfo struct {
|
||||
Reporters []OptionGroupReporters `json:"reporters"`
|
||||
}
|
||||
|
||||
// OptionGroupReporters 汇报对象
|
||||
type OptionGroupReporters struct {
|
||||
UserID string `json:"userid"`
|
||||
TagID int64 `json:"tagid"`
|
||||
}
|
||||
|
||||
// OptionGroupScheduleList 自定义排班规则所有排班
|
||||
type OptionGroupScheduleList struct {
|
||||
ScheduleID int64 `json:"schedule_id"`
|
||||
ScheduleName string `json:"schedule_name"`
|
||||
TimeSection []OptionGroupTimeSection `json:"time_section"`
|
||||
AllowFlex bool `json:"allow_flex"`
|
||||
FlexOnDutyTime int64 `json:"flex_on_duty_time"`
|
||||
FlexOffDutyTime int64 `json:"flex_off_duty_time"`
|
||||
LateRule OptionGroupLateRule `json:"late_rule"`
|
||||
MaxAllowArriveEarly int64 `json:"max_allow_arrive_early"`
|
||||
MaxAllowArriveLate int64 `json:"max_allow_arrive_late"`
|
||||
}
|
||||
|
||||
// OptionGroupTimeSection 班次上下班时段信息
|
||||
type OptionGroupTimeSection struct {
|
||||
TimeID int64 `json:"time_id"`
|
||||
WorkSec int64 `json:"work_sec"`
|
||||
OffWorkSec int64 `json:"off_work_sec"`
|
||||
RemindWorkSec int64 `json:"remind_work_sec"`
|
||||
RemindOffWorkSec int64 `json:"remind_off_work_sec"`
|
||||
RestBeginTime int64 `json:"rest_begin_time"`
|
||||
RestEndTime int64 `json:"rest_end_time"`
|
||||
AllowRest bool `json:"allow_rest"`
|
||||
EarliestWorkSec int64 `json:"earliest_work_sec"`
|
||||
LatestWorkSec int64 `json:"latest_work_sec"`
|
||||
EarliestOffWorkSec int64 `json:"earliest_off_work_sec"`
|
||||
LatestOffWorkSec int64 `json:"latest_off_work_sec"`
|
||||
NoNeedCheckOn bool `json:"no_need_checkon"`
|
||||
NoNeedCheckOff bool `json:"no_need_checkoff"`
|
||||
}
|
||||
|
||||
// OptionGroupOtInfoV2 加班配置
|
||||
type OptionGroupOtInfoV2 struct {
|
||||
WorkdayConf OptionGroupWorkdayConf `json:"workdayconf"`
|
||||
}
|
||||
|
||||
// OptionGroupWorkdayConf 工作日加班配置
|
||||
type OptionGroupWorkdayConf struct {
|
||||
AllowOt bool `json:"allow_ot"`
|
||||
Type int64 `json:"type"`
|
||||
}
|
||||
|
||||
// OptionGroupBukaRemind 补卡提醒
|
||||
type OptionGroupBukaRemind struct {
|
||||
OpenRemind bool `json:"open_remind"`
|
||||
BukaRemindDay int64 `json:"buka_remind_day"`
|
||||
BukaRemindMonth int64 `json:"buka_remind_month"`
|
||||
}
|
||||
|
||||
// AddOption 创建打卡规则
|
||||
// see https://developer.work.weixin.qq.com/document/path/98041#%E5%88%9B%E5%BB%BA%E6%89%93%E5%8D%A1%E8%A7%84%E5%88%99
|
||||
func (r *Client) AddOption(req *AddOptionRequest) error {
|
||||
var (
|
||||
accessToken string
|
||||
err error
|
||||
)
|
||||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||||
return err
|
||||
}
|
||||
var response []byte
|
||||
if response, err = util.PostJSON(fmt.Sprintf(addOptionURL, accessToken), req); err != nil {
|
||||
return err
|
||||
}
|
||||
return util.DecodeWithCommonError(response, "AddOption")
|
||||
}
|
||||
|
||||
// UpdateOptionRequest 修改打卡规则请求
|
||||
type UpdateOptionRequest struct {
|
||||
EffectiveNow bool `json:"effective_now,omitempty"`
|
||||
Group OptionGroupRule `json:"group,omitempty"`
|
||||
}
|
||||
|
||||
// UpdateOption 修改打卡规则
|
||||
// see https://developer.work.weixin.qq.com/document/path/98041#%E4%BF%AE%E6%94%B9%E6%89%93%E5%8D%A1%E8%A7%84%E5%88%99
|
||||
func (r *Client) UpdateOption(req *UpdateOptionRequest) error {
|
||||
var (
|
||||
accessToken string
|
||||
err error
|
||||
)
|
||||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||||
return err
|
||||
}
|
||||
var response []byte
|
||||
if response, err = util.PostJSON(fmt.Sprintf(updateOptionURL, accessToken), req); err != nil {
|
||||
return err
|
||||
}
|
||||
return util.DecodeWithCommonError(response, "UpdateOption")
|
||||
}
|
||||
|
||||
// ClearOptionRequest 清空打卡规则数组元素请求
|
||||
type ClearOptionRequest struct {
|
||||
GroupID int64 `json:"groupid"`
|
||||
ClearField []int64 `json:"clear_field"`
|
||||
EffectiveNow bool `json:"effective_now"`
|
||||
}
|
||||
|
||||
// ClearOption 清空打卡规则数组元素
|
||||
// see https://developer.work.weixin.qq.com/document/path/98041#%E6%B8%85%E7%A9%BA%E6%89%93%E5%8D%A1%E8%A7%84%E5%88%99%E6%95%B0%E7%BB%84%E5%85%83%E7%B4%A0
|
||||
func (r *Client) ClearOption(req *ClearOptionRequest) error {
|
||||
var (
|
||||
accessToken string
|
||||
err error
|
||||
)
|
||||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||||
return err
|
||||
}
|
||||
var response []byte
|
||||
if response, err = util.PostJSON(fmt.Sprintf(clearOptionURL, accessToken), req); err != nil {
|
||||
return err
|
||||
}
|
||||
return util.DecodeWithCommonError(response, "ClearOption")
|
||||
}
|
||||
|
||||
// DelOptionRequest 删除打卡规则请求
|
||||
type DelOptionRequest struct {
|
||||
GroupID int64 `json:"groupid"`
|
||||
EffectiveNow bool `json:"effective_now"`
|
||||
}
|
||||
|
||||
// DelOption 删除打卡规则
|
||||
// see https://developer.work.weixin.qq.com/document/path/98041#%E5%88%A0%E9%99%A4%E6%89%93%E5%8D%A1%E8%A7%84%E5%88%99
|
||||
func (r *Client) DelOption(req *DelOptionRequest) error {
|
||||
var (
|
||||
accessToken string
|
||||
err error
|
||||
)
|
||||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||||
return err
|
||||
}
|
||||
var response []byte
|
||||
if response, err = util.PostJSON(fmt.Sprintf(delOptionURL, accessToken), req); err != nil {
|
||||
return err
|
||||
}
|
||||
return util.DecodeWithCommonError(response, "DelOption")
|
||||
}
|
||||
Reference in New Issue
Block a user