mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-04 21:02:25 +08:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b578ebd3c | ||
|
|
843ed3fa8a | ||
|
|
8762af2441 | ||
|
|
bfd23056eb | ||
|
|
fedcd371d0 | ||
|
|
6569d47301 |
13
README.md
13
README.md
@@ -1,3 +1,5 @@
|
||||
## 📢 注意: 此分支为v1版本,已不再维护更新,请切换至 [v2](https://github.com/silenceper/wechat/tree/release-2.0)!
|
||||
|
||||
# WeChat SDK for Go
|
||||
[](https://travis-ci.org/silenceper/wechat)
|
||||
[](https://goreportcard.com/report/github.com/silenceper/wechat)
|
||||
@@ -530,6 +532,17 @@ type Config struct {
|
||||
|
||||
[素材管理API](https://godoc.org/github.com/silenceper/wechat/material#Material)
|
||||
|
||||
### 批量获取永久素材
|
||||
|
||||
```go
|
||||
list, err := wc.GetMaterial().BatchGetMaterial(material.PermanentMaterialTypeNews, 0, 10)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
fmt.Println(list)
|
||||
```
|
||||
|
||||
## 小程序开发
|
||||
|
||||
获取小程序操作对象
|
||||
|
||||
@@ -10,10 +10,25 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
addNewsURL = "https://api.weixin.qq.com/cgi-bin/material/add_news"
|
||||
addMaterialURL = "https://api.weixin.qq.com/cgi-bin/material/add_material"
|
||||
delMaterialURL = "https://api.weixin.qq.com/cgi-bin/material/del_material"
|
||||
getMaterialURL = "https://api.weixin.qq.com/cgi-bin/material/get_material"
|
||||
addNewsURL = "https://api.weixin.qq.com/cgi-bin/material/add_news"
|
||||
addMaterialURL = "https://api.weixin.qq.com/cgi-bin/material/add_material"
|
||||
delMaterialURL = "https://api.weixin.qq.com/cgi-bin/material/del_material"
|
||||
getMaterialURL = "https://api.weixin.qq.com/cgi-bin/material/get_material"
|
||||
batchGetMaterialURL = "https://api.weixin.qq.com/cgi-bin/material/batchget_material"
|
||||
)
|
||||
|
||||
//PermanentMaterialType 永久素材类型
|
||||
type PermanentMaterialType string
|
||||
|
||||
const (
|
||||
//PermanentMaterialTypeImage 永久素材图片类型(image)
|
||||
PermanentMaterialTypeImage PermanentMaterialType = "image"
|
||||
//PermanentMaterialTypeVideo 永久素材视频类型(video)
|
||||
PermanentMaterialTypeVideo PermanentMaterialType = "video"
|
||||
//PermanentMaterialTypeVoice 永久素材语音类型 (voice)
|
||||
PermanentMaterialTypeVoice PermanentMaterialType = "voice"
|
||||
//PermanentMaterialTypeNews 永久素材图文类型(news)
|
||||
PermanentMaterialTypeNews PermanentMaterialType = "news"
|
||||
)
|
||||
|
||||
//Material 素材管理
|
||||
@@ -55,6 +70,9 @@ func (material *Material) GetNews(id string) ([]*Article, error) {
|
||||
}
|
||||
req.MediaID = id
|
||||
responseBytes, err := util.PostJSON(uri, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var res struct {
|
||||
NewsItem []*Article `json:"news_item"`
|
||||
@@ -91,6 +109,10 @@ func (material *Material) AddNews(articles []*Article) (mediaID string, err erro
|
||||
|
||||
uri := fmt.Sprintf("%s?access_token=%s", addNewsURL, accessToken)
|
||||
responseBytes, err := util.PostJSON(uri, req)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
var res resArticles
|
||||
err = json.Unmarshal(responseBytes, &res)
|
||||
if err != nil {
|
||||
@@ -112,6 +134,7 @@ type resAddMaterial struct {
|
||||
func (material *Material) AddMaterial(mediaType MediaType, filename string) (mediaID string, url string, err error) {
|
||||
if mediaType == MediaTypeVideo {
|
||||
err = errors.New("永久视频素材上传使用 AddVideo 方法")
|
||||
return
|
||||
}
|
||||
var accessToken string
|
||||
accessToken, err = material.GetAccessToken()
|
||||
@@ -216,3 +239,59 @@ func (material *Material) DeleteMaterial(mediaID string) error {
|
||||
|
||||
return util.DecodeWithCommonError(response, "DeleteMaterial")
|
||||
}
|
||||
|
||||
//ArticleList 永久素材列表
|
||||
type ArticleList struct {
|
||||
TotalCount int64 `json:"total_count"`
|
||||
ItemCount int64 `json:"item_count"`
|
||||
Item []ArticleListItem `json:"item"`
|
||||
}
|
||||
|
||||
//ArticleListItem 用于ArticleList的item节点
|
||||
type ArticleListItem struct {
|
||||
MediaID string `json:"media_id"`
|
||||
Content ArticleListContent `json:"content"`
|
||||
Name string `json:"name"`
|
||||
URL string `json:"url"`
|
||||
UpdateTime int64 `json:"update_time"`
|
||||
}
|
||||
|
||||
//ArticleListContent 用于ArticleListItem的content节点
|
||||
type ArticleListContent struct {
|
||||
NewsItem []Article `json:"news_item"`
|
||||
UpdateTime int64 `json:"update_time"`
|
||||
CreateTime int64 `json:"create_time"`
|
||||
}
|
||||
|
||||
//reqBatchGetMaterial BatchGetMaterial请求参数
|
||||
type reqBatchGetMaterial struct {
|
||||
Type PermanentMaterialType `json:"type"`
|
||||
Count int64 `json:"count"`
|
||||
Offset int64 `json:"offset"`
|
||||
}
|
||||
|
||||
// BatchGetMaterial 批量获取永久素材
|
||||
//reference:https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Get_materials_list.html
|
||||
func (material *Material) BatchGetMaterial(permanentMaterialType PermanentMaterialType, offset, count int64) (list ArticleList, err error) {
|
||||
var accessToken string
|
||||
accessToken, err = material.GetAccessToken()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
uri := fmt.Sprintf("%s?access_token=%s", batchGetMaterialURL, accessToken)
|
||||
|
||||
req := reqBatchGetMaterial{
|
||||
Type: permanentMaterialType,
|
||||
Offset: offset,
|
||||
Count: count,
|
||||
}
|
||||
|
||||
var response []byte
|
||||
response, err = util.PostJSON(uri, req)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = util.DecodeWithError(response, &list, "BatchGetMaterial")
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user