JAVA微信公众号网页开发——将接收的消息转发到微信自带的客服系统

 

如果公众号处于开发模式,普通微信用户向公众号发消息时,微信服务器会先将消息POST到开发者填写的url上,无法直接推送给微信自带的客服功能。如果需要把用户推送的普通消息推送到客服功能中,就需要进行代码修改。

 

官方文档:https://developers.weixin.qq.com/doc/offiaccount/Customer_Service/Forwarding_of_messages_to_service_center.html

 

代码:

 

public void customer(HttpServletResponse response) {
        //获取方式参考:https://www.cnblogs.com/pxblog/p/10542583.html
        String msgType = "获取推送消息中的MsgType数据";
        /**
         * 判断微信推送的消息中的MsgType是否是event类型
         * 不是event类型的,我们进行转发,因为只需要针对微信用户发来的消息才进行转发,而对于其他任何事件(比如菜单点击、地理位置上报等)都不应该转接,否则客服在客服系统上就会看到一些无意义的消息了。
         * fromUsername 为推送消息的fromUsername
         * toUsername 为推送消息的toUsername
         */
        String time = System.currentTimeMillis()+"";
        if (!"event".equalsIgnoreCase(msgType)) {
            String textTpl=customerText(fromUsername, toUsername, time);
            send(textTpl, response);
        }


    }

    /**
     * 封装发送xml
     * @param fromUsername
     * @param toUsername
     * @param time
     * @return
     */
    private String customerText(String fromUsername,String toUsername,String time){
        String textTpls = "<xml>"+
                "<ToUserName><![CDATA["+fromUsername+"]]></ToUserName>"+
                "<FromUserName><![CDATA["+toUsername+"]]></FromUserName>"+
                "<CreateTime>"+time+"</CreateTime>"+
                "<MsgType><![CDATA[transfer_customer_service]]></MsgType>"+
                "</xml>";

        return textTpls;
    }

    private void send(String textTpl,HttpServletResponse response) throws IOException {
        String type="text/xml;charset=UTF-8";
        response.setContentType(type);
        response.setHeader("Pragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
        response.getWriter().write(textTpl);
    }

 

posted @ 2020-04-01 01:58  yvioo  阅读(1192)  评论(0编辑  收藏  举报