zoukankan      html  css  js  c++  java
  • 微信公众号二次开发

    1、微信公众号取过来的昵称、地区、城市乱码问题

    get请求,读取数据的时候,指定编码 UTF-8
    in = new BufferedReader(new InputStreamReader( connection.getInputStream(), "utf-8"));

    public static String sendGet(String url,String param) throws Exception{
    		
    		 String result = "";
    	        BufferedReader in = null;
    	        try {
    	            String urlNameString = url + "?" + param;
    	            URL realUrl = new URL(urlNameString);
    	            // 打开和URL之间的连接
    	            URLConnection connection = realUrl.openConnection();
    	            // 设置通用的请求属性
    	            connection.setRequestProperty("accept", "*/*");
    	            connection.setRequestProperty("connection", "Keep-Alive");
    	            connection.setRequestProperty("user-agent",
    	                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    	            // 建立实际的连接
    	            connection.connect();
    	            // 获取所有响应头字段
    	            Map<String, List<String>> map = connection.getHeaderFields();
    	            // 遍历所有的响应头字段
    	            for (String key : map.keySet()) {
    	                System.out.println(key + "--->" + map.get(key));
    	            }
    	            // 定义 BufferedReader输入流来读取URL的响应
    	            in = new BufferedReader(new InputStreamReader(
    	                    connection.getInputStream(),"UTF-8"));
    	            String line;
    	            while ((line = in.readLine()) != null) {
    	                result += line;
    	            }
    	        } catch (Exception e) {
    	            System.out.println("发送GET请求出现异常!" + e);
    	            e.printStackTrace();
    	        }
    	        // 使用finally块来关闭输入流
    	        finally {
    	            try {
    	                if (in != null) {
    	                    in.close();
    	                }
    	            } catch (Exception e2) {
    	                e2.printStackTrace();
    	            }
    	        }
    	        
    	        return result;
    	}
    

      2、回复图片消息的时候,必须POST方式调用接口:

    https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN

    档网址:https://mp.weixin.qq.com/wiki/7/12a5a320ae96fecdf0e15cb06123de9f.html#.E5.8F.91.E9.80.81.E5.9B.BE.E7.89.87.E6.B6.88.E6.81.AF
    /**
         * 向指定 URL 发送POST方法的请求
         * 
         * @param url
         *            发送请求的 URL
         * @param param
         *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
         * @return 所代表远程资源的响应结果
         */
        public static String sendPost(String url, String param) {
        	
            PrintWriter out = null;
            BufferedReader in = null;
            String result = "";
            try {
                URL realUrl = new URL(url);
                // 打开和URL之间的连接
                URLConnection conn = realUrl.openConnection();
                // 设置通用的请求属性
                conn.setRequestProperty("accept", "*/*");
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setRequestProperty("user-agent",
                        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                // 发送POST请求必须设置如下两行
                conn.setDoOutput(true);
                conn.setDoInput(true);
                // 获取URLConnection对象对应的输出流
                out = new PrintWriter(conn.getOutputStream());
                // 发送请求参数
                out.print(param);
                // flush输出流的缓冲
                out.flush();
                // 定义BufferedReader输入流来读取URL的响应
                in = new BufferedReader(
                        new InputStreamReader(conn.getInputStream()));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                System.out.println("发送 POST 请求出现异常!"+e);
                e.printStackTrace();
            }
            //使用finally块来关闭输出流、输入流
            finally{
                try{
                    if(out!=null){
                        out.close();
                    }
                    if(in!=null){
                        in.close();
                    }
                }
                catch(IOException ex){
                    ex.printStackTrace();
                }
            }
            return result;
        }    
    

      

       	//回复图片
    	               String url="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+ACCESS_TOKEN;
    	               String json="{"touser": ""+openid+"", "msgtype": "image", "image": {"media_id": ""+mediaId+""}}";
    	              	
    	              String reply= UrlHttpUtil.sendPost(url, json);
    	              System.out.println(reply);
    	              System.out.println(userinfo.getNickname());
    

      3、如果回复图片消息,需先上传永久素材,返回mediaId(opentId就是fromUserName)

    /**
        * 微信服务器素材上传
        * @param file  表单名称media
        * @param token access_token
        * @param type  type只支持四种类型素材(video/image/voice/thumb)
        */
       public static JSONObject uploadMedia(File file, String token, String type) {
           if(file==null||token==null||type==null){
               return null;
           }
    
           if(!file.exists()){
              // logger.info("上传文件不存在,请检查!");
               return null;
           }
    
           //临时素材地址
           //String url = "http://file.api.weixin.qq.com/cgi-bin/media/upload";
           String url="https://api.weixin.qq.com/cgi-bin/material/add_material";
           
           JSONObject jsonObject = null;
           PostMethod post = new PostMethod(url);
           post.setRequestHeader("Connection", "Keep-Alive");
           post.setRequestHeader("Cache-Control", "no-cache");
           FilePart media = null;
           HttpClient httpClient = new HttpClient();
           //信任任何类型的证书
           //Protocol myhttps = new Protocol("https", new MySSLProtocolSocketFactory(), 443); 
          // Protocol.registerProtocol("https", myhttps);
    
           try {
               media = new FilePart("media", file);
               Part[] parts = new Part[] { new StringPart("access_token", token),
                       new StringPart("type", type), media };
               MultipartRequestEntity entity = new MultipartRequestEntity(parts,
                       post.getParams());
               post.setRequestEntity(entity);
               int status = httpClient.executeMethod(post);
               if (status == HttpStatus.SC_OK) {
                   String text = post.getResponseBodyAsString();
                   jsonObject = JSONObject.fromObject(text);
               } else {
                  // logger.info("upload Media failure status is:" + status);
               }
           } catch (FileNotFoundException execption) {
               
           } catch (HttpException execption) {
               
           } catch (IOException execption) {
               
           }
           return jsonObject;
       }
    

      

  • 相关阅读:
    动态生成 Excel 文件供浏览器下载的注意事项
    JavaEE 中无用技术之 JNDI
    CSDN 泄露用户密码给我们什么启示
    刚发布新的 web 单点登录系统,欢迎下载试用,欢迎提建议
    jQuery jqgrid 对含特殊字符 json 数据的 Java 处理方法
    一个 SQL 同时验证帐号是否存在、密码是否正确
    PostgreSQL 数据库在 Windows Server 2008 上安装注意事项
    快速点评 Spring Struts Hibernate
    Apache NIO 框架 Mina 使用中出现 too many open files 问题的解决办法
    解决 jQuery 版本升级过程中出现 toLowerCase 错误 更改 doctype
  • 原文地址:https://www.cnblogs.com/Anders888/p/6836481.html
Copyright © 2011-2022 走看看