一家专门做特卖的网站手机版,如何建设教育信息网站,重庆网站制作设计获客,wordpress用户名忘记密码argument invalid! data.date4.value invalid解决方案 一、背景描述二、问题原因三、解决方案 一、背景描述
最近在开发一个微信小程序#xff0c;服务端调用了微信的API接口#xff0c;是一个消息推送的接口#xff0c;地址为#xff1a;
POST https://api.weixin.qq.co… argument invalid! data.date4.value invalid解决方案 一、背景描述二、问题原因三、解决方案 一、背景描述
最近在开发一个微信小程序服务端调用了微信的API接口是一个消息推送的接口地址为
POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_tokenACCESS_TOKEN前提 access_token 都正确然后发起调用微信服务端返回错误如下
{errcode:47003,errmsg:argument invalid! data.date4.value invalid rid: 6437d505-412dd624-159fcd21}注意这里是 data 中 date4 参数无效。本文解决的问题就是这个 date 类型的变量无法的问题。
我的代码如下
public static void main(String[] args) {JSONObject param new JSONObject();// MapString, Object param new HashMap(8);param.put(touser, oJihF4_YGHtdkjlkljkRI3JA1TK0);param.put(template_id, -IMWnTHiFmesQJQBGuxZCtXmVbnMoYwl94wZ7fdsagw);JSONObject data new JSONObject();JSONObject thing1 new JSONObject();thing1.put(value, 000003);JSONObject thing5 new JSONObject();thing5.put(value, 倾斜);JSONObject thing2 new JSONObject();thing2.put(value, 设备向【内侧】倾斜1.85°请确认);JSONObject date4 new JSONObject();// 实际开发中这个里时间是根据设备上报上来的时候动态获取的我这里是方便演示写成了 new Date();date4.put(value, new Date());JSONObject thing15 new JSONObject();thing15.put(value, 郑州金水区);data.put(thing1, thing1);data.put(thing5, thing5);data.put(thing2, thing2);data.put(date4, date4);data.put(thing15, thing15);param.put(data, data);String send https://api.weixin.qq.com/cgi-bin/message/subscribe/send;String sendUrl send ?access_token 67_pFkB_XajD9wkKohGFwYfq67koXbHPOVq6stegwZzlgrUfj_ncAsDj42UY4KQqDHf5rGYtHuC8M9_H-D1C4Dwu-vwsu_V3i1YXXc5getdOOf4gTAn0OPab7_nAZgesgeADSZ;String s JSONUtil.toJsonStr(param);String body HttpUtil.createPost(sendUrl).body(s).header(Content-type, application/json).execute().charset(UTF-8).body();System.out.println(param);System.out.println(body);}至于为什么需要这种格式可以参考微信开发文档消息相关 /订阅消息 /发送订阅消息
小程序管理后台配置的推送消息模板为
二、问题原因
查这个是有技巧的从看请求参数请求方法格式内容上来看都没有问题但是就是返回报错不能一直在这上面浪费时间从报错的内容里知道有个 rid 的字段然后再看微信文档就有眉目了。 我们可以从查询rid信息入手查询rid信息 本接口用于查询调用公众号/小程序/第三方平台等接口报错返回的rid详情信息辅助开发者高效定位问题。 示例代码如下 public static void test1() {String post https://api.weixin.qq.com/cgi-bin/openapi/rid/get?access_token67_pFkB_XajD9wkKohGFwYfq67koXbHPOVq6T83jQNwZzlgrUfj_ncAsDj42UY4KQqDHf5rGYtHuC8M9_H-D1C4D;JSONObject param new JSONObject();param.put(rid, 6437d0a3-461068ff-53eaabd4);String body HttpUtil.createPost(post).body(JSONUtil.toJsonStr(param)).execute().body();System.out.println(body);}根据返回结果我们查看 date4 这个字段发送的请求值是 时间戳 而微信官方文档上明确是年月日格式的所以调用消息推送的接口返回结果为 errmsg:argument invalid! data.date4.value invalid
三、解决方案
按微信开发文档上的要求填写即可但是个人感觉开发文档写的不是很清楚不是很详细。微信官方文档上写的是日期类型的数据。实际上微信API接受的是 String 类型的日期格式。 修改代码
JSONObject date4 new JSONObject();
String dateFormat DateUtil.format(alarm.getAlarmTime(), yyyy-MM-dd HH:mm:ss);
date4.put(value, dateFormat);再次运行搞定。
本文完结