|
- package weapp
-
- import (
- "strconv"
- )
-
- const (
- apiAddTemplate = "/wxaapi/newtmpl/addtemplate"
- apiDeleteTemplate = "/wxaapi/newtmpl/deltemplate"
- apiGetTemplateCategory = "/wxaapi/newtmpl/getcategory"
- apiGetPubTemplateKeyWordsById = "/wxaapi/newtmpl/getpubtemplatekeywords"
- apiGetPubTemplateTitleList = "/wxaapi/newtmpl/getpubtemplatetitles"
- apiGetTemplateList = "/wxaapi/newtmpl/gettemplate"
- apiSendSubscribeMessage = "/cgi-bin/message/subscribe/send"
- )
-
- // AddTemplateResponse 添加模版消息返回数据
- type AddTemplateResponse struct {
- CommonError
- Pid string `json:"priTmplId"` // 添加至帐号下的模板id,发送小程序订阅消息时所需
- }
-
- // AddTemplate 组合模板并添加至帐号下的个人模板库
- //
- // token 微信 access_token
- // tid 模板ID
- // desc 服务场景描述,15个字以内
- // keywordIDList 关键词 ID 列表
- func AddTemplate(token, tid, desc string, keywordIDList []int32) (*AddTemplateResponse, error) {
- api := baseURL + apiAddTemplate
- return addTemplate(api, token, tid, desc, keywordIDList)
- }
-
- func addTemplate(api, token, tid, desc string, keywordIDList []int32) (*AddTemplateResponse, error) {
- api, err := tokenAPI(api, token)
- if err != nil {
- return nil, err
- }
-
- params := requestParams{
- "tid": tid,
- "kidList": keywordIDList,
- "sceneDesc": desc,
- }
-
- res := new(AddTemplateResponse)
- err = postJSON(api, params, res)
- if err != nil {
- return nil, err
- }
-
- return res, nil
- }
-
- // DeleteTemplate 删除帐号下的某个模板
- //
- // token 微信 access_token
- // pid 模板ID
- func DeleteTemplate(token, pid string) (*CommonError, error) {
- api := baseURL + apiDeleteTemplate
- return deleteTemplate(api, token, pid)
- }
-
- func deleteTemplate(api, token, pid string) (*CommonError, error) {
- api, err := tokenAPI(api, token)
- if err != nil {
- return nil, err
- }
-
- params := requestParams{
- "priTmplId": pid,
- }
-
- res := new(CommonError)
- err = postJSON(api, params, res)
- if err != nil {
- return nil, err
- }
-
- return res, nil
- }
-
- // GetTemplateCategoryResponse 删除帐号下的某个模板返回数据
- type GetTemplateCategoryResponse struct {
- CommonError
- Data []struct {
- ID int `json:"id"` // 类目id,查询公共库模版时需要
- Name string `json:"name"` // 类目的中文名
- } `json:"data"` // 类目列表
- }
-
- // GetTemplateCategory 删除帐号下的某个模板
- //
- // token 微信 access_token
- func GetTemplateCategory(token string) (*GetTemplateCategoryResponse, error) {
- api := baseURL + apiGetTemplateCategory
- return getTemplateCategory(token, api)
- }
-
- func getTemplateCategory(token, api string) (*GetTemplateCategoryResponse, error) {
- api, err := tokenAPI(api, token)
- if err != nil {
- return nil, err
- }
-
- res := new(GetTemplateCategoryResponse)
- err = getJSON(api, res)
- if err != nil {
- return nil, err
- }
-
- return res, nil
- }
-
- // GetPubTemplateKeyWordsByIdResponse 模板标题下的关键词列表
- type GetPubTemplateKeyWordsByIdResponse struct {
- CommonError
- Count int32 `json:"count"` // 模版标题列表总数
- Data []struct {
- Kid int `json:"kid"` // 关键词 id,选用模板时需要
- Name string `json:"name"` // 关键词内容
- Example string `json:"example"` // 关键词内容对应的示例
- Rule string `json:"rule"` // 参数类型
- } `json:"data"` // 关键词列表
- }
-
- // GetPubTemplateKeyWordsById 获取模板标题下的关键词列表
- //
- // token 微信 access_token
- // tid 模板ID
- func GetPubTemplateKeyWordsById(token, tid string) (*GetPubTemplateKeyWordsByIdResponse, error) {
- api := baseURL + apiGetPubTemplateKeyWordsById
- return getPubTemplateKeyWordsById(api, token, tid)
- }
-
- func getPubTemplateKeyWordsById(api, token, tid string) (*GetPubTemplateKeyWordsByIdResponse, error) {
- queries := requestQueries{
- "access_token": token,
- "tid": tid,
- }
- url, err := encodeURL(api, queries)
- if err != nil {
- return nil, err
- }
-
- res := new(GetPubTemplateKeyWordsByIdResponse)
- if err = getJSON(url, res); err != nil {
- return nil, err
- }
-
- return res, nil
- }
-
- // GetPubTemplateTitleListResponse 帐号所属类目下的公共模板标题
- type GetPubTemplateTitleListResponse struct {
- CommonError
- Count uint `json:"count"` // 模版标题列表总数
- Data []struct {
- Tid int `json:"tid"` // 模版标题 id
- Title string `json:"title"` // 模版标题
- Type int32 `json:"type"` // 模版类型,2 为一次性订阅,3 为长期订阅
- CategoryId string `json:"categoryId"` // 模版所属类目 id
- } `json:"data"` // 模板标题列表
- }
-
- // GetPubTemplateTitleList 获取帐号所属类目下的公共模板标题
- //
- // token 微信 access_token
- // ids 类目 id,多个用逗号隔开
- // start 用于分页,表示从 start 开始。从 0 开始计数。
- // limit 用于分页,表示拉取 limit 条记录。最大为 30
- func GetPubTemplateTitleList(token, ids string, start, limit int) (*GetPubTemplateTitleListResponse, error) {
- api := baseURL + apiGetPubTemplateTitleList
- return getPubTemplateTitleList(api, token, ids, start, limit)
- }
-
- func getPubTemplateTitleList(api, token, ids string, start, limit int) (*GetPubTemplateTitleListResponse, error) {
-
- queries := requestQueries{
- "access_token": token,
- "ids": ids,
- "start": strconv.Itoa(start),
- "limit": strconv.Itoa(limit),
- }
-
- url, err := encodeURL(api, queries)
- if err != nil {
- return nil, err
- }
-
- res := new(GetPubTemplateTitleListResponse)
- if err := getJSON(url, res); err != nil {
- return nil, err
- }
-
- return res, nil
- }
-
- // GetTemplateListResponse 获取模板列表返回的数据
- type GetTemplateListResponse struct {
- CommonError
- Data []struct {
- Pid string `json:"priTmplId"` // 添加至帐号下的模板 id,发送小程序订阅消息时所需
- Title string `json:"title"` // 模版标题
- Content string `json:"content"` // 模版内容
- Example string `json:"example"` // 模板内容示例
- Type int32 `json:"type"` // 模版类型,2 为一次性订阅,3 为长期订阅
- } `json:"data"` // 个人模板列表
- }
-
- // GetTemplateList 获取帐号下已存在的模板列表
- //
- // token 微信 access_token
- func GetTemplateList(token string) (*GetTemplateListResponse, error) {
- api := baseURL + apiGetTemplateList
- return getTemplateList(api, token)
- }
-
- func getTemplateList(api, token string) (*GetTemplateListResponse, error) {
- url, err := tokenAPI(api, token)
- if err != nil {
- return nil, err
- }
-
- res := new(GetTemplateListResponse)
- if err := getJSON(url, res); err != nil {
- return nil, err
- }
-
- return res, nil
- }
-
- // SubscribeMessage 订阅消息
- type SubscribeMessage struct {
- ToUser string `json:"touser"`
- TemplateID string `json:"template_id"`
- Page string `json:"page,omitempty"`
- MiniprogramState MiniprogramState `json:"miniprogram_state,omitempty"`
- Data SubscribeMessageData `json:"data"`
- }
-
- // MiniprogramState 跳转小程序类型
- type MiniprogramState = string
-
- // developer为开发版;trial为体验版;formal为正式版;默认为正式版
- const (
- MiniprogramStateDeveloper = "developer"
- MiniprogramStateTrial = "trial"
- MiniprogramStateFormal = "formal"
- )
-
- // SubscribeMessageData 订阅消息模板数据
- type SubscribeMessageData map[string]struct {
- Value string `json:"value"`
- }
-
- // Send 发送订阅消息
- //
- // token access_token
- func (sm *SubscribeMessage) Send(token string) (*CommonError, error) {
- api := baseURL + apiSendSubscribeMessage
- return sm.send(api, token)
- }
-
- func (sm *SubscribeMessage) send(api, token string) (*CommonError, error) {
- api, err := tokenAPI(api, token)
- if err != nil {
- return nil, err
- }
-
- res := &CommonError{}
- if err := postJSON(api, sm, res); err != nil {
- return nil, err
- }
-
- return res, nil
- }
|