From b4f2d1793cc2bf97f5a3fd865bdcad7dec8c3b22 Mon Sep 17 00:00:00 2001 From: Feng <24779889+shfc@users.noreply.github.com> Date: Sun, 24 Sep 2023 10:43:41 +0800 Subject: [PATCH] feat: Add Checkin (#719) * feat: Add Checkin - Implement 'getcheckindata' API * refactor: Change variable names * refactor: Change struct name --- work/checkin/checkin.go | 69 +++++++++++++++++++++++++++++++++++++++++ work/checkin/client.go | 17 ++++++++++ work/work.go | 6 ++++ 3 files changed, 92 insertions(+) create mode 100644 work/checkin/checkin.go create mode 100644 work/checkin/client.go diff --git a/work/checkin/checkin.go b/work/checkin/checkin.go new file mode 100644 index 0000000..7dbd0a3 --- /dev/null +++ b/work/checkin/checkin.go @@ -0,0 +1,69 @@ +package checkin + +import ( + "fmt" + + "github.com/silenceper/wechat/v2/util" +) + +const ( + // getCheckinDataURL 获取打卡记录数据 + getCheckinDataURL = "https://qyapi.weixin.qq.com/cgi-bin/checkin/getcheckindata?access_token=%s" +) + +type ( + // GetCheckinDataRequest 获取打卡记录数据请求 + GetCheckinDataRequest struct { + OpenCheckinDataType int64 `json:"opencheckindatatype"` + StartTime int64 `json:"starttime"` + EndTime int64 `json:"endtime"` + UserIDList []string `json:"useridlist"` + } + // GetCheckinDataResponse 获取打卡记录数据响应 + GetCheckinDataResponse struct { + util.CommonError + CheckinData []*GetCheckinDataItem `json:"checkindata"` + } + // GetCheckinDataItem 打卡记录数据 + GetCheckinDataItem struct { + UserID string `json:"userid"` + GroupName string `json:"groupname"` + CheckinType string `json:"checkin_type"` + ExceptionType string `json:"exception_type"` + CheckinTime int64 `json:"checkin_time"` + LocationTitle string `json:"location_title"` + LocationDetail string `json:"location_detail"` + WifiName string `json:"wifiname"` + Notes string `json:"notes"` + WifiMac string `json:"wifimac"` + MediaIDs []string `json:"mediaids"` + SchCheckinTime int64 `json:"sch_checkin_time"` + GroupID int64 `json:"groupid"` + ScheduleID int64 `json:"schedule_id"` + TimelineID int64 `json:"timeline_id"` + Lat int64 `json:"lat,omitempty"` + Lng int64 `json:"lng,omitempty"` + DeviceID string `json:"deviceid,omitempty"` + } +) + +// GetCheckinData 获取打卡记录数据 +// @see https://developer.work.weixin.qq.com/document/path/90262 +func (r *Client) GetCheckinData(req *GetCheckinDataRequest) (*GetCheckinDataResponse, error) { + var ( + accessToken string + err error + ) + if accessToken, err = r.GetAccessToken(); err != nil { + return nil, err + } + var response []byte + if response, err = util.PostJSON(fmt.Sprintf(getCheckinDataURL, accessToken), req); err != nil { + return nil, err + } + result := &GetCheckinDataResponse{} + if err = util.DecodeWithError(response, result, "GetCheckinData"); err != nil { + return nil, err + } + return result, nil +} diff --git a/work/checkin/client.go b/work/checkin/client.go new file mode 100644 index 0000000..95b9374 --- /dev/null +++ b/work/checkin/client.go @@ -0,0 +1,17 @@ +package checkin + +import ( + "github.com/silenceper/wechat/v2/work/context" +) + +// Client 打卡接口实例 +type Client struct { + *context.Context +} + +// NewClient 初始化实例 +func NewClient(ctx *context.Context) *Client { + return &Client{ + ctx, + } +} diff --git a/work/work.go b/work/work.go index 286dce4..24c5773 100644 --- a/work/work.go +++ b/work/work.go @@ -4,6 +4,7 @@ import ( "github.com/silenceper/wechat/v2/credential" "github.com/silenceper/wechat/v2/work/addresslist" "github.com/silenceper/wechat/v2/work/appchat" + "github.com/silenceper/wechat/v2/work/checkin" "github.com/silenceper/wechat/v2/work/config" "github.com/silenceper/wechat/v2/work/context" "github.com/silenceper/wechat/v2/work/externalcontact" @@ -85,3 +86,8 @@ func (wk *Work) GetAppChat() *appchat.Client { func (wk *Work) GetInvoice() *invoice.Client { return invoice.NewClient(wk.ctx) } + +// GetCheckin 获取打卡接口实例 +func (wk *Work) GetCheckin() *checkin.Client { + return checkin.NewClient(wk.ctx) +}