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
|
# WeChat SDK for Go
|
||||||
[](https://travis-ci.org/silenceper/wechat)
|
[](https://travis-ci.org/silenceper/wechat)
|
||||||
[](https://goreportcard.com/report/github.com/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)
|
[素材管理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 (
|
const (
|
||||||
addNewsURL = "https://api.weixin.qq.com/cgi-bin/material/add_news"
|
addNewsURL = "https://api.weixin.qq.com/cgi-bin/material/add_news"
|
||||||
addMaterialURL = "https://api.weixin.qq.com/cgi-bin/material/add_material"
|
addMaterialURL = "https://api.weixin.qq.com/cgi-bin/material/add_material"
|
||||||
delMaterialURL = "https://api.weixin.qq.com/cgi-bin/material/del_material"
|
delMaterialURL = "https://api.weixin.qq.com/cgi-bin/material/del_material"
|
||||||
getMaterialURL = "https://api.weixin.qq.com/cgi-bin/material/get_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 素材管理
|
//Material 素材管理
|
||||||
@@ -55,6 +70,9 @@ func (material *Material) GetNews(id string) ([]*Article, error) {
|
|||||||
}
|
}
|
||||||
req.MediaID = id
|
req.MediaID = id
|
||||||
responseBytes, err := util.PostJSON(uri, req)
|
responseBytes, err := util.PostJSON(uri, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
var res struct {
|
var res struct {
|
||||||
NewsItem []*Article `json:"news_item"`
|
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)
|
uri := fmt.Sprintf("%s?access_token=%s", addNewsURL, accessToken)
|
||||||
responseBytes, err := util.PostJSON(uri, req)
|
responseBytes, err := util.PostJSON(uri, req)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
var res resArticles
|
var res resArticles
|
||||||
err = json.Unmarshal(responseBytes, &res)
|
err = json.Unmarshal(responseBytes, &res)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -112,6 +134,7 @@ type resAddMaterial struct {
|
|||||||
func (material *Material) AddMaterial(mediaType MediaType, filename string) (mediaID string, url string, err error) {
|
func (material *Material) AddMaterial(mediaType MediaType, filename string) (mediaID string, url string, err error) {
|
||||||
if mediaType == MediaTypeVideo {
|
if mediaType == MediaTypeVideo {
|
||||||
err = errors.New("永久视频素材上传使用 AddVideo 方法")
|
err = errors.New("永久视频素材上传使用 AddVideo 方法")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
var accessToken string
|
var accessToken string
|
||||||
accessToken, err = material.GetAccessToken()
|
accessToken, err = material.GetAccessToken()
|
||||||
@@ -216,3 +239,59 @@ func (material *Material) DeleteMaterial(mediaID string) error {
|
|||||||
|
|
||||||
return util.DecodeWithCommonError(response, "DeleteMaterial")
|
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