media.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package material
  2. import (
  3. "fmt"
  4. "github.com/silenceper/wechat/v2/util"
  5. )
  6. const (
  7. // uploadImgURL 上传图片
  8. uploadImgURL = "https://qyapi.weixin.qq.com/cgi-bin/media/uploadimg?access_token=%s"
  9. // uploadTempFile 上传临时素材
  10. uploadTempFile = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=%s&type=%s"
  11. // uploadAttachment 上传附件资源
  12. uploadAttachment = "https://qyapi.weixin.qq.com/cgi-bin/media/upload_attachment?access_token=%s&media_type=%s&attachment_type=%d"
  13. )
  14. // UploadImgResponse 上传图片响应
  15. type UploadImgResponse struct {
  16. util.CommonError
  17. URL string `json:"url"`
  18. }
  19. // UploadTempFileResponse 上传临时素材响应
  20. type UploadTempFileResponse struct {
  21. util.CommonError
  22. MediaID string `json:"media_id"`
  23. CreateAt string `json:"created_at"`
  24. Type string `json:"type"`
  25. }
  26. // UploadAttachmentResponse 上传资源附件响应
  27. type UploadAttachmentResponse struct {
  28. util.CommonError
  29. MediaID string `json:"media_id"`
  30. CreateAt int64 `json:"created_at"`
  31. Type string `json:"type"`
  32. }
  33. // UploadImg 上传图片
  34. // @see https://developer.work.weixin.qq.com/document/path/90256
  35. func (r *Client) UploadImg(filename string) (*UploadImgResponse, error) {
  36. var (
  37. accessToken string
  38. err error
  39. )
  40. if accessToken, err = r.GetAccessToken(); err != nil {
  41. return nil, err
  42. }
  43. var response []byte
  44. if response, err = util.PostFile("media", filename, fmt.Sprintf(uploadImgURL, accessToken)); err != nil {
  45. return nil, err
  46. }
  47. result := &UploadImgResponse{}
  48. if err = util.DecodeWithError(response, result, "UploadImg"); err != nil {
  49. return nil, err
  50. }
  51. return result, nil
  52. }
  53. // UploadTempFile 上传临时素材
  54. // @see https://developer.work.weixin.qq.com/document/path/90253
  55. // @mediaType 媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file)
  56. func (r *Client) UploadTempFile(filename string, mediaType string) (*UploadTempFileResponse, error) {
  57. var (
  58. accessToken string
  59. err error
  60. )
  61. if accessToken, err = r.GetAccessToken(); err != nil {
  62. return nil, err
  63. }
  64. var response []byte
  65. if response, err = util.PostFile("media", filename, fmt.Sprintf(uploadTempFile, accessToken, mediaType)); err != nil {
  66. return nil, err
  67. }
  68. result := &UploadTempFileResponse{}
  69. if err = util.DecodeWithError(response, result, "UploadTempFile"); err != nil {
  70. return nil, err
  71. }
  72. return result, nil
  73. }
  74. // UploadAttachment 上传附件资源
  75. // @see https://developer.work.weixin.qq.com/document/path/95098
  76. // @mediaType 媒体文件类型,分别有图片(image)、视频(video)、普通文件(file)
  77. // @attachment_type 附件类型,不同的附件类型用于不同的场景。1:朋友圈;2:商品图册
  78. func (r *Client) UploadAttachment(filename string, mediaType string, attachmentType int) (*UploadAttachmentResponse, error) {
  79. var (
  80. accessToken string
  81. err error
  82. )
  83. if accessToken, err = r.GetAccessToken(); err != nil {
  84. return nil, err
  85. }
  86. var response []byte
  87. if response, err = util.PostFile("media", filename, fmt.Sprintf(uploadAttachment, accessToken, mediaType, attachmentType)); err != nil {
  88. return nil, err
  89. }
  90. result := &UploadAttachmentResponse{}
  91. if err = util.DecodeWithError(response, result, "UploadAttachment"); err != nil {
  92. return nil, err
  93. }
  94. return result, nil
  95. }