media.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. )
  12. // UploadImgResponse 上传图片响应
  13. type UploadImgResponse struct {
  14. util.CommonError
  15. URL string `json:"url"`
  16. }
  17. // UploadTempFileResponse 上传临时素材响应
  18. type UploadTempFileResponse struct {
  19. util.CommonError
  20. MediaID string `json:"media_id"`
  21. CreateAt string `json:"created_at"`
  22. Type string `json:"type"`
  23. }
  24. // UploadImg 上传图片
  25. // @see https://developer.work.weixin.qq.com/document/path/90256
  26. func (r *Client) UploadImg(filename string) (*UploadImgResponse, error) {
  27. var (
  28. accessToken string
  29. err error
  30. )
  31. if accessToken, err = r.GetAccessToken(); err != nil {
  32. return nil, err
  33. }
  34. var response []byte
  35. if response, err = util.PostFile("media", filename, fmt.Sprintf(uploadImgURL, accessToken)); err != nil {
  36. return nil, err
  37. }
  38. result := &UploadImgResponse{}
  39. if err = util.DecodeWithError(response, result, "UploadImg"); err != nil {
  40. return nil, err
  41. }
  42. return result, nil
  43. }
  44. // UploadTempFile 上传临时素材
  45. // @see https://developer.work.weixin.qq.com/document/path/90253
  46. // @mediaType 媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file)
  47. func (r *Client) UploadTempFile(filename string, mediaType string) (*UploadTempFileResponse, error) {
  48. var (
  49. accessToken string
  50. err error
  51. )
  52. if accessToken, err = r.GetAccessToken(); err != nil {
  53. return nil, err
  54. }
  55. var response []byte
  56. if response, err = util.PostFile("media", filename, fmt.Sprintf(uploadTempFile, accessToken, mediaType)); err != nil {
  57. return nil, err
  58. }
  59. result := &UploadTempFileResponse{}
  60. if err = util.DecodeWithError(response, result, "UploadTempFile"); err != nil {
  61. return nil, err
  62. }
  63. return result, nil
  64. }