微信公众号&&企业微信 获取JD-SDK 签名算法 《Java技术开发》

1.获取token :

         /**
         * 获取企业微信token
         * 使用该方法获取token需要传入两参数,一个微信appID,一个appsecret。
         * 该工具获取token使用了redis缓存。
         * @param CORPID
         * @param SECRET
         * @return
         * @throws IOException 
         * @throws Exception
         */
        public  String getToken(String appID, String appsecret) throws Exception  {
            
            if((String) RedisUtil.get("token")==null){
            String urlStr =WeChatConstant.TOKEN_Url + appID + "&secret=" + appsecret;
            String  result= HttpRequestUtil.httpGet(urlStr);
            JSONObject jsonObject = new JSONObject(result);
            String accesstoken = jsonObject.getString("access_token");
            RedisUtil.set("token", accesstoken);
            //设置redis有效期刷新token
            RedisUtil.expire("token",1200L);
            logger.info("token========="+accesstoken);
            return accesstoken;
            }else{
                String token =(String) RedisUtil.get("token");
                return token;
            }
            
        }
 二、移动端JS-SDK  获取签名算法

1、获取url 

       ①,在页面上获取的方法:var curWwwPath = window.document.location.href;

       ②/** 
     * url 路径标准化
     * @param request
     * @return
     */
    @ResponseBody
    public String url(HttpServletRequest request) {
        String url = "";
        // http://localhost:8080/blog.do
        /*url = request.getScheme() + "://" + request.getServerName()
                + request.getServletPath();
        if (request.getQueryString() != null) {
            url += "?" + request.getQueryString();
        }*/
        url =request.getScheme() + "://" + request.getServerName()+request.getRequestURI(); 
        return url;

    }

2,/**
     * 获取签名权限
     * @param url
     * @return
     * @throws Exception
     */
    public JSONObject getJsSdkSign(String url) throws Exception {
        
        // 随机数
        String noncestr = create_nonce_str();
        // 时间戳
        String timestamp = create_timestamp();
        // 获取Ticket
        String jsapi_ticket = getJsapiTicket();

        JSONObject result = new JSONObject();
        String signStr = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + noncestr + "&timestamp=" + timestamp + "&url="
                + url;
        try {
            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
            crypt.reset();
            crypt.update(signStr.getBytes("UTF-8"));
            String signature = byteToHex(crypt.digest());
            logger.info(" signStr==" + signStr + " signature" + signature);
            result.put("url", url);
            result.put("jsapi_ticket", jsapi_ticket);
            result.put("nonceStr", noncestr);
            result.put("timestamp", timestamp);
            result.put("signature", signature);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return result;
    }

    private static String byteToHex(byte[] hash) {
        Formatter formatter = new Formatter();
        for (byte b : hash) {
            formatter.format("%02x", b);
        }
        String result = formatter.toString();
        formatter.close();
        return result;
    }
    /**
     * 获取jsapiTicket
     */
    private String getJsapiTicket() throws Exception {
        
        if((String) RedisUtil.get("jsapi_ticket")==null){
        String token = getToken(WeChatConstant.appID, WeChatConstant.appsecret);
        String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+token+"&type=jsapi";
        String result = HttpRequestUtil.httpGet(url);
        JSONObject jsonObject = new JSONObject(result);
        String jsapi_ticket = jsonObject.getString("ticket");
        RedisUtil.set("jsapi_ticket", jsapi_ticket);
        //设置redis有效期刷新jsapi_ticket
        RedisUtil.expire("jsapi_ticket", 1200L);
        logger.info("jsapi_ticket========="+jsapi_ticket);
        return jsapi_ticket;
        }else{
            return (String) RedisUtil.get("jsapi_ticket");
        }
    }
    
    
    

    /**
     * 生成随机字符串
     * 
     * @return
     */
    private static String create_nonce_str() {
        return UUID.randomUUID().toString();
    }

    /**
     * 时间格式化
     * 
     * @return
     */
    private static String create_timestamp() {
        return Long.toString(System.currentTimeMillis() / 1000);
    }

 

 

 

二、HttpRequestUtil 用于发送http请求的工具类

/**
 * 用于发送http请求的工具类
 * @author chen
 *
 */
public class HttpRequestUtil {
    private static Logger logger = LoggerFactory.getLogger(HttpRequestUtil.class);

    /**
     * post请求
     * @param url         url地址
     * @return
     */
    public static String httpPost(String url, Map<String,String> params){
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost method = new HttpPost(url);
        String strResult = "";
        try {
            List<NameValuePair> nameValuePairList=new ArrayList<NameValuePair>();
            for (String key:params.keySet()){
                nameValuePairList.add(new BasicNameValuePair(key,params.get(key)));
            }
            UrlEncodedFormEntity entity=new UrlEncodedFormEntity(nameValuePairList,"utf-8");
            method.setEntity(entity);

            logger.info("url == " + url);
            HttpResponse result = httpClient.execute(method);
            url = URLDecoder.decode(url, "UTF-8");
            /**请求发送成功,并得到响应**/
            logger.info("statusCode " + result.getStatusLine().getStatusCode());
            if (result.getStatusLine().getStatusCode() == 200) {
                try {
                    /**读取服务器返回过来的json字符串数据**/
                    strResult = EntityUtils.toString(result.getEntity());
                    logger.info("strResult  " + strResult);
                } catch (Exception e) {
                    logger.error("post请求提交失败:" + url, e);
                }
            }
        } catch (IOException e) {
            logger.error("post请求提交失败:" + url, e);
        }
        return strResult;
    }

    public static String httpPostJson(String postUrl, String params){
        try {
            logger.info("httpPostJson   postUrl ==== " + postUrl);
            logger.info("httpPostJson   params ==== " + params);
            // 创建url资源
            URL url = new URL(postUrl);
            logger.info("httpPostJson   url ==== " + url);
            // 建立http连接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            // 设置允许输出
            conn.setDoOutput(true);

            conn.setDoInput(true);

            // 设置不用缓存
            conn.setUseCaches(false);
            // 设置传递方式
            conn.setRequestMethod("POST");
            // 设置维持长连接
            conn.setRequestProperty("Connection", "Keep-Alive");
            // 设置文件字符集:
            conn.setRequestProperty("Charset", "UTF-8");
            //转换为字节数组
//            System.out.println("JSON.toJSONString(params)"+JSON.toJSONString(params));
            byte[] data = params.getBytes("UTF-8");
            // 设置文件长度
            conn.setRequestProperty("Content-Length", String.valueOf(data.length));

            // 设置文件类型:
            conn.setRequestProperty("contentType", "application/json");

            // 开始连接请求
            conn.connect();
            OutputStream  out = conn.getOutputStream();
            // 写入请求的字符串
            out.write(data);
            out.flush();
            out.close();

//            System.out.println(conn.getResponseCode());
            // 请求返回的状态
            if (conn.getResponseCode() == 200) {
//                System.out.println("连接成功");
                // 请求返回的数据
                logger.info("httpPostJson   连接成功 ==== ");
                InputStream in = conn.getInputStream();
                String a = null;
                try {
                    byte[] data1 = new byte[in.available()];
                    in.read(data1);
                    // 转成字符串
                    a = new String(data1,"utf-8");
                    System.out.println(a);
                    return a;
                } catch (Exception e1) {
//                    e1.printStackTrace();
                    throw new RuntimeException(e1);
                }
            } else {
                logger.info("httpPostJson   连接failed ==== ");
                return  "failed";
            }

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 发送get请求
     * @param url    路径
     * @return
     */
    public static String httpGet(String url){
        //get请求返回结果
        String strResult = null;
        try {
            DefaultHttpClient client = new DefaultHttpClient();
            //发送get请求
            HttpGet request = new HttpGet(url);
            HttpResponse response = client.execute(request);

            /**请求发送成功,并得到响应**/
            if (response.getStatusLine().getStatusCode() == org.apache.http.HttpStatus.SC_OK) {
                /**读取服务器返回过来的json字符串数据**/
                strResult = EntityUtils.toString(response.getEntity());
                logger.info("httpGet url=="+url+" strResult== " + strResult);
            } else {
                logger.error("get请求提交失败:" + url);
            }
        } catch (IOException e) {
            logger.error("get请求提交失败:" + url, e);
        }
        return strResult;
    }

    public static InputStream httpGetForImage(String url){
        InputStream inputStream = null;
        HttpURLConnection httpURLConnection = null;
        try {
            URL uRL = new URL(url);//创建的URL
            if (uRL!=null) {
                httpURLConnection = (HttpURLConnection) uRL.openConnection();//打开链接
                httpURLConnection.setConnectTimeout(3000);//设置网络链接超时时间,3秒,链接失败后重新链接
                httpURLConnection.setDoInput(true);//打开输入流
                httpURLConnection.setRequestMethod("GET");//表示本次Http请求是GET方式
                int responseCode = httpURLConnection.getResponseCode();//获取返回码
                if (responseCode == 200) {//成功为200
                    //从服务器获得一个输入流
                    inputStream = httpURLConnection.getInputStream();
                }
            }
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return inputStream;
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值