微信小程序开发-客服消息

后端使用JAVA、SpringMVC

1、登陆微信公众平台==》设置==》开发设置

下拉如图:

微信小程序客服聊天功能Java_java

点击启用,进入到消息消息服务配置,如下图

微信小程序客服聊天功能Java_微信小程序客服聊天功能Java_02

参数描述:

URL是开发者用来接收微信消息和事件的接口URL。

Token可由开发者可以任意填写,用作生成签名。

EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。

注意:填写完服务器配置时点击提交操作,发现保存不了,提示Token验证失败。这里的原因是微信会向配置的服务器地址发送token校验请求,验证请求是否来自微信,如此时服务端代码没有上线,token会一直处于验证不通过的状态。

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下:

微信小程序客服聊天功能Java_微信小程序客服聊天功能Java_03

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

加密/校验流程如下:

1、将token、timestamp、nonce三个参数进行字典序排序

2、将三个参数字符串拼接成一个字符串进行sha1加密

3、开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。

校验方式代码:

/**
     * 微信消息通知-请求校验(确认请求来自微信服务器)
     *
     * @return
     */
    @RequestMapping(value = "/服务器通知地址", method = RequestMethod.GET)
    @ResponseBody
    public String signature(String signature, String timestamp, String nonce, String echostr) {
        String token = PropertiesUtils.getValue("token配置");
        String[] params = new String[] { token, timestamp, nonce };
        // 1、将token、timestamp、nonce三个参数按照字典排序
        Arrays.sort(params);
        // 2、将三个参数字符串拼接成一个字符串进行sha1加密
        StringBuilder sb = new StringBuilder();
        for (String param : params) {
            sb.append(param);
        }
        String localSignature = SHA1.shaEncode(sb.toString(), "ISO-8859-1");
        if (localSignature.equals(signature)) {
            return echostr;
        }
        return null;
    }

2、服务器接收客户消息事件

文本消息

用户在客服会话中发送文本消息时将产生如下数据包:

微信小程序客服聊天功能Java_java_04

图片消息

用户在客服会话中发送图片消息时将产生如下数据包:

微信小程序客服聊天功能Java_微信_05

小程序卡片消息

用户在客服会话中发送小程序卡片消息时将产生如下数据包:

微信小程序客服聊天功能Java_小程序_06

进入会话事件

用户在小程序“客服会话按钮”进入客服会话时将产生如下数据包:

微信小程序客服聊天功能Java_java_07

3、发送客服消息

当用户和小程序客服产生特定动作的交互时(具体动作列表请见下方说明),微信将会把消息数据推送给开发者,开发者可以在一段时间内(目前修改为48小时)调用客服接口,通过POST一个JSON数据包来发送消息给普通用户。此接口主要用于客服等有人工消息处理环节的功能,方便开发者为用户提供更加优质的服务。

目前允许的动作列表如下,不同动作触发后,允许的客服接口下发消息条数和下发时限不同。下发条数达到上限后,会收到错误返回码,具体请见返回码说明页:

微信小程序客服聊天功能Java_小程序_08

客服接口-发消息

接口调用请求说明

http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN ACCESS_TOKEN:需要通过调用微信接口获取

各消息类型所需的JSON数据包如下:

微信小程序客服聊天功能Java_客服消息_09

参数说明:

微信小程序客服聊天功能Java_小程序_10

错误码说明:

微信小程序客服聊天功能Java_客服消息_11

其他说明:

发送文本消息时,支持添加可跳转小程序的文字链 data-miniprogram-appid 项,填写小程序appid,则表示该链接跳转小程序; data-miniprogram-path项,填写小程序路径,路径与app.json中保持一致,可带参数; 对于不支持data-miniprogram-appid 项的客户端版本,如果有herf项,则仍然保持跳href中的链接; 小程序发带小程序文字链的文本消息,data-miniprogram-appid必须是该小程序的appid。

4、开发调试

在开发阶段进行调试时,因接收不到微信推送的消息接收事件,可在小程序中调起客服消息,发送任意内容,然后通过postman模拟客户消息事件,调用微信的发送消息接口,用户就能收到发送的客服消息。