zoukankan      html  css  js  c++  java
  • 微信js sdk分享开发摘记java版

    绑定域名和引入js的就不说了

    废话不说直接上代码

     1  public  void share(HttpServletRequest request) throws Exception {
     2             
     3             StringBuffer homeUrl = request.getRequestURL();
     4             String queryString =request.getQueryString();
     5             if(StringUtils.isNotBlank(queryString)){
     6                 homeUrl.append("?").append(queryString);
     7             }
    8 long timestamp = System.currentTimeMillis() / 1000; 9 10 String nonceStr = UUID.randomUUID().toString(); 11 12 String signature = SignUtil.getSignature( 13 weiXinBaseService.getJsTicket(), nonceStr, timestamp, 14 homeUrl.toString()); 15 logger.info("url="+homeUrl); 16 logger.info("nonceStr=" + nonceStr); 17 logger.info("timestamp=" + timestamp); 18 logger.info("signature=" + signature); 19 logger.info("appid=" + WebConfig.get("weixin.appid")); 20 request.setAttribute("appid", WebConfig.get("weixin.appid")); 21 request.setAttribute("timestamp", timestamp); 22 request.setAttribute("nonceStr", nonceStr); 23 request.setAttribute("signature", signature); 24 }

    此方法主要有几个地方需要注意:1.获取的是请求的全路径,如果get请求有跟参数需要做个拼接。要不然签名会有错误。

    2.随机数直接通过uuid随机数取的。

    3.签名。微信的签名是个挺麻烦的事。但是又是必不可少的。签名代码奉上。

    /**
         * 获得分享链接的签名。
         * @param ticket
         * @param nonceStr
         * @param timeStamp
         * @param url
         * @return
         * @throws Exception
         */
        public static String getSignature(String ticket, String nonceStr, long timeStamp, String url) throws Exception {
            String sKey = "jsapi_ticket=" + ticket
                    + "&noncestr=" + nonceStr + "&timestamp=" + timeStamp
                    + "&url=" + url;
            return getSignature(sKey);
        }

    具体签名方法如下

     /**
         * 验证签名。
         * 
         * @param signature
         * @param timestamp
         * @param nonce
         * @return
         */
        public static String getSignature(String sKey) throws Exception {
            String ciphertext = null;
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            byte[] digest = md.digest(sKey.toString().getBytes());
            ciphertext = byteToStr(digest);
            return ciphertext.toLowerCase();
        }
    
     /** 
         * 将字节数组转换为十六进制字符串 
         *  
         * @param byteArray 
         * @return 
         */  
        private static String byteToStr(byte[] byteArray) {  
            String strDigest = "";  
            for (int i = 0; i < byteArray.length; i++) {  
                strDigest += byteToHexStr(byteArray[i]);  
            }  
            return strDigest;  
        }  
      /** 
         * 将字节转换为十六进制字符串 
         *  
         * @param mByte 
         * @return 
         */  
        private static String byteToHexStr(byte mByte) {  
            char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };  
            char[] tempArr = new char[2];  
            tempArr[0] = Digit[(mByte >>> 4) & 0X0F];  
            tempArr[1] = Digit[mByte & 0X0F];  
      
            String s = new String(tempArr);  
            return s;  
        }  

    前端页面中引入微信js文件并配置config

    <script type="text/javascript" src="${pageContext.request.contextPath}/static/js/jweixin-1.0.0.js"></script>
    
    <script>
      var shareTitle = "法国游已经近在咫尺了,是朋友就帮我一把吧!";
        var shareImg = "http://" + domain +"${pageContext.request.contextPath}/static/img/shareImage.jpg"
        wx.config({
            debug: false, //
            appId: '${appid}', // 必填,公众号的唯一标识
            timestamp: '${timestamp}', // 必填,生成签名的时间戳
            nonceStr: '${nonceStr}', // 必填,生成签名的随机串
            signature: '${signature}',// 必填,签名,见附录1
            jsApiList: [
                'onMenuShareTimeline',
                'onMenuShareAppMessage',
                'showOptionMenu'
            ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
            
        });
    
    
    
    
        wx.ready(function () {    
           share();
            });
        function share(){
            wx.showOptionMenu();
            wx.onMenuShareTimeline({
                title: shareTitle, // 分享标题
                link: $("#shareLink").val(), // 分享链接
                imgUrl:shareImg,
                success: function () {
                    
                }
            });
            wx.onMenuShareAppMessage({
                title: shareTitle, // 分享标题
                link: $("#shareLink").val(), // 分享链接
                imgUrl:shareImg,
                desc: 'xxx', // 分享描述
                success: function () {
                    
                }
            });
        }
    </script>
     
  • 相关阅读:
    asp window.showModalDialog浏览器不兼容的解决方案
    JavaScript倒计时算法(计算剩余多少天)实现
    (全程图解)Axure RP8.0安装教程
    HTML通过超链接传递参数到JSP页面-html与jsp交互
    JavaWeb中登录验证码生成
    PowerDesigner16.5安装教程
    前台正则的使用
    稀疏算法Sparse
    ajax请求超时解决方案
    修改默认select样式
  • 原文地址:https://www.cnblogs.com/wanglonghai/p/4565452.html
Copyright © 2011-2022 走看看