热门关键字:
jquery > jquery教程 > java > java获取微信分享接口配置信息

java获取微信分享接口配置信息

3197
作者:管理员
发布时间:2015/6/19 12:42:59
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=667

java获取微信分享接口配置信息

最近玩微信接口开发,很多功能百度都没有详细的解决方案,今天用java特意写了一个获取微信分享接口的配置信息,包括了以下内容:

1、获取appId = ""; // 必填,公众号的唯一标识

2、获取timestamp = ""; // 必填,生成签名的时间戳

3、获取nonceStr = ""; // 必填,生成签名的随机串

4、获取signature = "";// 必填,签名,见附录1


具体代码如下:


/**
 * @Description 获取微信分享配置信息
 * @author temdy
 * @Date 2015-06-19
 * @param request 请求对象
 * @return
 */
@RequestMapping(value="/getWxConfig")
@ResponseBody
public Object getWxConfig(HttpServletRequest request){
	Map ret = new HashMap();
	String appId = ""; // 必填,公众号的唯一标识
	String secret = ""; 
	String requestUrl = request.getRequestURL().toString();
	String access_token = "";
	String jsapi_ticket = "";
	String timestamp = Long.toString(System.currentTimeMillis() / 1000); // 必填,生成签名的时间戳
	String nonceStr = UUID.randomUUID().toString(); // 必填,生成签名的随机串
	String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appId+"&secret="+secret;
	JSONObject json = WeixinUtil.httpRequest(url, "GET", null);
	if (json != null) {
		access_token = json.getString("access_token");
		url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+access_token+"&type=jsapi";
		json = WeixinUtil.httpRequest(url, "GET", null);
		if (json != null) {
			jsapi_ticket = json.getString("ticket");
		}			
	}
	String signature = "";
	 //注意这里参数名必须全部小写,且必须有序
    String sign = "jsapi_ticket=" + jsapi_ticket +"&noncestr=" + nonceStr + "&timestamp=" + timestamp +"&url=" + requestUrl;
    try
    {
        MessageDigest crypt = MessageDigest.getInstance("SHA-1");
        crypt.reset();
        crypt.update(sign.getBytes("UTF-8"));
        signature = byteToHex(crypt.digest());
    }catch (NoSuchAlgorithmException e){
        e.printStackTrace();
    }catch (UnsupportedEncodingException e){
        e.printStackTrace();
    }
	ret.put("appId", appId);
	ret.put("timestamp", timestamp);
	ret.put("nonceStr", nonceStr);
	ret.put("signature", signature);
	return ret;
}

/**
 * @Description 字符串加密辅助方法
 * @author temdy
 * @Date 2015-06-19
 * @param hash byte[]
 * @return
 */
private static String byteToHex(final byte[] hash) {
    Formatter formatter = new Formatter();
    for (byte b : hash)
    {
        formatter.format("%02x", b);
    }
    String result = formatter.toString();
    formatter.close();
    return result;
}


WeiXinUtil类的代码

/** 
 * @Description 发起https请求并获取结果 
 * @author temdy 
 * @Date 2015-06-19
 * @param requestUrl 请求地址 
 * @param requestMethod 请求方式(GET、POST) 
 * @param outputStr 提交的数据 
 * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值) 
 */  
public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) {  
    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 (ConnectException ce) {  
    	ce.printStackTrace();
        //log.error("Weixin server connection timed out.");  
    } catch (Exception e) {  
    	e.printStackTrace();
        //log.error("https request error:{}", e);  
    }  
    return jsonObject;  
}





如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:java 微信分享 微信开发 appId timestamp nonceStr signature WeixinUtil
友荐云推荐