微信小程序开发-客服消息
后端使用JAVA、SpringMVC
1、登陆微信公众平台==》设置==》开发设置
下拉如图:
点击启用,进入到消息消息服务配置,如下图
参数描述:
URL是开发者用来接收微信消息和事件的接口URL。
Token可由开发者可以任意填写,用作生成签名。
EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。
注意:填写完服务器配置时点击提交操作,发现保存不了,提示Token验证失败。这里的原因是微信会向配置的服务器地址发送token校验请求,验证请求是否来自微信,如此时服务端代码没有上线,token会一直处于验证不通过的状态。
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下:
开发者通过检验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、服务器接收客户消息事件
文本消息
用户在客服会话中发送文本消息时将产生如下数据包:
图片消息
用户在客服会话中发送图片消息时将产生如下数据包:
小程序卡片消息
用户在客服会话中发送小程序卡片消息时将产生如下数据包:
进入会话事件
用户在小程序“客服会话按钮”进入客服会话时将产生如下数据包:
3、发送客服消息
当用户和小程序客服产生特定动作的交互时(具体动作列表请见下方说明),微信将会把消息数据推送给开发者,开发者可以在一段时间内(目前修改为48小时)调用客服接口,通过POST一个JSON数据包来发送消息给普通用户。此接口主要用于客服等有人工消息处理环节的功能,方便开发者为用户提供更加优质的服务。
目前允许的动作列表如下,不同动作触发后,允许的客服接口下发消息条数和下发时限不同。下发条数达到上限后,会收到错误返回码,具体请见返回码说明页:
客服接口-发消息
接口调用请求说明
http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN ACCESS_TOKEN:需要通过调用微信接口获取
各消息类型所需的JSON数据包如下:
参数说明:
错误码说明:
其他说明:
发送文本消息时,支持添加可跳转小程序的文字链 data-miniprogram-appid 项,填写小程序appid,则表示该链接跳转小程序; data-miniprogram-path项,填写小程序路径,路径与app.json中保持一致,可带参数; 对于不支持data-miniprogram-appid 项的客户端版本,如果有herf项,则仍然保持跳href中的链接; 小程序发带小程序文字链的文本消息,data-miniprogram-appid必须是该小程序的appid。
4、开发调试
在开发阶段进行调试时,因接收不到微信推送的消息接收事件,可在小程序中调起客服消息,发送任意内容,然后通过postman模拟客户消息事件,调用微信的发送消息接口,用户就能收到发送的客服消息。