欢迎访问 格调科技 服务电话 15991746071
Nest 登录
Nest 6 关注
Nest 2 购买

JAVA 微信JSSDK Config参数配置方法

下面分享下微信公众号JSSDK中config参数的获取。

1、获取config参数的工具类,调用getWxConfig方法就行。

 


	
  1.  
    package com.souvc.weixin.util;
  2.  
     
  3.  
    import java.io.BufferedReader;
  4.  
    import java.io.InputStream;
  5.  
    import java.io.InputStreamReader;
  6.  
    import java.io.OutputStream;
  7.  
    import java.io.UnsupportedEncodingException;
  8.  
    import java.net.ConnectException;
  9.  
    import java.net.URL;
  10.  
    import java.security.MessageDigest;
  11.  
    import java.security.NoSuchAlgorithmException;
  12.  
    import java.util.Formatter;
  13.  
    import java.util.HashMap;
  14.  
    import java.util.Map;
  15.  
    import java.util.UUID;
  16.  
     
  17.  
    import javax.net.ssl.HttpsURLConnection;
  18.  
    import javax.net.ssl.SSLContext;
  19.  
    import javax.net.ssl.SSLSocketFactory;
  20.  
    import javax.net.ssl.TrustManager;
  21.  
    import javax.servlet.http.HttpServletRequest;
  22.  
     
  23.  
    import net.sf.json.JSONObject;
  24.  
     
  25.  
    public class WeixinUtil {
  26.  
     
  27.  
    /**
  28.  
    * 方法名:httpRequest
  29.  
    * 详述:发送http请求
  30.  
    * 开发人员:souvc
  31.  
    * 创建时间:2016-1-5
  32.  
    * @param requestUrl
  33.  
    * @param requestMethod
  34.  
    * @param outputStr
  35.  
    * @return 说明返回值含义
  36.  
    * @throws 说明发生此异常的条件
  37.  
    */
  38.  
    public static JSONObject httpRequest(String requestUrl,String requestMethod, String outputStr) {
  39.  
    JSONObject jsonObject = null;
  40.  
    StringBuffer buffer = new StringBuffer();
  41.  
    try {
  42.  
    TrustManager[] tm = { new MyX509TrustManager() };
  43.  
    SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
  44.  
    sslContext.init(null, tm, new java.security.SecureRandom());
  45.  
    SSLSocketFactory ssf = sslContext.getSocketFactory();
  46.  
    URL url = new URL(requestUrl);
  47.  
    HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
  48.  
    httpUrlConn.setSSLSocketFactory(ssf);
  49.  
    httpUrlConn.setDoOutput(true);
  50.  
    httpUrlConn.setDoInput(true);
  51.  
    httpUrlConn.setUseCaches(false);
  52.  
    httpUrlConn.setRequestMethod(requestMethod);
  53.  
    if ("GET".equalsIgnoreCase(requestMethod))
  54.  
    httpUrlConn.connect();
  55.  
    if (null != outputStr) {
  56.  
    OutputStream outputStream = httpUrlConn.getOutputStream();
  57.  
    outputStream.write(outputStr.getBytes("UTF-8"));
  58.  
    outputStream.close();
  59.  
    }
  60.  
    InputStream inputStream = httpUrlConn.getInputStream();
  61.  
    InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
  62.  
    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
  63.  
    String str = null;
  64.  
    while ((str = bufferedReader.readLine()) != null) {
  65.  
    buffer.append(str);
  66.  
    }
  67.  
    bufferedReader.close();
  68.  
    inputStreamReader.close();
  69.  
    inputStream.close();
  70.  
    inputStream = null;
  71.  
    httpUrlConn.disconnect();
  72.  
    jsonObject = JSONObject.fromObject(buffer.toString());
  73.  
    } catch (ConnectException ce) {
  74.  
    ce.printStackTrace();
  75.  
    } catch (Exception e) {
  76.  
    e.printStackTrace();
  77.  
    }
  78.  
    return jsonObject;
  79.  
    }
  80.  
     
  81.  
     
  82.  
    /**
  83.  
    * 方法名:getWxConfig
  84.  
    * 详述:获取微信的配置信息
  85.  
    * 开发人员:souvc
  86.  
    * 创建时间:2016-1-5
  87.  
    * @param request
  88.  
    * @return 说明返回值含义
  89.  
    * @throws 说明发生此异常的条件
  90.  
    */
  91.  
    public static Map getWxConfig(HttpServletRequest request) {
  92.  
    Map ret = new HashMap();
  93.  
     
  94.  
    String appId = "xxxx"; // 必填,公众号的唯一标识
  95.  
    String secret = "xxxx";
  96.  
     
  97.  
    String requestUrl = request.getRequestURL().toString();
  98.  
    String access_token = "";
  99.  
    String jsapi_ticket = "";
  100.  
    String timestamp = Long.toString(System.currentTimeMillis() / 1000); // 必填,生成签名的时间戳
  101.  
    String nonceStr = UUID.randomUUID().toString(); // 必填,生成签名的随机串
  102.  
    String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+ appId + "&secret=" + secret;
  103.  
     
  104.  
    JSONObject json = WeixinUtil.httpRequest(url, "GET", null);
  105.  
     
  106.  
    if (json != null) {
  107.  
    //要注意,access_token需要缓存
  108.  
    access_token = json.getString("access_token");
  109.  
     
  110.  
    url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+ access_token + "&type=jsapi";
  111.  
    json = WeixinUtil.httpRequest(url, "GET", null);
  112.  
    if (json != null) {
  113.  
    jsapi_ticket = json.getString("ticket");
  114.  
    }
  115.  
    }
  116.  
    String signature = "";
  117.  
    // 注意这里参数名必须全部小写,且必须有序
  118.  
    String sign = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonceStr+ "×tamp=" + timestamp + "&url=" + requestUrl;
  119.  
    try {
  120.  
    MessageDigest crypt = MessageDigest.getInstance("SHA-1");
  121.  
    crypt.reset();
  122.  
    crypt.update(sign.getBytes("UTF-8"));
  123.  
    signature = byteToHex(crypt.digest());
  124.  
    } catch (NoSuchAlgorithmException e) {
  125.  
    e.printStackTrace();
  126.  
    } catch (UnsupportedEncodingException e) {
  127.  
    e.printStackTrace();
  128.  
    }
  129.  
    ret.put("appId", appId);
  130.  
    ret.put("timestamp", timestamp);
  131.  
    ret.put("nonceStr", nonceStr);
  132.  
    ret.put("signature", signature);
  133.  
    return ret;
  134.  
    }
  135.  
     
  136.  
     
  137.  
    /**
  138.  
    * 方法名:byteToHex
  139.  
    * 详述:字符串加密辅助方法
  140.  
    * 开发人员:souvc
  141.  
    * 创建时间:2016-1-5
  142.  
    * @param hash
  143.  
    * @return 说明返回值含义
  144.  
    * @throws 说明发生此异常的条件
  145.  
    */
  146.  
    private static String byteToHex(final byte[] hash) {
  147.  
    Formatter formatter = new Formatter();
  148.  
    for (byte b : hash) {
  149.  
    formatter.format("%02x", b);
  150.  
    }
  151.  
    String result = formatter.toString();
  152.  
    formatter.close();
  153.  
    return result;
  154.  
     
  155.  
    }
  156.  
    }


 

 

2、页面的获取方式。

 


	

	
  1.  
    <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
  2.  
    <%@page language="java" import="com.souvc.weixin.util.WeixinUtil" %>
  3.  
    html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4.  
    <html>
  5.  
    <head>
  6.  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  7.  
    <title> title>
  8.  
    <%
  9.  
    Map ret = new HashMap ();
  10.  
    ret=WeixinUtil.getWxConfig(request);
  11.  
    request.setAttribute("appId", ret.get("appId"));
  12.  
    request.setAttribute("timestamp", ret.get("timestamp"));
  13.  
    request.setAttribute("nonceStr", ret.get("nonceStr"));
  14.  
    request.setAttribute("signature", ret.get("signature"));
  15.  
    %>
  16.  
    head>
  17.  
    <body>
  18.  
     
  19.  
     
  20.  
    body>
  21.  
     
  22.  
     
  23.  
    <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js">script>
  24.  
    <script type="text/javascript">
  25.  
     
  26.  
    // 微信信息的以及调用的配置
  27.  
    wx.config({
  28.  
    debug: false,
  29.  
    appId: '${appId}',
  30.  
    timestamp: '${timestamp}',
  31.  
    nonceStr: '${nonceStr}',
  32.  
    signature: '${signature}',
  33.  
    jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone']
  34.  
    });
  35.  
     
  36.  
    wx.ready(function(){
  37.  
     
  38.  
     
  39.  
    });
  40.  
    script>
  41.  
     
  42.  
    html>