zoukankan      html  css  js  c++  java
  • 微信公众号接口新增永久素材

    官网链接

    代码:(copy别人的,时间久了忘了出路,见谅!)

    import java.io.BufferedReader;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.security.KeyManagementException;
    import java.security.NoSuchAlgorithmException;
    import java.security.NoSuchProviderException;
    
    import net.sf.json.JSONObject;
    import util.AccessTokenUtil;
    
    public class Upload {
        public static void main(String[] args) {
            try {
                String path = "C:/1.jpg";
                JSONObject object = addMaterialEver(path,"image",AccessTokenUtil.getAccessToken());
                System.out.println(object.toString());
            } catch (Exception e) {
                System.out.println("---");
            }
        }
        public static  String connectHttpsByPost(String path, String KK, File file) throws IOException, NoSuchAlgorithmException, NoSuchProviderException, KeyManagementException {
            URL urlObj = new URL(path);
            //连接
            HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
            String result = null;
            con.setRequestMethod("POST");
            con.setDoInput(true);
    
            con.setDoOutput(true);
    
            con.setUseCaches(false); // post方式不能使用缓存
    
            // 设置请求头信息
            con.setRequestProperty("Connection", "Keep-Alive");
            con.setRequestProperty("Charset", "UTF-8");
            // 设置边界
            String BOUNDARY = "----------" + System.currentTimeMillis();
            con.setRequestProperty("Content-Type",
                    "multipart/form-data; boundary="
                            + BOUNDARY);
    
            // 请求正文信息
            // 第一部分:
            StringBuilder sb = new StringBuilder();
            sb.append("--"); // 必须多两道线
            sb.append(BOUNDARY);
            sb.append("
    ");
            sb.append("Content-Disposition: form-data;name="media";filelength="" + file.length() + "";filename=""
    
                    + file.getName() + ""
    ");
            sb.append("Content-Type:application/octet-stream
    
    ");
            byte[] head = sb.toString().getBytes("utf-8");
            // 获得输出流
            OutputStream out = new DataOutputStream(con.getOutputStream());
            // 输出表头
            out.write(head);
    
            // 文件正文部分
            // 把文件已流文件的方式 推入到url中
            DataInputStream in = new DataInputStream(new FileInputStream(file));
            int bytes = 0;
            byte[] bufferOut = new byte[1024];
            while ((bytes = in.read(bufferOut)) != -1) {
                out.write(bufferOut, 0, bytes);
            }
            in.close();
            // 结尾部分
            byte[] foot = ("
    --" + BOUNDARY + "--
    ").getBytes("utf-8");// 定义最后数据分隔线
            out.write(foot);
            out.flush();
            out.close();
            StringBuffer buffer = new StringBuffer();
            BufferedReader reader = null;
            try {
                // 定义BufferedReader输入流来读取URL的响应
                reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
                String line = null;
                while ((line = reader.readLine()) != null) {
                    buffer.append(line);
                }
                if (result == null) {
                    result = buffer.toString();
                }
            } catch (IOException e) {
                System.out.println("发送POST请求出现异常!" + e);
                e.printStackTrace();
            } finally {
                if (reader != null) {
                    reader.close();
                }
            }
            return result;
        }
        /**
         * 上传其他永久素材(图片素材的上限为5000,其他类型为1000)
         *
         * @return
         * @throws Exception
         */
        public static JSONObject addMaterialEver(String fileurl, String type, String token) {
            try {
                File file = new File(fileurl);
                //上传素材
                String path = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=" + token + "&type=" + type;
                String result = connectHttpsByPost(path, null, file);
                result = result.replaceAll("[\\]", "");
                System.out.println("result:" + result);
                JSONObject resultJSON = JSONObject.fromObject(result);
                if (resultJSON != null) {
                    if (resultJSON.get("media_id") != null) {
                        System.out.println("上传" + type + "永久素材成功");
                        return resultJSON;
                    } else {
                        System.out.println("上传" + type + "永久素材失败");
                    }
                }
                return null;
            } catch (IOException e) {
                e.printStackTrace();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            } catch (NoSuchProviderException e) {
                e.printStackTrace();
            } catch (KeyManagementException e) {
                e.printStackTrace();
            }
            return null;
        }
        
    }
    View Code

    下面两个类是作者自己的

    AccessTokenUtil

    package util;
    
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    
    
    /**
     * @todo 获取ACCESSTOKEN和jsapi_ticket
     * @author zhangyanan
     * @date 2018年7月31日
     */
    public class AccessTokenUtil {
        /**
         * @todo 获取ACCESSTOKEN
         * @author zhangyanan
         * @date 2018年7月31日
         */
        public static String getAccessToken() {
            InputStreamReader read = null;
            BufferedReader bufferedReader = null;
            String ACCESSTOKEN = "";
            try {
                read = new InputStreamReader(new FileInputStream(ConfigUtil.getProperty("accesstokenpath")), "UTF-8");
                bufferedReader = new BufferedReader(read);
                ACCESSTOKEN=bufferedReader.readLine();
                System.out.println("ACCESSTOKEN:"+ACCESSTOKEN);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    bufferedReader.close();
                    read.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return ACCESSTOKEN;
        }
        /**
         * @todo 获取jsapi_ticket
         * @author zhangyanan
         * @date 2018年7月31日
         */
        public static String getJsApiTicket() {
            InputStreamReader read = null;
            BufferedReader bufferedReader = null;
            String ACCESSTOKEN = "";
            try {
                read = new InputStreamReader(new FileInputStream(ConfigUtil.getProperty("ticketpath")), "UTF-8");
                bufferedReader = new BufferedReader(read);
                ACCESSTOKEN=bufferedReader.readLine();
                System.out.println("ACCESSTOKEN:"+ACCESSTOKEN);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    bufferedReader.close();
                    read.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return ACCESSTOKEN;
        }
    }
    View Code

    生成AccessToken:

    package task;
    
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Service;
    
    import net.sf.json.JSONObject;
    import util.ConfigUtil;
    import util.HttpRequest;
    
    @Service
    public class AccessTokenController {
        private static final Logger logger = LoggerFactory.getLogger(AccessTokenController.class);
        @Scheduled(cron = "0/30 * * * * ? ")
        public void wxServerWork() {
            String json = HttpRequest.sendGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
                    + ConfigUtil.getProperty("APPID") + "&secret=" + ConfigUtil.getProperty("APPSECRET"));
            logger.info(json);
            String ACCESSTOKEN = (String) JSONObject.fromObject(json).get("access_token");
            logger.info("access_token:
    " + ACCESSTOKEN);// 网页授权access_token
            //get jsapi_ticket
            getAndSaveJsapiTicket(ACCESSTOKEN);
            fileWriter(ConfigUtil.getProperty("accesstokenpath"), ACCESSTOKEN);
        }
        
        /**
         * @todo 获取jsapi_ticket
         * @author zhangyanan
         * @param accesstoken 
         * @date 2018年7月31日
         */
        private void getAndSaveJsapiTicket(String accesstoken){
            String url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+accesstoken+"&type=jsapi";
            String sendGet = HttpRequest.sendGet(url);
            logger.info("sendGet"+sendGet);
            JSONObject fromObject = JSONObject.fromObject(sendGet);
            if(fromObject.getInt("errcode")==0){
                fileWriter(ConfigUtil.getProperty("ticketpath"), fromObject.getString("ticket"));
            }else{
                //获取签名失败
                logger.error("获取微信签名失败,errorcode:"+fromObject.getInt("errcode")+"	errorMsg:"+fromObject.getString("errmsg"));
            }
        }
        
        /**
         * @todo 向文件中写入数据
         * @author zhangyanan.
         * @param path 写入文件路径
         * @param content 写入的内容
         * @date 2018年7月31日
         */
        private void fileWriter(String path,String content){
            FileOutputStream out = null;
            try {
                out = new FileOutputStream(path);
                out.write(content.getBytes());
                logger.info("获取AccessToken成功!");
            } catch (FileNotFoundException e) {
                logger.info("获取AccessToken失败!");
                e.printStackTrace();
            } catch (IOException e) {
                logger.info("获取AccessToken失败!");
                e.printStackTrace();
            } finally {
                try {
                    out.close();
                } catch (IOException e) {
                    logger.error("fileWriter关闭异常"+e);
                }
            }
        }
    }
    View Code
  • 相关阅读:
    PowerDesigner最基础的使用方法入门学习
    使用vertx共享数据
    VMware中虚拟机与主机不能ping通解决办法
    Win10系统的SurfacePro4无法修改启动顺序怎么办
    Win10系统的SurfacePro4如何重装系统-4 如何再次备份和还原系统
    Win10系统的SurfacePro4的启动菜单太多怎么管理,UEFI的启动菜单如何编辑
    Win10系统的SurfacePro4如何重装系统-3 重装完成之后的系统优化
    Win10系统的SurfacePro4如何重装系统-2 重装WIN10系统
    Win10系统的SurfacePro4如何重装系统-1 SurfacePro专用的PE
    Win10系统的DELL平板如何重装WIN10系统
  • 原文地址:https://www.cnblogs.com/yanan7890/p/9190490.html
Copyright © 2011-2022 走看看