department.go 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package addresslist
  2. import (
  3. "fmt"
  4. "github.com/silenceper/wechat/v2/util"
  5. )
  6. const (
  7. // departmentSimpleListURL 获取子部门ID列表
  8. departmentSimpleListURL = "https://qyapi.weixin.qq.com/cgi-bin/department/simplelist?access_token=%s&id=%d"
  9. // departmentListURL 获取部门列表
  10. departmentListURL = "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=%s"
  11. )
  12. type (
  13. // DepartmentSimpleListResponse 获取子部门ID列表响应
  14. DepartmentSimpleListResponse struct {
  15. util.CommonError
  16. DepartmentID []*DepartmentID `json:"department_id"`
  17. }
  18. // DepartmentID 子部门ID
  19. DepartmentID struct {
  20. ID int `json:"id"`
  21. ParentID int `json:"parentid"`
  22. Order int `json:"order"`
  23. }
  24. // DepartmentListResponse 获取部门列表响应
  25. DepartmentListResponse struct {
  26. util.CommonError
  27. Department []*Department `json:"department"`
  28. }
  29. // Department 部门列表数据
  30. Department struct {
  31. ID int `json:"id"` // 创建的部门id
  32. Name string `json:"name"` // 部门名称
  33. NameEn string `json:"name_en"` // 英文名称
  34. DepartmentLeader []string `json:"department_leader"` // 部门负责人的UserID
  35. ParentID int `json:"parentid"` // 父部门id。根部门为1
  36. Order int `json:"order"` // 在父部门中的次序值。order值大的排序靠前
  37. }
  38. )
  39. // DepartmentSimpleList 获取子部门ID列表
  40. // see https://developer.work.weixin.qq.com/document/path/95350
  41. func (r *Client) DepartmentSimpleList(departmentID int) ([]*DepartmentID, error) {
  42. var (
  43. accessToken string
  44. err error
  45. )
  46. if accessToken, err = r.GetAccessToken(); err != nil {
  47. return nil, err
  48. }
  49. var response []byte
  50. if response, err = util.HTTPGet(fmt.Sprintf(departmentSimpleListURL, accessToken, departmentID)); err != nil {
  51. return nil, err
  52. }
  53. result := &DepartmentSimpleListResponse{}
  54. if err = util.DecodeWithError(response, result, "DepartmentSimpleList"); err != nil {
  55. return nil, err
  56. }
  57. return result.DepartmentID, nil
  58. }
  59. // DepartmentList 获取部门列表
  60. // @desc https://developer.work.weixin.qq.com/document/path/90208
  61. func (r *Client) DepartmentList() ([]*Department, error) {
  62. // 获取accessToken
  63. accessToken, err := r.GetAccessToken()
  64. if err != nil {
  65. return nil, err
  66. }
  67. // 发起http请求
  68. response, err := util.HTTPGet(fmt.Sprintf(departmentListURL, accessToken))
  69. if err != nil {
  70. return nil, err
  71. }
  72. // 按照结构体解析返回值
  73. result := &DepartmentListResponse{}
  74. if err = util.DecodeWithError(response, result, "DepartmentList"); err != nil {
  75. return nil, err
  76. }
  77. // 返回数据
  78. return result.Department, err
  79. }