All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.foxinmy.weixin4j.mp.api.CommentApi Maven / Gradle / Ivy

There is a newer version: 1.10.2
Show newest version
package com.foxinmy.weixin4j.mp.api;

import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.weixin.ApiResult;
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
import com.foxinmy.weixin4j.model.Token;
import com.foxinmy.weixin4j.model.paging.Pageable;
import com.foxinmy.weixin4j.model.paging.Pagedata;
import com.foxinmy.weixin4j.mp.model.ArticleComment;
import com.foxinmy.weixin4j.mp.model.ArticleComment.ArticleCommentType;
import com.foxinmy.weixin4j.token.TokenManager;

/**
 * 文章评论API
 *
 * @className CommentApi
 * @author jinyu
 * @date May 19, 2017
 * @since JDK 1.6
 * @see 图文消息留言管理接口
 */
public class CommentApi extends MpApi {
    private final TokenManager tokenManager;

    public CommentApi(TokenManager tokenManager) {
        this.tokenManager = tokenManager;
    }

    /**
     * 打开/关闭已群发文章评论
     *
     * @param open
     *            true为打开,false为关闭
     * @param msgid
     *            群发返回的msg_data_id
     * @param index
     *            多图文时,用来指定第几篇图文,从0开始,不带默认操作该msg_data_id的第一篇图文
     * @return 操作结果
     * @see {@link MassApi#massByTagId(com.foxinmy.weixin4j.tuple.MassTuple, int)}
     * @see {@link MassApi#massByOpenIds(com.foxinmy.weixin4j.tuple.MassTuple, String...)}
     * @throws WeixinException
     */
    public ApiResult openComment(boolean open, String msgid, int index) throws WeixinException {
        String news_comment = open ? getRequestUri("news_comment_open") : getRequestUri("news_comment_close");
        Token token = tokenManager.getCache();
        JSONObject obj = new JSONObject();
        obj.put("msg_data_id", msgid);
        obj.put("index", index);
        WeixinResponse response = weixinExecutor.post(String.format(news_comment, token.getAccessToken()),
                obj.toJSONString());

        return response.getAsResult();
    }

    /**
     * 获取评论列表
     *
     * @param page
     *            分页信息
     * @param commentType
     *            评论类型 为空获取全部类型
     * @param msgid
     *            群发返回的msg_data_id
     * @param index
     *            多图文时,用来指定第几篇图文,从0开始,不带默认操作该msg_data_id的第一篇图文
     * @return 分页数据
     * @see ArticleComment
     * @see ArticleCommentType
     * @see {@link MassApi#massByTagId(com.foxinmy.weixin4j.tuple.MassTuple, int)}
     * @see {@link MassApi#massByOpenIds(com.foxinmy.weixin4j.tuple.MassTuple, String...)}
     * @throws WeixinException
     */
    public Pagedata listArticleComments(Pageable page, ArticleCommentType commentType, String msgid,
            int index) throws WeixinException {
        String news_comment_list = getRequestUri("news_comment_list");
        Token token = tokenManager.getCache();
        JSONObject obj = new JSONObject();
        obj.put("msg_data_id", "msgid");
        obj.put("index", index);
        obj.put("begin", page.getOffset());
        obj.put("count", Math.max(50, page.getPageSize())); // 获取数目(>=50会被拒绝)
        if (commentType != null) {
            obj.put("type", commentType.ordinal() + 1);
        } else {
            obj.put("type", 0);
        }
        WeixinResponse response = weixinExecutor.post(String.format(news_comment_list, token.getAccessToken()),
                obj.toJSONString());

        JSONObject result = response.getAsJson();
        int total = result.getIntValue("total");
        List content = JSON.parseArray(result.getString("comment"), ArticleComment.class);
        return new Pagedata(page, total, content);
    }

    /**
     * 获取评论列表
     *
     * @param commentType
     *            评论类型 为空获取全部类型
     * @param msgid
     *            群发返回的msg_data_id
     * @param index
     *            多图文时,用来指定第几篇图文,从0开始,不带默认操作该msg_data_id的第一篇图文
     * @return 分页数据
     * @see #listArticleComments(Pageable, ArticleCommentType, String, int)
     * @throws WeixinException
     */
    public List listAllArticleComments(ArticleCommentType commentType, String msgid, int index)
            throws WeixinException {
        List comments = new ArrayList();
        Pagedata page = null;
        Pageable pageable = null;
        for (pageable = new Pageable(1, 50);; pageable = pageable.next()) {
            page = listArticleComments(pageable, commentType, msgid, index);
            if (!page.hasContent()) {
                break;
            }
            comments.addAll(page.getContent());
        }
        return comments;
    }

    /**
     * 评论标记/取消精选
     *
     * @param markelect
     *            true为标记,false为取消
     * @param msgid
     *            群发返回的msg_data_id
     * @param index
     *            多图文时,用来指定第几篇图文,从0开始,不带默认操作该msg_data_id的第一篇图文
     * @param commentId
     *            用户评论ID
     * @return 操作结果
     * @see #listArticleComments(Pageable, ArticleCommentType, String, int)
     * @throws WeixinException
     */
    public ApiResult markelectComment(boolean markelect, String msgid, int index, String commentId)
            throws WeixinException {
        String news_comment = markelect ? getRequestUri("news_comment_markelect")
                : getRequestUri("news_comment_unmarkelect");
        Token token = tokenManager.getCache();
        JSONObject obj = new JSONObject();
        obj.put("msg_data_id", "msgid");
        obj.put("index", index);
        obj.put("user_comment_id", commentId);
        WeixinResponse response = weixinExecutor.post(String.format(news_comment, token.getAccessToken()),
                obj.toJSONString());

        return response.getAsResult();
    }

    /**
     * 删除评论
     *
     * @param msgid
     *            群发返回的msg_data_id
     * @param index
     *            多图文时,用来指定第几篇图文,从0开始,不带默认操作该msg_data_id的第一篇图文
     * @param commentId
     *            用户评论ID
     * @return 操作结果
     * @see #listArticleComments(Pageable, ArticleCommentType, String, int)
     * @throws WeixinException
     */
    public ApiResult deleteComment(String msgid, int index, String commentId) throws WeixinException {
        String news_comment_delete = getRequestUri("news_comment_delete");
        Token token = tokenManager.getCache();
        JSONObject obj = new JSONObject();
        obj.put("msg_data_id", "msgid");
        obj.put("index", index);
        obj.put("user_comment_id", commentId);
        WeixinResponse response = weixinExecutor.post(String.format(news_comment_delete, token.getAccessToken()),
                obj.toJSONString());

        return response.getAsResult();
    }

    /**
     * 回复评论
     *
     * @param msgid
     *            群发返回的msg_data_id
     * @param index
     *            多图文时,用来指定第几篇图文,从0开始,不带默认操作该msg_data_id的第一篇图文
     * @param commentId
     *            用户评论ID
     * @param content
     *            回复内容
     * @return 操作结果
     * @see #listArticleComments(Pageable, ArticleCommentType, String, int)
     * @throws WeixinException
     */
    public ApiResult replyComment(String msgid, int index, String commentId, String content) throws WeixinException {
        String news_comment_reply = getRequestUri("news_comment_reply_add");
        Token token = tokenManager.getCache();
        JSONObject obj = new JSONObject();
        obj.put("msg_data_id", "msgid");
        obj.put("index", index);
        obj.put("user_comment_id", commentId);
        obj.put("content", content);
        WeixinResponse response = weixinExecutor.post(String.format(news_comment_reply, token.getAccessToken()),
                obj.toJSONString());

        return response.getAsResult();
    }

    /**
     * 删除回复
     *
     * @param msgid
     *            群发返回的msg_data_id
     * @param index
     *            多图文时,用来指定第几篇图文,从0开始,不带默认操作该msg_data_id的第一篇图文
     * @param commentId
     *            用户评论ID
     * @return 操作结果
     * @see #listArticleComments(Pageable, ArticleCommentType, String, int)
     * @throws WeixinException
     */
    public ApiResult deleteCommentReply(String msgid, int index, String commentId) throws WeixinException {
        String news_comment_reply = getRequestUri("news_comment_reply_delete");
        Token token = tokenManager.getCache();
        JSONObject obj = new JSONObject();
        obj.put("msg_data_id", "msgid");
        obj.put("index", index);
        obj.put("user_comment_id", commentId);
        WeixinResponse response = weixinExecutor.post(String.format(news_comment_reply, token.getAccessToken()),
                obj.toJSONString());

        return response.getAsResult();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy