问题

最近在做微信公众号的开发(前端后台都有),所以更新系列博文就得推迟了,不过遇到的一些问题还是可以跟大家分享一下,以免大家以后需要用到的时候跟我一样踩坑。

 

那我拿到这个接口的第一件事,我肯定是先尝试获取素材列表啦~微信开放文档的使用说明如下:

android studi微信获取资源失败 微信显示获取资源失败_微信


android studi微信获取资源失败 微信显示获取资源失败_json_02

于是我马上上手调试:

HashMap<String, String> map = new HashMap<>();
        map.put("type", ”news“);
        map.put("offset", "0");
        map.put("count", "20");
        HttpResult httpResult = HttpUtil.ofPost("https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=" + wxBase.getAccessToken().getData(), map);

文档中说到的,需要用 https 的协议,然后需要用到 ACCESS_TOKEN 的字段(关于 access_token 的获取我前面已经有一篇关于公众号开发的博文有说明了,此处不再赘述,而且要确保获取 access_token 的机器访问 ip 在你之前配置的 IP 白名单中)。

android studi微信获取资源失败 微信显示获取资源失败_编程语言_03


好了,看着像没啥问题了,我按照官方的说明,用 post 的方式将封装了所需具备的几个参数的 map 去做列表请求,但是调试的结果是:

{errcode":40004,"errmsg":"invalid media type hint:"}

跟我标题中提到的那样,无论换什么 type 都会提示这个错误。

解决方案

没办法了,思考了一下,http 的参数有键值对和 json 的方式来传递,在前面做微信开发的时候,它们有用到了 xml 以及 json , 那我用 json 试一下?

HttpResult httpResult = HttpUtil.ofPost("https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=" + wxBase.getAccessToken().getData(), JSON.toJSONString(map));

项目中有用到了 fastjson,我用 fastjson 把原本的 map 对象转成 json 字符串试一下,果然功夫不负有心人啊~
问题解决,访问的图片此处就不贴出来了,大家如果遇到的话可以尝试一下~