微信公众号之被动消息回复和客服消息

本文为博主原创 转载请注明出处 尊重笔者劳动成果 十分感谢

场景:用户关注公众号后给用户回复一个消息

 效果如下:

 

实现公众号和用户产生特定动作的交互有两种方式可以实现:

1. 被动回复用户消息

2. 客服消息

这两种有何不同呢? 被动消息回复本质是对微信服务器发过来消息的一次回复。因此需要开发者在5秒内做出响应 否则将会提示“该公众号暂时无法提供服务” 而客服消息其实是一个接口 当不能保证5秒内对为微信服务器响应的时候可以先回复“success”然后调用发送客服消息异步发送消息

注意:客服消息是有次数限制的!!! 具体查看接口权限处的次数 且开发者收到微信服务的推送在48小时内可以调用客服接口

发送客服消息需要先检查公众号是否有客服消息权限 查看客服消息权限可以在微信公众号控制台 最后一个接口权限查看,如下图:

 下面附上被动消息回复以及客服消息的代码 此处被动消息未做排重处理

被动消息回复

1.构造一个消息 例如文本消息

2.响应消息 即发送消息给微信服务器

定义一个消息类型枚举类

package com.net.wx;

/**
 * 被动回复消息类型
 * Created by zhangq on 2019/1/23.
 */
public enum MessageType {
    TEXT,IMAGE,VOICE,VIDEO,MUSIC,NEWS
}

 编写构造消息的工具类 注意此处的字段 FromUserName 和 ToUserName 这两个数据来自微信服务器给开发者服务器推送的XML中的字段,因此响应微信服务器消息的时候,发送方和接受方反过来即可

package com.net.wx;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.json.JSONObject;

import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 构造被动回复工具类
 * Created by zhangq on 2019/1/23.
 */
public class MessageUtil {

    /**
     * 根据消息类型 构造返回消息数据
     * @param jsonObject 承装消息数据
     * @param msgType 消息类型  取自消息类型枚举类
     * @return 构造后消息数据结构
     */
    public static String buildXml(JSONObject jsonObject, MessageType msgType) {
        String result = "";
        switch (msgType) {
            case TEXT:
                result =buildTextMessage(jsonObject);
                break;
            case IMAGE:
                result =buildImageMessage(jsonObject);
                break;
            case NEWS:
                result =buildNewsMessage(jsonObject);
                break;
            default:
                break;
        }
        return result;
    }


    /**
     * 构造文本消息
     * @param json 文本消息参数
     * @return String
     */
    private static String buildTextMessage(JSONObject  json) {
        String fromUserName = json.get("FromUserName").toString();
        String toUserName = json.get("ToUserName").toString();
        String content = json.get("content").toString();

        return String.format("<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime&
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值