报错实况:
环境:JDK 1.8 + Spring Boot 2.5.14 + IDEA 2024.2.2 触发操作:向微信小程序发送发送构建的消息主体时,控制台打印code=47003错误(参数无效)
关键报错片段:
private static Map<String, Object> wxMessageMap(OrderInfo orderInfo) {
HashMap<String, Object> paramMap = new HashMap<>();
Map<String, Object> messageContent = new HashMap<>();
messageContent.put("thing22", new HashMap<String, Object>() {{
put("value", orderInfo.getTime());
}});
String orderId = orderInfo.getOrderId();
messageContent.put("character_string5", new HashMap<String, Object>() {{
put("value", orderId);
}});
messageContent.put("thing9", new HashMap<String, Object>() {{
put("value", orderInfo.getChargingStationId());
}});
messageContent.put("amount17", new HashMap<String, Object>() {{
put("value", orderInfo.getPrice());
}});
messageContent.put("phrase10", new HashMap<String, Object>() {{
put("value", orderInfo.getStatus());
}});
paramMap.put("data", messageContent);
return paramMap;
控制台打印错误:code = 47003 , msg = argument invalid! data.phrase10.value invalid
菜鸟踩坑心路
-
错误预判: “以为是传入参数的值是不正确的,实际上值没有问题”
-
迷惑操作:
- 重启IDEA 3次
- “将传入的参数修改为“111”的样式,重启之后发现依然有问题”
-
灵光时刻:
- 通过查询微信小程序文档发现
phrase10.value的值"111"或者“orderInfo.getStatus()”不符合微信模板消息的校验规则(代码中orderInfo.getStatus()返回的类型是String类型),phrase10.value的值应为“枚举类”;
- 通过查询微信小程序文档发现
破局关键:
-
查阅微信模板消息文档,确认
phrase10允许的值范围。 -
调整 phrase10.value,改为符合要求的枚举值(如
"已完成")。messageContent.put("phrase10", new HashMap<String, Object>() {{ put("value", "已完成"); }}); -
如果 orderInfo.getStatus() 返回的值不符合要求,可以做一个映射转换。
避坑总结(新手必看)
| 错误认知 | 纠正方案 |
|---|---|
| “报错之后认为是值有问题” | 优先查看相关文档检查是否是类品匹配错误 |
> 我是 "炸开的淀粉肠" ,应届Java工程师
> ✅ 专注记录新人成长路上的每一个跟头