当前位置: 主页 > JAVA语言

java实现微信分享功能-2017年11月22日09:43:56java开发

发布时间:2023-06-16 11:01   浏览次数:次   作者:佚名

更新时间:2017年11月22日 09:43:56 作者:admingy

这篇文章主要为大家详细介绍了java开发微信分享接口的步骤,具有一定的参考价值java实现微信分享功能,感兴趣的小伙伴们可以参考一下

微信分享接口的java开发的一些小步骤,具体内容如下

java实现微信分享功能_纯js实现微信分享_jquery实现分享到微信

1.配置接口信息进行验证

jquery实现分享到微信_纯js实现微信分享_java实现微信分享功能

jquery实现分享到微信_java实现微信分享功能_纯js实现微信分享

代码如下:

  /**
   * 访问没认证的地址跳转
   *
   * @param request
   * @return 登录页面
   * @throws Exception
   */
  @RequestMapping(value = "/checkWxDomainUrl", method = RequestMethod.GET)
  public void checkWxDomainUrl(HttpServletRequest request) throws Exception {
    try {
      // 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数 
      String signature = request.getParameter("signature");// 微信加密签名(token、timestamp、nonce。) 
      String timestamp = request.getParameter("timestamp");// 时间戳 
      String nonce = request.getParameter("nonce");// 随机数 
      String echostr = request.getParameter("echostr");// 随机字符串 
      // 将token、timestamp、nonce三个参数进行字典序排序 
      String[] params = new String[] { TOKEN, timestamp, nonce };
      Arrays.sort(params);
      // 将三个参数字符串拼接成一个字符串进行sha1加密 
      String clearText = params[0] + params[1] + params[2];
      String algorithm = "SHA-1";
      String sign = new String(Hex.encodeHex(
          MessageDigest.getInstance(algorithm).digest((clearText).getBytes()), true));
      // 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 
      if (signature.equals(sign)) {
        response.getWriter().print(echostr);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

jquery实现分享到微信_纯js实现微信分享_java实现微信分享功能

2.js配置

jquery实现分享到微信_java实现微信分享功能_纯js实现微信分享

纯js实现微信分享_jquery实现分享到微信_java实现微信分享功能

3.获取分享页面js需要参数 其中获取token、ticket加入缓存

  /**
  * 方法名:getWxConfig
* 详述:获取微信的配置信息
* 开发人员:gy * @param request * @return 说明返回值含义 * @throws 说明发生此异常的条件 */ @Override public Map getWxConfig(HttpServletRequest request) { Map ret = new HashMap(); String appId = wXConfigure.getAppId(); // 必填,公众号的唯一标识 String requestUrl = request.getRequestURL().toString(); String accessToken = null; String jsapiTicket = null; String url = ""; String timestamp = Long.toString(System.currentTimeMillis() / 1000); // 必填,生成签名的时间戳 String nonceStr = UUID.randomUUID().toString(); // 必填,生成签名的随机串 //此处先在缓存中查询,查询不到在调用接口查询 缓存中需要设置access-token的有效时间 // redisTemplate.opsForValue().getOperations().delete(prefix); // accessToken = (String) redisTemplate.opsForValue().get(prefix); Token accessTokenFromRedis = getAccessTokenFromRedis(); accessToken = accessTokenFromRedis.getAccessToken(); if (accessTokenFromRedis.getAccessToken() != null) { jsapiTicket = (String) redisTemplate.opsForValue().get(prefixTicket); if (jsapiTicket==null) { url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accessToken + "&type=jsapi"; JSONObject json = httpRequest(url, "GET", null); if (json != null) { jsapiTicket = json.getString("ticket"); redisTemplate.opsForValue().set(prefixTicket, jsapiTicket); redisTemplate.expire(prefixTicket, Integer.parseInt(wXConfigure.getExpireTime()), TimeUnit.SECONDS); } } } String signature = ""; // 注意这里参数名必须全部小写,且必须有序 String sign = "jsapi_ticket=" + jsapiTicket + "&noncestr=" + nonceStr + "×tamp=" + 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; } /** * 方法名:byteToHex
* 详述:字符串加密辅助方法
* 开发人员:gy
* @param hash * @return 说明返回值含义 * @throws 说明发生此异常的条件 */ private static String byteToHex(final byte[] hash) { Formatter formatter = new Formatter(); for (byte b : hash) { formatter.format("x", b); } String result = formatter.toString(); formatter.close(); return result; } /** * 从redis中获取accessToken,指定key的String值,过期时间7200s * * @param key * @return */ public Token getAccessTokenFromRedis() { Token token = null; String assesstoken = (String) redisTemplate.opsForValue().get(wXConfigure.getTokenKey()); if (null != assesstoken && !"".equals(assesstoken)) { token = new Token(); token.setAccessToken(assesstoken); return token; } else { token = CommonWxUtil.getToken(wXConfigure.getAppId(), wXConfigure.getSecret()); redisTemplate.opsForValue().set(wXConfigure.getTokenKey(), token.getAccessToken()); redisTemplate.expire(wXConfigure.getTokenKey(), Integer.parseInt(wXConfigure.getExpireTime()), TimeUnit.SECONDS); return token; } }

java实现微信分享功能_纯js实现微信分享_jquery实现分享到微信

4.页面的相关js的引入


 

备注:调转的路径为配置的域名路径,不然无法调用java实现微信分享功能,图片大小不可以大于300k

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。