package wechatunion import ( "encoding/json" "errors" "fmt" "net/http" ) type PromotionAddResult struct { Errcode int `json:"errcode"` Errmsg string `json:"errmsg"` Pid string `json:"pid"` // 推广位ID,PID } // PromotionAdd 添加推广位 https://developers.weixin.qq.com/doc/ministore/union/access-guidelines/promoter/api/promotion.html func (app *App) PromotionAdd(promotionSourceName string) (result PromotionAddResult, err error) { if len(app.AccessToken) <= 0 { return result, errors.New("调用凭证异常") } if len(promotionSourceName) > 20 { return result, errors.New(fmt.Sprintf("推广位名称(最长20个字,名称不可重复):%d", len(promotionSourceName))) } // request body, err := app.request(fmt.Sprintf("https://api.weixin.qq.com/union/promoter/promotion/add?access_token%s", app.AccessToken), map[string]interface{}{ "promotionSourceName": promotionSourceName, }, http.MethodPost) if err != nil { return result, err } err = json.Unmarshal(body, &result) if err != nil { return result, err } if result.Errcode == 14005 { return result, errors.New(fmt.Sprintf("推广位数量达到上限:%s", err)) } if result.Errcode == 14007 { return result, errors.New(fmt.Sprintf("推广位名称重复:%s", err)) } return result, err } type PromotionDel struct { PromotionSourcePid string `json:"promotionSourcePid"` // 推广位PID PromotionSourceName string `json:"promotionSourceName"` // 推广位名称 } type PromotionDelResult struct { Errcode int `json:"errcode"` Errmsg string `json:"errmsg"` } // PromotionDel 删除某个推广位 https://developers.weixin.qq.com/doc/ministore/union/access-guidelines/promoter/api/promotion.html func (app *App) PromotionDel(param PromotionDel) (result PromotionDelResult, err error) { if len(app.AccessToken) <= 0 { return result, errors.New("调用凭证异常") } // api params params := map[string]interface{}{} b, _ := json.Marshal(¶m) var m map[string]interface{} _ = json.Unmarshal(b, &m) for k, v := range m { params[k] = v } // request body, err := app.request(fmt.Sprintf("https://api.weixin.qq.com/union/promoter/promotion/del?access_token%s", app.AccessToken), params, http.MethodPost) if err != nil { return result, err } err = json.Unmarshal(body, &result) if err != nil { return result, err } return result, err } type PromotionUpd struct { PreviousPromotionInfo struct { PromotionSourcePid string `json:"promotionSourcePid"` // 要修改的推广位PID PromotionSourceName string `json:"promotionSourceName"` // 修改前名称 } `json:"previousPromotionInfo"` PromotionInfo struct { PromotionSourceName string `json:"promotionSourceName"` // 修改后名称 } `json:"promotionInfo"` } type PromotionUpdResult struct { Errcode int `json:"errcode"` Errmsg string `json:"errmsg"` } // PromotionUpd 修改指定的推广位名称 https://developers.weixin.qq.com/doc/ministore/union/access-guidelines/promoter/api/promotion.html func (app *App) PromotionUpd(param PromotionUpd) (result PromotionUpdResult, err error) { if len(app.AccessToken) <= 0 { return result, errors.New("调用凭证异常") } // api params params := map[string]interface{}{} b, _ := json.Marshal(¶m) var m map[string]interface{} _ = json.Unmarshal(b, &m) for k, v := range m { params[k] = v } // request body, err := app.request(fmt.Sprintf("https://api.weixin.qq.com/union/promoter/promotion/upd?access_token%s", app.AccessToken), params, http.MethodPost) if err != nil { return result, err } err = json.Unmarshal(body, &result) if err != nil { return result, err } return result, err } type PromotionListResult struct { Errcode int `json:"errcode"` Errmsg string `json:"errmsg"` PromotionSourceList []struct { PromotionSourceName string `json:"promotionSourceName"` // 推广位名称 PromotionSourcePid string `json:"promotionSourcePid"` // 推广位ID,PID Status string `json:"status"` // 状态 PidId string `json:"pidId"` } `json:"promotionSourceList"` // 推广位数据 Total int `json:"total"` // 推广位总数 PromotionMaxCnt int `json:"promotionMaxCnt"` // 允许创建的推广位最大数量 } // PromotionList 获取推广位列表 https://developers.weixin.qq.com/doc/ministore/union/access-guidelines/promoter/api/promotion.html func (app *App) PromotionList(start int, limit int) (result PromotionListResult, err error) { if len(app.AccessToken) <= 0 { return result, errors.New("调用凭证异常") } // request body, err := app.request(fmt.Sprintf("https://api.weixin.qq.com/union/promoter/promotion/list?access_token%s", app.AccessToken), map[string]interface{}{ "start": start, // 偏移 "limit": limit, // 每页条数 }, http.MethodGet) if err != nil { return result, err } err = json.Unmarshal(body, &result) if err != nil { return result, err } return result, err }