微信公众平台 java 获取accesstoken 2

来源:互联网 发布:医院网络咨询 编辑:程序博客网 时间:2024/06/06 06:36

/** 

     * 发起https请求并获取结果 

     *  

     * @param requestUrl 请求地址 

     * @param requestMethod 请求方式(GET、POST) 

     * @param outputStr 提交的数据 

     * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值) 

     */  

    public static JSONObject httpRequest(StringrequestUrl, StringrequestMethod, StringoutputStr) { 

        JSONObject jsonObject =null; 

        StringBuffer buffer = new StringBuffer();  

        try {  

            // 创建SSLContext对象,并使用我们指定的信任管理器初始化 

            TrustManager[] tm = {new MyX509TrustManager() }; 

            SSLContext sslContext = SSLContext.getInstance("SSL","SunJSSE"); 

            sslContext.init(null,tm,new java.security.SecureRandom()); 

            // 从上述SSLContext对象中得到SSLSocketFactory对象 

            SSLSocketFactory ssf =sslContext.getSocketFactory(); 

  

            URL url = new URL(requestUrl);  

            HttpsURLConnection httpUrlConn = (HttpsURLConnection)url.openConnection(); 

            httpUrlConn.setSSLSocketFactory(ssf); 

  

            httpUrlConn.setDoOutput(true); 

            httpUrlConn.setDoInput(true); 

            httpUrlConn.setUseCaches(false); 

            // 设置请求方式(GET/POST)  

            httpUrlConn.setRequestMethod(requestMethod); 

  

            if ("GET".equalsIgnoreCase(requestMethod)) 

                httpUrlConn.connect(); 

  

            // 当有数据需要提交时  

            if (null !=outputStr) { 

                OutputStream outputStream =httpUrlConn.getOutputStream(); 

                // 注意编码格式,防止中文乱码  

                outputStream.write(outputStr.getBytes("UTF-8")); 

                outputStream.close(); 

            }  

  

            // 将返回的输入流转换成字符串  

            InputStream inputStream =httpUrlConn.getInputStream(); 

            InputStreamReader inputStreamReader =new InputStreamReader(inputStream,"utf-8"); 

            BufferedReader bufferedReader =new BufferedReader(inputStreamReader); 

  

            String str = null;  

            while ((str =bufferedReader.readLine()) !=null) { 

                buffer.append(str); 

            }  

            bufferedReader.close(); 

            inputStreamReader.close(); 

            // 释放资源  

            inputStream.close(); 

            inputStream = null;  

            httpUrlConn.disconnect(); 

            jsonObject = JSONObject.fromObject(buffer.toString()); 

        } catch (ConnectExceptionce) { 

            logger.error("Weixin server connection timed out."); 

        } catch (Exception e) {  

        logger.error("https request error:{}",e); 

        }  

        return jsonObject;  

    } 

    

 // 获取access_token的接口地址(GET) 限200(次/天)  

    publicfinalstatic Stringaccess_token_url ="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; 

      

    /** 

     * 获取access_token 

     *  

     * @param appid 凭证 

     * @param appsecret 密钥 

     * @return 

     */  

    public static AccessToken getAccessToken() { 

        AccessToken accessToken =null; 

      

        String requestUrl = access_token_url.replace("APPID", appid).replace("APPSECRET", appsecret); 

        JSONObject jsonObject = httpRequest(requestUrl,"GET",null); 

        // 如果请求成功  

        if (null !=jsonObject) { 

            try {  

                accessToken = new AccessToken();  

                accessToken.setToken(jsonObject.getString("access_token")); 

                accessToken.setExpiresIn(jsonObject.getInt("expires_in")); 

            } catch (JSONExceptione) { 

                accessToken = null;  

                // 获取token失败  

                logger.error("获取token失败 errcode:{} errmsg:{}",jsonObject.getInt("errcode"),jsonObject.getString("errmsg")); 

            }  

        }  

        return accessToken;  

    }  

    

原创粉丝点击