栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java开发微信分享接口的步骤

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java开发微信分享接口的步骤

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

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

代码如下:

  
  @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();
    }
  }

2.js配置

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

  
  @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;
  }

  
  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;

  }

  
  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;
    }
  }

4.页面的相关js的引入



 



 备注:调转的路径为配置的域名路径,不然无法调用,图片大小不可以大于300k

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/143055.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号