文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java开发微信分享接口的过程

2023-05-30 20:58

关注

本篇内容介绍了“java开发微信分享接口的过程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

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

配置接口信息进行验证

java开发微信分享接口的过程

代码如下:

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

js配置

java开发微信分享接口的过程

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

    @Override  public Map<String, Object> getWxConfig(HttpServletRequest request) {    Map<String, Object> ret = new HashMap<String, Object>();    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 + "&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;  }    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;    }  }

页面的相关js的引入

<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script><script type="text/javascript"> // 微信信息的以及调用的配置// 微信信息的以及调用的配置  var signature=$("#signature").val();  var appId=$("#appId").val();  var timestamp=$("#timestamp").val();  var nonceStr=$("#nonceStr").val();  var userId=$("#userId").val();  var productName=1;    alert(signature);wx.config({  debug: false,   appId:appId ,   timestamp:timestamp,   nonceStr: nonceStr,   signature:signature,  jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] }); wx.ready(function(){   var isOk = true;   wx.checkJsApi({     jsApiList: ['onMenuShareTimeline'],     fail: function (res) {       alert("微信版本太低,不支持分享给朋友的功能!");       isOk = false;     },     success: function (res) {       alert("支持QQ分享。");     }   });       // 获取“分享到朋友圈”按钮点击状态及自定义分享内容接口      wx.onMenuShareTimeline({        title: '第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单',         desc: '第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单',         link: 'http://4d536256.ngrok.io/login',         imgUrl: 'http://busc.4ggogo.com/media/media/img/home-show-a.png',         success: function (res) {            alert(JSON.stringify(res));           if (res.errMsg=='shareTimeline:ok') {                        // 用户确认分享后执行的回调函数                        }         },        cancel: function (res) {           // 用户取消分享后执行的回调函数           alert(res);        }      });          // 获取“分享给朋友”按钮点击状态及自定义分享内容接口      wx.onMenuShareAppMessage({        title: '第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息', // 分享        desc: "第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息", // 分享描述        link:'http://4d536256.ngrok.io/login',        imgUrl: 'http://busc.4ggogo.com/media/media/img/home-show-a.png', // 分享图标        type: 'link', // 分享类型,music、video或link,不填默认为link      });            //获取“分享到QQ”按钮点击状态及自定义分享内容接口      wx.onMenuShareQQ({        title: '第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单', // 分享        desc: '第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单', // 分享描述        link: 'http://4d536256.ngrok.io/login', // 分享链接        imgUrl: 'http://busc.4ggogo.com/media/media/img/home-show-a.png', // 分享图标        success: function () {           // 用户确认分享后执行的回调函数        },        cancel: function () {           // 用户取消分享后执行的回调函数        }      });            //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口      wx.onMenuShareWeibo({        title: '分享到腾讯微博', // 分享        desc: '分享到腾讯微博描述', // 分享描述        link: 'http://4d536256.ngrok.io/login', // 分享链接        imgUrl: 'http://busc.4ggogo.com/media/media/img/home-show-a.png', // 分享图标        success: function () {           // 用户确认分享后执行的回调函数        },        cancel: function () {           // 用户取消分享后执行的回调函数        }      });            //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口      wx.onMenuShareQZone({        title: '分享到QQ空间11111111111111111', // 分享        desc: '分享到QQ空间描述2222222222222222222', // 分享描述        link: 'http://4d536256.ngrok.io/login',         imgUrl:'http://busc.4ggogo.com/media/media/img/home-show-a.png', // 分享图标        success: function () {           // 用户确认分享后执行的回调函数        },        cancel: function () {           // 用户取消分享后执行的回调函数        }      }); }); </script>

“java开发微信分享接口的过程”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯