mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-16 02:32:27 +08:00
Compare commits
5 Commits
v2.1.7-rc.
...
46bca1511d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
46bca1511d | ||
|
|
a723e74553 | ||
|
|
418b6d7141 | ||
|
|
efe99422a6 | ||
|
|
eaa53b509b |
@@ -138,8 +138,10 @@ func (auth *Auth) GetPhoneNumberContext(ctx context2.Context, code string) (*Get
|
||||
}
|
||||
|
||||
var result GetPhoneNumberResponse
|
||||
err = util.DecodeWithError(response, &result, "phonenumber.getPhoneNumber")
|
||||
return &result, err
|
||||
if err = util.DecodeWithError(response, &result, "phonenumber.getPhoneNumber"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetPhoneNumber 小程序通过code获取用户手机号
|
||||
|
||||
@@ -45,5 +45,10 @@ func (business *Business) GetPhoneNumber(in *GetPhoneNumberRequest) (info PhoneI
|
||||
PhoneInfo PhoneInfo `json:"phone_info"`
|
||||
}
|
||||
err = util.DecodeWithError(response, &resp, "business.GetPhoneNumber")
|
||||
return resp.PhoneInfo, err
|
||||
if nil != err {
|
||||
return
|
||||
}
|
||||
|
||||
info = resp.PhoneInfo
|
||||
return
|
||||
}
|
||||
|
||||
@@ -1,102 +0,0 @@
|
||||
package message
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/silenceper/wechat/v2/miniprogram/context"
|
||||
"github.com/silenceper/wechat/v2/util"
|
||||
)
|
||||
|
||||
const (
|
||||
// createActivityURL 创建activity_id
|
||||
createActivityURL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/activityid/create?access_token=%s"
|
||||
// SendUpdatableMsgURL 修改动态消息
|
||||
setUpdatableMsgURL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/updatablemsg/send?access_token=%s"
|
||||
)
|
||||
|
||||
// UpdatableTargetState 动态消息状态
|
||||
type UpdatableTargetState int
|
||||
|
||||
const (
|
||||
// TargetStateNotStarted 未开始
|
||||
TargetStateNotStarted UpdatableTargetState = 0
|
||||
// TargetStateStarted 已开始
|
||||
TargetStateStarted UpdatableTargetState = 1
|
||||
// TargetStateFinished 已结束
|
||||
TargetStateFinished UpdatableTargetState = 2
|
||||
)
|
||||
|
||||
// UpdatableMessage 动态消息
|
||||
type UpdatableMessage struct {
|
||||
*context.Context
|
||||
}
|
||||
|
||||
// NewUpdatableMessage 实例化
|
||||
func NewUpdatableMessage(ctx *context.Context) *UpdatableMessage {
|
||||
return &UpdatableMessage{
|
||||
Context: ctx,
|
||||
}
|
||||
}
|
||||
|
||||
// CreateActivityID 创建activity_id
|
||||
func (updatableMessage *UpdatableMessage) CreateActivityID() (res CreateActivityIDResponse, err error) {
|
||||
accessToken, err := updatableMessage.GetAccessToken()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
uri := fmt.Sprintf(createActivityURL, accessToken)
|
||||
response, err := util.HTTPGet(uri)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = util.DecodeWithError(response, &res, "CreateActivityID")
|
||||
return
|
||||
}
|
||||
|
||||
// SetUpdatableMsg 修改动态消息
|
||||
func (updatableMessage *UpdatableMessage) SetUpdatableMsg(activityID string, targetState UpdatableTargetState, template UpdatableMsgTemplate) (err error) {
|
||||
accessToken, err := updatableMessage.GetAccessToken()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
uri := fmt.Sprintf(setUpdatableMsgURL, accessToken)
|
||||
data := SendUpdatableMsgReq{
|
||||
ActivityID: activityID,
|
||||
TargetState: targetState,
|
||||
TemplateInfo: template,
|
||||
}
|
||||
|
||||
response, err := util.PostJSON(uri, data)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return util.DecodeWithCommonError(response, "SendUpdatableMsg")
|
||||
}
|
||||
|
||||
// CreateActivityIDResponse 创建activity_id 返回
|
||||
type CreateActivityIDResponse struct {
|
||||
util.CommonError
|
||||
|
||||
ActivityID string `json:"activity_id"`
|
||||
ExpirationTime int64 `json:"expiration_time"`
|
||||
}
|
||||
|
||||
// UpdatableMsgTemplate 动态消息模板
|
||||
type UpdatableMsgTemplate struct {
|
||||
ParameterList []UpdatableMsgParameter `json:"parameter_list"`
|
||||
}
|
||||
|
||||
// UpdatableMsgParameter 动态消息参数
|
||||
type UpdatableMsgParameter struct {
|
||||
Name string `json:"name"`
|
||||
Value string `json:"value"`
|
||||
}
|
||||
|
||||
// SendUpdatableMsgReq 修改动态消息参数
|
||||
type SendUpdatableMsgReq struct {
|
||||
ActivityID string `json:"activity_id"`
|
||||
TemplateInfo UpdatableMsgTemplate `json:"template_info"`
|
||||
TargetState UpdatableTargetState `json:"target_state"`
|
||||
}
|
||||
@@ -161,8 +161,3 @@ func (miniProgram *MiniProgram) GetMiniDrama() *minidrama.MiniDrama {
|
||||
func (miniProgram *MiniProgram) GetRedPacketCover() *redpacketcover.RedPacketCover {
|
||||
return redpacketcover.NewRedPacketCover(miniProgram.ctx)
|
||||
}
|
||||
|
||||
// GetUpdatableMessage 小程序动态消息
|
||||
func (miniProgram *MiniProgram) GetUpdatableMessage() *message.UpdatableMessage {
|
||||
return message.NewUpdatableMessage(miniProgram.ctx)
|
||||
}
|
||||
|
||||
@@ -103,8 +103,11 @@ func (s *Privacy) GetPrivacySetting(privacyVer int) (GetPrivacySettingResponse,
|
||||
}
|
||||
// 返回错误信息
|
||||
var result GetPrivacySettingResponse
|
||||
err = util.DecodeWithError(response, &result, "getprivacysetting")
|
||||
return result, err
|
||||
if err = util.DecodeWithError(response, &result, "getprivacysetting"); err != nil {
|
||||
return GetPrivacySettingResponse{}, err
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// SetPrivacySetting 更新小程序权限配置
|
||||
@@ -127,7 +130,11 @@ func (s *Privacy) SetPrivacySetting(privacyVer int, ownerSetting OwnerSetting, s
|
||||
}
|
||||
|
||||
// 返回错误信息
|
||||
return util.DecodeWithCommonError(response, "setprivacysetting")
|
||||
if err = util.DecodeWithCommonError(response, "setprivacysetting"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// UploadPrivacyExtFileResponse 上传权限定义模板响应参数
|
||||
@@ -152,6 +159,9 @@ func (s *Privacy) UploadPrivacyExtFile(fileData []byte) (UploadPrivacyExtFileRes
|
||||
|
||||
// 返回错误信息
|
||||
var result UploadPrivacyExtFileResponse
|
||||
err = util.DecodeWithError(response, &result, "setprivacysetting")
|
||||
if err = util.DecodeWithError(response, &result, "setprivacysetting"); err != nil {
|
||||
return UploadPrivacyExtFileResponse{}, err
|
||||
}
|
||||
|
||||
return result, err
|
||||
}
|
||||
|
||||
@@ -51,7 +51,12 @@ func (security *Security) MediaCheckAsyncV1(in *MediaCheckAsyncV1Request) (trace
|
||||
TraceID string `json:"trace_id"`
|
||||
}
|
||||
err = util.DecodeWithError(response, &res, "MediaCheckAsyncV1")
|
||||
return res.TraceID, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
traceID = res.TraceID
|
||||
return
|
||||
}
|
||||
|
||||
// MediaCheckAsyncRequest 图片/音频异步校验请求参数
|
||||
@@ -88,7 +93,12 @@ func (security *Security) MediaCheckAsync(in *MediaCheckAsyncRequest) (traceID s
|
||||
TraceID string `json:"trace_id"`
|
||||
}
|
||||
err = util.DecodeWithError(response, &res, "MediaCheckAsync")
|
||||
return res.TraceID, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
traceID = res.TraceID
|
||||
return
|
||||
}
|
||||
|
||||
// ImageCheckV1 校验一张图片是否含有违法违规内容(同步)
|
||||
|
||||
@@ -60,7 +60,11 @@ func (shortLink *ShortLink) generate(shortLinkParams ShortLinker) (string, error
|
||||
// 使用通用方法返回错误
|
||||
var res resShortLinker
|
||||
err = util.DecodeWithError(response, &res, "GenerateShortLink")
|
||||
return res.Link, err
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return res.Link, nil
|
||||
}
|
||||
|
||||
// GenerateShortLinkPermanent 生成永久 shortLink
|
||||
|
||||
@@ -168,7 +168,11 @@ func (s *Subscribe) Add(ShortID string, kidList []int, sceneDesc string) (templa
|
||||
}
|
||||
var result resSubscribeAdd
|
||||
err = util.DecodeWithError(response, &result, "AddSubscribe")
|
||||
return result.TemplateID, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
templateID = result.TemplateID
|
||||
return
|
||||
}
|
||||
|
||||
// Delete 删除私有模板
|
||||
|
||||
@@ -65,5 +65,8 @@ func (u *URLLink) Generate(params *ULParams) (string, error) {
|
||||
}
|
||||
var resp ULResult
|
||||
err = util.DecodeWithError(response, &resp, "URLLink.Generate")
|
||||
return resp.URLLink, err
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return resp.URLLink, nil
|
||||
}
|
||||
|
||||
@@ -62,5 +62,9 @@ func (u *URLScheme) QueryScheme(querySchemeParams QueryScheme) (schemeInfo Schem
|
||||
// 使用通用方法返回错误
|
||||
var res resQueryScheme
|
||||
err = util.DecodeWithError(response, &res, "QueryScheme")
|
||||
return res.SchemeInfo, res.VisitOpenid, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return res.SchemeInfo, res.VisitOpenid, nil
|
||||
}
|
||||
|
||||
@@ -78,5 +78,8 @@ func (u *URLScheme) Generate(params *USParams) (string, error) {
|
||||
}
|
||||
var resp USResult
|
||||
err = util.DecodeWithError(response, &resp, "URLScheme.Generate")
|
||||
return resp.OpenLink, err
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return resp.OpenLink, nil
|
||||
}
|
||||
|
||||
@@ -44,6 +44,9 @@ func (basic *Basic) Long2ShortURL(longURL string) (shortURL string, err error) {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = util.DecodeWithError(responseBytes, resp, long2shortAction)
|
||||
return resp.ShortURL, err
|
||||
if err = util.DecodeWithError(responseBytes, resp, long2shortAction); err != nil {
|
||||
return
|
||||
}
|
||||
shortURL = resp.ShortURL
|
||||
return
|
||||
}
|
||||
|
||||
@@ -79,10 +79,6 @@ type sendRequest struct {
|
||||
Mpnews map[string]interface{} `json:"mpnews,omitempty"`
|
||||
// 发送语音
|
||||
Voice map[string]interface{} `json:"voice,omitempty"`
|
||||
// 发送视频
|
||||
Mpvideo map[string]interface{} `json:"mpvideo,omitempty"`
|
||||
// 发送图片-预览使用
|
||||
Image map[string]interface{} `json:"image,omitempty"`
|
||||
// 发送图片
|
||||
Images *Image `json:"images,omitempty"`
|
||||
// 发送卡券
|
||||
@@ -187,13 +183,7 @@ func (broadcast *Broadcast) SendImage(user *User, images *Image) (*Result, error
|
||||
ToUser: nil,
|
||||
MsgType: MsgTypeImage,
|
||||
}
|
||||
if broadcast.preview {
|
||||
req.Image = map[string]interface{}{
|
||||
"media_id": images.MediaIDs[0],
|
||||
}
|
||||
} else {
|
||||
req.Images = images
|
||||
}
|
||||
req.Images = images
|
||||
req, sendURL := broadcast.chooseTagOrOpenID(user, req)
|
||||
url := fmt.Sprintf("%s?access_token=%s", sendURL, ak)
|
||||
data, err := util.PostJSON(url, req)
|
||||
@@ -215,7 +205,7 @@ func (broadcast *Broadcast) SendVideo(user *User, mediaID string, title, descrip
|
||||
ToUser: nil,
|
||||
MsgType: MsgTypeVideo,
|
||||
}
|
||||
req.Mpvideo = map[string]interface{}{
|
||||
req.Voice = map[string]interface{}{
|
||||
"media_id": mediaID,
|
||||
"title": title,
|
||||
"description": description,
|
||||
|
||||
@@ -72,7 +72,11 @@ func (csm *Manager) List() (customerServiceList []*KeFuInfo, err error) {
|
||||
}
|
||||
var res resKeFuList
|
||||
err = util.DecodeWithError(response, &res, "ListCustomerService")
|
||||
return res.KfList, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
customerServiceList = res.KfList
|
||||
return
|
||||
}
|
||||
|
||||
// KeFuOnlineInfo 客服在线信息
|
||||
@@ -103,7 +107,11 @@ func (csm *Manager) OnlineList() (customerServiceOnlineList []*KeFuOnlineInfo, e
|
||||
}
|
||||
var res resKeFuOnlineList
|
||||
err = util.DecodeWithError(response, &res, "ListOnlineCustomerService")
|
||||
return res.KfOnlineList, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
customerServiceOnlineList = res.KfOnlineList
|
||||
return
|
||||
}
|
||||
|
||||
// Add 添加客服账号
|
||||
|
||||
@@ -183,6 +183,9 @@ func (cube *DataCube) fetchData(params ParamsPublisher) (response []byte, err er
|
||||
uri := fmt.Sprintf("%s?%s", publisherURL, v.Encode())
|
||||
|
||||
response, err = util.HTTPGet(uri)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -64,7 +64,11 @@ func (draft *Draft) AddDraft(articles []*Article) (mediaID string, err error) {
|
||||
MediaID string `json:"media_id"`
|
||||
}
|
||||
err = util.DecodeWithError(response, &res, "AddDraft")
|
||||
return res.MediaID, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
mediaID = res.MediaID
|
||||
return
|
||||
}
|
||||
|
||||
// GetDraft 获取草稿
|
||||
@@ -90,7 +94,12 @@ func (draft *Draft) GetDraft(mediaID string) (articles []*Article, err error) {
|
||||
NewsItem []*Article `json:"news_item"`
|
||||
}
|
||||
err = util.DecodeWithError(response, &res, "GetDraft")
|
||||
return res.NewsItem, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
articles = res.NewsItem
|
||||
return
|
||||
}
|
||||
|
||||
// DeleteDraft 删除草稿
|
||||
@@ -163,7 +172,12 @@ func (draft *Draft) CountDraft() (total uint, err error) {
|
||||
Total uint `json:"total_count"`
|
||||
}
|
||||
err = util.DecodeWithError(response, &res, "CountDraft")
|
||||
return res.Total, err
|
||||
if nil != err {
|
||||
return
|
||||
}
|
||||
|
||||
total = res.Total
|
||||
return
|
||||
}
|
||||
|
||||
// ArticleList 草稿列表
|
||||
|
||||
@@ -73,7 +73,12 @@ func (freePublish *FreePublish) Publish(mediaID string) (publishID int64, err er
|
||||
PublishID int64 `json:"publish_id"`
|
||||
}
|
||||
err = util.DecodeWithError(response, &res, "SubmitFreePublish")
|
||||
return res.PublishID, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
publishID = res.PublishID
|
||||
return
|
||||
}
|
||||
|
||||
// PublishStatusList 发布任务状态列表
|
||||
@@ -186,7 +191,12 @@ func (freePublish *FreePublish) First(articleID string) (list []Article, err err
|
||||
NewsItem []Article `json:"news_item"`
|
||||
}
|
||||
err = util.DecodeWithError(response, &res, "FirstFreePublish")
|
||||
return res.NewsItem, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
list = res.NewsItem
|
||||
return
|
||||
}
|
||||
|
||||
// ArticleList 发布列表
|
||||
|
||||
@@ -90,7 +90,11 @@ func (tpl *Subscribe) List() (templateList []*PrivateSubscribeItem, err error) {
|
||||
}
|
||||
var res resPrivateSubscribeList
|
||||
err = util.DecodeWithError(response, &res, "ListSubscribe")
|
||||
return res.SubscriptionList, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
templateList = res.SubscriptionList
|
||||
return
|
||||
}
|
||||
|
||||
type resSubscribeAdd struct {
|
||||
@@ -119,7 +123,11 @@ func (tpl *Subscribe) Add(ShortID string, kidList []int, sceneDesc string) (temp
|
||||
}
|
||||
var result resSubscribeAdd
|
||||
err = util.DecodeWithError(response, &result, "AddSubscribe")
|
||||
return result.TemplateID, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
templateID = result.TemplateID
|
||||
return
|
||||
}
|
||||
|
||||
// Delete 删除私有模板
|
||||
@@ -167,7 +175,11 @@ func (tpl *Subscribe) GetCategory() (categoryList []*PublicTemplateCategory, err
|
||||
}
|
||||
var result resSubscribeCategoryList
|
||||
err = util.DecodeWithError(response, &result, "GetCategory")
|
||||
return result.CategoryList, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
categoryList = result.CategoryList
|
||||
return
|
||||
}
|
||||
|
||||
// PublicTemplateKeyWords 模板中的关键词
|
||||
@@ -198,7 +210,11 @@ func (tpl *Subscribe) GetPubTplKeyWordsByID(titleID string) (keyWordsList []*Pub
|
||||
}
|
||||
var result resPublicTemplateKeyWordsList
|
||||
err = util.DecodeWithError(response, &result, "GetPublicTemplateKeyWords")
|
||||
return result.KeyWordsList, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
keyWordsList = result.KeyWordsList
|
||||
return
|
||||
}
|
||||
|
||||
// PublicTemplateTitle 类目下的公共模板
|
||||
@@ -230,5 +246,10 @@ func (tpl *Subscribe) GetPublicTemplateTitleList(ids string, start int, limit in
|
||||
}
|
||||
var result resPublicTemplateTitleList
|
||||
err = util.DecodeWithError(response, &result, "GetPublicTemplateTitle")
|
||||
return result.Count, result.TemplateTitleList, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
count = result.Count
|
||||
templateTitleList = result.TemplateTitleList
|
||||
return
|
||||
}
|
||||
|
||||
@@ -111,7 +111,11 @@ func (tpl *Template) List() (templateList []*TemplateItem, err error) {
|
||||
}
|
||||
var res resTemplateList
|
||||
err = util.DecodeWithError(response, &res, "ListTemplate")
|
||||
return res.TemplateList, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
templateList = res.TemplateList
|
||||
return
|
||||
}
|
||||
|
||||
type resTemplateAdd struct {
|
||||
@@ -139,7 +143,11 @@ func (tpl *Template) Add(shortID string) (templateID string, err error) {
|
||||
|
||||
var result resTemplateAdd
|
||||
err = util.DecodeWithError(response, &result, "AddTemplate")
|
||||
return result.TemplateID, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
templateID = result.TemplateID
|
||||
return
|
||||
}
|
||||
|
||||
// Delete 删除私有模板.
|
||||
|
||||
@@ -62,6 +62,10 @@ func (user *User) ListChangeOpenIDs(fromAppID string, openIDs ...string) (list *
|
||||
}
|
||||
|
||||
err = util.DecodeWithError(resp, list, "ListChangeOpenIDs")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -126,7 +126,10 @@ func (user *User) GetTag() (tags []*TagInfo, err error) {
|
||||
Tags []*TagInfo `json:"tags"`
|
||||
}
|
||||
err = json.Unmarshal(response, &result)
|
||||
return result.Tags, err
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return result.Tags, nil
|
||||
}
|
||||
|
||||
// OpenIDListByTag 获取标签下粉丝列表
|
||||
@@ -151,6 +154,9 @@ func (user *User) OpenIDListByTag(tagID int32, nextOpenID ...string) (userList *
|
||||
}
|
||||
userList = new(TagOpenIDList)
|
||||
err = json.Unmarshal(response, &userList)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -100,8 +100,11 @@ func (ctx *Context) GetPreCodeContext(stdCtx context.Context) (string, error) {
|
||||
var ret struct {
|
||||
PreCode string `json:"pre_auth_code"`
|
||||
}
|
||||
err = json.Unmarshal(body, &ret)
|
||||
return ret.PreCode, err
|
||||
if err := json.Unmarshal(body, &ret); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return ret.PreCode, nil
|
||||
}
|
||||
|
||||
// GetPreCode 获取预授权码
|
||||
|
||||
Reference in New Issue
Block a user