JAVA微信公众号开发——上传图片,新增永久素材,群发

需求: 一套系统,分PC端和微信公众号,共用一套数据,希望在PC端的后台管理系统发布信息时,在微信公众号的显示: 1.进行群发推送 2.一个子菜单的点击弹出最新发布的信息内容(其实就是每个信息都是永久素材,点击后在公众号内弹出图文消息) 技术实现细节: 需要解决几个技术


1.上传图片到微信公众号平台,用于图文信息内容的图片

官方文档说明:

http请求方式: POST
https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN
调用示例(使用curl命令,用FORM表单方式上传一个图片):
curl -F [email protected] "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN"
在做的过程中,有一些问题:

1.后端java去发送post请求  图片类型 File和MultipartFile都会报41005错误

解决不了,后来想到了方案2:

2.在前端用form提交,成功 ,但是问题是form提交直接跳转页面,显示返回参数,不能做后续处理,后来想到用jquery的异步提交form表单可以不用跳转继续后续处理,但是又出现了跨域问题。。。。。。。失败

3.最后,解决:java调用外部进程,执行curl命令,

本身curl Windows是没有的 要专门下载

代码:

            String []cmd_img = {"C:\\Users\\netlab606\\Desktop\\curl-7.55.1-win64-mingw\\curl-7.55.1-win64-mingw\\bin\\curl.exe", "-F","media=@"+path,WxConfig.UPLOADIMG+WxConfig.ACCESS_TOKEN};
            ProcessBuilder pb=new ProcessBuilder(cmd_img);
            pb.redirectErrorStream(true);
            Process p;
            try {
                p = pb.start();
                BufferedReader br=null;
                String line=null;

                br=new BufferedReader(new InputStreamReader(p.getInputStream()));
                while((line=br.readLine())!=null){
                    System.out.println(line);
                    if(line.contains("media_id")){

                        int start=line.indexOf("media_id")+11;
                        int end=line.indexOf(",",start)-1;
                        WxConfig.THUMB_MEDIA_ID=line.substring(start,end);
                        System.out.println(WxConfig.THUMB_MEDIA_ID);
                    }
                }
                br.close();

完美~

2.新加永久素材 

官方文档:

接口调用请求说明

http请求方式: POST,https协议

https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN

调用示例

{

  "articles": [{

       "title": TITLE,

       "thumb_media_id": THUMB_MEDIA_ID,

       "author": AUTHOR,

       "digest": DIGEST,

       "show_cover_pic": SHOW_COVER_PIC(0 / 1),

       "content": CONTENT,

       "content_source_url": CONTENT_SOURCE_URL

    },

    //若新增的是多图文素材,则此处应还有几段articles结构

 ]

}

现在的问题在于thumb_media_id怎么获得, thumb_media_id是图文消息的封面图片素材id(必须是永久mediaID)

使用

https://api.weixin.qq.com/cgi-bin/material/add_material?type=thumb&access_token=

这个接口返回的media_id 作为thumb_media_id  代码同上 使用curl命令发送请求   注意图片大小 有限制 测试 70kb左右可以  上限不知道

获得thumb_media_id后的 真正新增永久素材的核心代码:

                JSONObject json1=new JSONObject();
                JSONObject json2=new JSONObject();
                json2.put("title",communityIntro.getName());
                json2.put("thumb_media_id",WxConfig.THUMB_MEDIA_ID);
                json2.put("show_cover_pic","1");
                json2.put("content",communityIntro.getDetail());
                JSONArray jsonArray=new JSONArray();
                jsonArray.add(json2);
                json1.put("articles",jsonArray);
                 String result=new HttpRequestor().postJson(json1,WxConfig.ADD_NEWS+WxConfig.ACCESS_TOKEN);
                int start_2=result.indexOf("media_id")+11;
                int end_2=result.indexOf("}",start_2)-1;
                WxConfig.MEDIA_ID=result.substring(start_2,end_2);


3.  群发  大致代码同上

群发接口  也需要三步:

 a.获得缩略图的thumb_media_id

 b.获得群发的图文消息的media_id

 c.开始群发

这里要注意,a步的thumb_media_id 接口调用 要使用:http://file.api.weixin.qq.com/cgi-bin/media/upload?type=thumb&access_token= 这个地址 不同于新增永久素材使用的

所以不能使用新增永久素材生成的thumb_media_id

b步 的接口也不同于素材,要使用
https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=

c步 接口:https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=

具体参数 参考 官方文档




你可能感兴趣的:(Java)