自定义微信公众号客服,微信客服1.0(及时通信)

先来看看效果图,图片大小受限,只展示聊天部分,更多效果请看视频

自定义微信公众号客服,微信客服1.0(及时通信)
在这里插入图片描述



  • 一、准备

    • 1-1、映射外网工具

    • 1-2、一个测试微信号

    • 1-3、MySql数据库

  • 二、启动项目

  • 三、视频讲解

  • 四、文字讲解

    • 4-1、xml解析

    • 4-2、异步处理

    • 4-3、主要的业务逻辑

    • 4-4、其它业务逻辑



一、准备


1-1、映射外网工具

微信公众号和我们代码之前交互,是需要我们提供可以被外网访问的接口

【好物推荐】ngrok下载、安装、使用


1-2、一个测试微信号

如果有自己的公众号,也可以直接拿公众号来验证。没有的话有没有关系可以自己申请一个测试号。

测试号除了页面简陋之外其它的功能也大致相似,我这次也是用的测试号。

百度搜索:测试微信公众号申请


1-3、MySql数据库

消息和会话列表是需要持久化的,所以需要用到关系型数据库

Linux下安装MySql

Windows下安装MySql


二、启动项目

去github上面下载源代码,然后配置上面的三个需求即可。

注:此项目为xdxIm里面的wxkf1.0

https://github.com/xdxTao/xdxIm


三、视频讲解

下一篇


四、文字讲解

之前也有写过一篇讲解微信客服的文章,这里就只讲之前文章里面没有讲到的内容。

微信公众号接入自己的客服系统,自定义客服系统


4-1、xml解析

微信调用我们的接口数据传输格式是xml,比如下面这样

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>1348831860</CreateTime>
  <MsgType><![CDATA[text]]></MsgType>
  <Content><![CDATA[this is a test]]></Content>
  <MsgId>1234567890123456</MsgId>
</xml>


所以我们要对消息进行解析,这里我写了一个简单的方法用来解析xml的数据

/**
 * 通过反射的方式,将xml数据封装到对应的实体里面去
 * @param xmlString xml的字符串
 * @param t 返回值类型
 */

public T Wxformat(String xmlString,T t){

    if (xmlString.length() < 10){
        throw new RuntimeException("错误的xml");
    }
    // 对于一般的XML解析不需要这两行,但是微信的消息都是使用前后缀,所以这里多做一步
    xmlString = xmlString.replace("<![CDATA[""");
    xmlString = xmlString.replace("]]>","");

    xmlString = xmlString.substring(5,xmlString.length()-6);
    Map<String,Object> map = new HashMap<String, Object>();
    char[] chars = xmlString.toCharArray();
    StringBuilder curFiled = new StringBuilder();
    StringBuilder curContent = new StringBuilder();
    int flag = 0;
    for (int i = 0;i < chars.length; i++){
        if (chars[i] == '<' && flag != 1){
            continue;
        }
        if (chars[i] != '>' && flag != 1){
            curFiled.append(chars[i]);
            continue;
        }else if (flag != 1){
            flag = 1;
            continue;
        }

        if (flag == 1 && chars[i] != '<'){
            curContent.append(chars[i]);
            continue;
        }
        if (flag == 1 && chars[i] == '<'){
            map.put(curFiled.toString(), curContent.toString());
            i += curFiled.length() + 2;
            curFiled.delete(0,curFiled.length());
            curContent.delete(0, curContent.length());
            flag = 0;
        }
    }
    try {
        Class<?> aClass = t.getClass();
        for (String key : map.keySet()){
            Method method = aClass.getMethod("set" + key, String.class);
            method.invoke(t, map.get(key));
        }
    }catch (Exception e){

    }
    return t;
}


4-2、异步处理

微信调用我们的接口超时时间是5s,会重复调用三次,如果三次都失败就会对用户显示:该公众号提供的服务出现故障,请稍后再试

这是肯定不允许的,有时候我们的业务太过复杂或者咋样都会导致超时,所以这里我们使用异步的方式来处理我们的业务。

自定义微信公众号客服,微信客服1.0(及时通信)自定义微信公众号客服,微信客服1.0(及时通信)


4-3、主要的业务逻辑

我们最后要做的效果就是,当一个消息来了,如果客服和这个人建立连接,就推送消息,如果没有就让未读消息+1。

自定义微信公众号客服,微信客服1.0(及时通信)
在这里插入图片描述


4-4、其它业务逻辑

4-4-1、WebSocket

webSocket建立连接、关闭连接、推送消息


4-4-2、WxHandler

接收微信消息的接口


4-4-3、MsgController

获取消息、发送消息


4-4-4、SessionController

获取会话列表、创建会话、删除会话


4-4-5、UserController

客服登录、登出

自定义微信公众号客服,微信客服1.0(及时通信)
在这里插入图片描述


原文始发于微信公众号(小道仙97):自定义微信公众号客服,微信客服1.0(及时通信)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/41470.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!