github.com/chanxuehong/wechat@v0.0.0-20230222024006-36f0325263cd/mp/dkf/account/head_img.go (about) 1 package account 2 3 import ( 4 "io" 5 "os" 6 "path/filepath" 7 8 "github.com/chanxuehong/wechat/mp/core" 9 ) 10 11 // UploadHeadImage 上传客服头像. 12 func UploadHeadImage(clt *core.Client, kfAccount, imageFilePath string) (err error) { 13 file, err := os.Open(imageFilePath) 14 if err != nil { 15 return 16 } 17 defer file.Close() 18 19 return UploadHeadImageFromReader(clt, kfAccount, filepath.Base(imageFilePath), file) 20 } 21 22 // UploadHeadImageFromReader 上传客服头像. 23 // 24 // NOTE: 参数 filename 不是文件路径, 是 multipart/form-data 里面 filename 的值. 25 func UploadHeadImageFromReader(clt *core.Client, kfAccount, filename string, reader io.Reader) (err error) { 26 // TODO 27 // incompleteURL := "https://api.weixin.qq.com/customservice/kfaccount/uploadheadimg?kf_account=" + 28 // url.QueryEscape(kfAccount) + "&access_token=" 29 incompleteURL := "https://api.weixin.qq.com/customservice/kfaccount/uploadheadimg?kf_account=" + 30 kfAccount + "&access_token=" 31 32 var fields = []core.MultipartFormField{{ 33 IsFile: true, 34 Name: "media", 35 FileName: filename, 36 Value: reader, 37 }} 38 var result core.Error 39 if err = clt.PostMultipartForm(incompleteURL, fields, &result); err != nil { 40 return 41 } 42 if result.ErrCode != core.ErrCodeOK { 43 err = &result 44 return 45 } 46 return 47 }