فهرست منبع

feat: Add Checkin (#719)

* feat: Add Checkin

- Implement 'getcheckindata' API

* refactor: Change variable names

* refactor: Change struct name
Feng 2 سال پیش
والد
کامیت
b4f2d1793c
3فایلهای تغییر یافته به همراه92 افزوده شده و 0 حذف شده
  1. 69 0
      work/checkin/checkin.go
  2. 17 0
      work/checkin/client.go
  3. 6 0
      work/work.go

+ 69 - 0
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
+}

+ 17 - 0
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,
+	}
+}

+ 6 - 0
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)
+}