在微信公众号开发者模式下,自动回复功能不能使用。
基于此,需开发该功能。
我这里使用的是客服功能,并没有选择自动回复的原因是因为需求中有一条消息请求可能匹配多个答案的情况。
这里自动回复功能中的 虽然能支持多个图文组装为一条消息,但对其他四种消息类型不支持,所以确定用了客服。
-- 准备
一.在微信公众平台-开发-基本配置中配置自己服务器资源响应链接
1.需要把ip加入到白名单,局域网的话可以使用 ngrok工具 进行解决
工具链接:https://github.com/zhouminpz/tool
使用方法:https://blog.csdn.net/befroe_you/article/details/78611965
域名查IP:http://www.ip138.com/
2.服务器需要提供GET方法,用于微信请求配置链接进行验证。
@RequestMapping(value = "/main", method = {RequestMethod.GET}, produces = "text/plain;charset=UTF-8")
public void doGet( HttpServletRequest request, HttpServletResponse response,
@RequestParam(value = "signature", required = true) String signature,
@RequestParam(value = "timestamp", required = true) String timestamp,
@RequestParam(value = "nonce", required = true) String nonce,
@RequestParam(value = "echostr", required = true) String echostr,
@RequestParam(value = "cid", required = true) String cid) {
String token ="zhihuiyouke";
try {
logger.info("参数:signature="+signature+",timestamp="+timestamp+",nonce="+nonce+",echostr="+echostr+",cid="+cid);
if (SignUtil.checkSignature(token,signature, timestamp, nonce)) {
ajax(echostr,response);
} else {
logger.info("这里存在非法请求!");
}
} catch (Exception e) {
logger.error("doGet", e);
}
}
我这里用到了cid,没用到可以去掉!
这里能接通,成功一大半!
3.准备在微信公众平台配置的资源POST方法进行实际操作!
这里先不多说,过程很坎坷。
坑:返回news 类型消息的时候,articles 需要带上中括号!!!!痛啊!
坑:
String openid=map.get("FromUserName"); //用户 openid
String mpid=map.get("ToUserName"); //公众号原始 ID
返回的时候,需要将ToUserName 的值指定为openid。
坑:编码问题
// 获取URLConnection对象对应的输出流
//out = new PrintWriter(conn.getOutputStream());
out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8"));
坑:在文本中加入链接的拼接方式
欢迎关注壳牌中国加油站!
如果您是壳牌智享汇会员,请点击此处登录,即可在微信上体验会员之旅
如果您还没有壳牌智享汇会员账号,请点击此处注册
坑:token 需要根据appid和appsecret获得token,每天token请求次数是有限制的,每个token有效期为2小时,所以需要缓存。
坑:公众号返回的错误代码:https://bbs.csdn.net/topics/390765535
4.在微信公众平台开通客服账号
需要在公众号中开通客服功能!
待续。。。