一、问题描述
最近公司在搞微信小程序开发,然后自己负责一个小程序的模板消息发送,调用其中的
https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN
模板发送接口,请求之后,就返回错误信息:
{"errcode":40003,"errmsg":"invalid openid hint: [c49C4a0396ge21]"}
40003是不合法的OpenID,代码为:
// 组装请求参数
WxaNoticeDTO dto = new WxaNoticeDTO();
dto.setTouser(requestDTO.getOpenid());
dto.setTemplate_id(requestDTO.getTemplateId());
dto.setPage("pages/home/index");
dto.setForm_id(requestDTO.getFormId());
Map<String, WxaNoticeFieldDTO> data = new HashMap<>(5);
// data.put("keyword1", new WxaNoticeFieldDTO("1元"));
// data.put("keyword2", new WxaNoticeFieldDTO("xxxxx"));
// data.put("keyword3", new WxaNoticeFieldDTO("xxxxx")); //时间
// data.put("keyword4", new WxaNoticeFieldDTO("xxxxx"));
// data.put("keyword5", new WxaNoticeFieldDTO("未在有效期内取货,自动发起退款。"));
dto.setData(data);
// 发送请求
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
HttpPost post = new HttpPost(SEND_MESSAGE_URL + token);
post.setConfig(buildPostConfig());
StringEntity stringEntity = new StringEntity(JsonUtil.toJson(dto), "UTF-8");
stringEntity.setContentEncoding("UTF-8");
stringEntity.setContentType("application/json");
post.setEntity(stringEntity);
response = httpClient.execute(post);
HttpEntity entity = response.getEntity();
log.info("notice result: " + EntityUtils.toString(entity, "UTF-8"));
二、解决方法
在网上找了几种解决方式:
1.用户的openid与(AppId和AppSecret)对应不上,也就是说AppId,AppSecret,openid要成套。
2.JSON格式错误如"openid":"" openid的引号和值的引号也要带着。
我这里改来改去,最后发现就是JSON格式有问题,但是不是openid的问题。