github.com/chanxuehong/wechat@v0.0.0-20230222024006-36f0325263cd/mp/datacube/user.go (about)

     1  package datacube
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/chanxuehong/wechat/mp/core"
     7  )
     8  
     9  // 用户增减数据
    10  type UserSummaryData struct {
    11  	RefDate string `json:"ref_date"` // 数据的日期, YYYY-MM-DD 格式
    12  
    13  	// 用户的渠道, 数值代表的含义如下:
    14  	// 0  代表其他
    15  	// 1  xxx(文档没有说明)
    16  	// 2  xxx(文档没有说明)
    17  	// 3  代表扫二维码
    18  	// 4  xxx(文档没有说明)
    19  	// 5  xxx(文档没有说明)
    20  	// 17 代表名片分享
    21  	// 35 代表搜号码(即微信添加朋友页的搜索)
    22  	// 39 代表查询微信公众帐号
    23  	// 43 代表图文页右上角菜单
    24  	UserSource int `json:"user_source"`
    25  
    26  	NewUser    int `json:"new_user"`    // 新增的用户数量
    27  	CancelUser int `json:"cancel_user"` // 取消关注的用户数量, new_user 减去 cancel_user即为净增用户数量
    28  }
    29  
    30  // 获取用户增减数据.
    31  func GetUserSummary(clt *core.Client, req *Request) (list []UserSummaryData, err error) {
    32  	if req == nil {
    33  		err = errors.New("nil Request")
    34  		return
    35  	}
    36  
    37  	var result struct {
    38  		core.Error
    39  		List []UserSummaryData `json:"list"`
    40  	}
    41  
    42  	incompleteURL := "https://api.weixin.qq.com/datacube/getusersummary?access_token="
    43  	if err = clt.PostJSON(incompleteURL, req, &result); err != nil {
    44  		return
    45  	}
    46  
    47  	if result.ErrCode != core.ErrCodeOK {
    48  		err = &result.Error
    49  		return
    50  	}
    51  	list = result.List
    52  	return
    53  }
    54  
    55  // 累计用户数据
    56  type UserCumulateData struct {
    57  	RefDate      string `json:"ref_date"`      // 数据的日期, YYYY-MM-DD 格式
    58  	UserSource   int    `json:"user_source"`   // 返回的 json 有这个字段, 文档中没有, 都是 0 值, 可能没有实际意义!!!
    59  	CumulateUser int    `json:"cumulate_user"` // 总用户量
    60  }
    61  
    62  // 获取累计用户数据.
    63  func GetUserCumulate(clt *core.Client, req *Request) (list []UserCumulateData, err error) {
    64  	if req == nil {
    65  		err = errors.New("nil Request")
    66  		return
    67  	}
    68  
    69  	var result struct {
    70  		core.Error
    71  		List []UserCumulateData `json:"list"`
    72  	}
    73  
    74  	incompleteURL := "https://api.weixin.qq.com/datacube/getusercumulate?access_token="
    75  	if err = clt.PostJSON(incompleteURL, req, &result); err != nil {
    76  		return
    77  	}
    78  
    79  	if result.ErrCode != core.ErrCodeOK {
    80  		err = &result.Error
    81  		return
    82  	}
    83  	list = result.List
    84  	return
    85  }