zoukankan      html  css  js  c++  java
  • 微信自定义分享

    1、页面签名

        /**
         * jsapi 签名
         * jsapi_signature
         * 需要页面传递参数:url:所需签名页面的当前页面路径(可以用window.location.href查看)
         */
        @RequestMapping(value="/jsapi_signature")
        @ResponseBody
        public PageData jsapi_signature(){
            PageData pd =this.getPageData();
            logger.info("jsapi 签名");
            PageData pt=new PageData();
            pd = this.getPageData();
            try {
                String ticket = null;
                // 存储凭证和生成时间
                FishingSingle instance = FishingSingle.instance;
                if (null != instance.getJsGenerateTime()) {
                    Date currentTime = new Date();
                    // 计算时间差
                    long time = ((currentTime.getTime() - instance.getJsGenerateTime()
                            .getTime()) / 1000);
                    // ticket有效时间7200秒
                    if (time >= 7100) {
                        // 获取js凭证
                        ticket = WeixinUtil.jsApi();
                    } else {
                        ticket = instance.getJsTicket();
                    }
                } else {
                    // 获取js凭证
                    ticket = WeixinUtil.jsApi();
                }
                //ticket = WeixinUtil.jsApi();
                Map<String, Object> paramsMap = new HashMap<String, Object>();
                paramsMap.put("jsapi_ticket", ticket);
                System.out.println("jsapi_ticket="+ticket);
                paramsMap.put("timestamp", System.currentTimeMillis());
                paramsMap.put("noncestr", "weixin");
                // 调用js的页面完成路径
                String total_url = pd.getString("url");
                paramsMap.put("url",total_url+"&state=1");
                pt.put("total_url", total_url);
                // 排序后的结果
                String listStr = createLinkString(paramsMap);
                logger.info("排序后..." + listStr);
                // SHA-1加密
                String tmpStr = new MySecurity().encode(listStr, MySecurity.SHA_1);
                logger.info("SHA-1加密后:" + tmpStr);
                // 保存js需要的4个参数
                pd.put("appId",WeixinUtil.appId );
                pd.put("timestamp",paramsMap.get("timestamp") );
                pd.put("nonceStr",paramsMap.get("noncestr"));
                pd.put("signature",tmpStr);
            } catch (Exception e) {
                logger.error(e.toString(), e);
            }
            return pd;
        }
    
        /**
         * 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
         *
         * @param params
         *            需要排序并参与字符拼接的参数组
         * @return 拼接后字符串
         */
        public static String createLinkString(Map<String, Object> params) {
    
            List<String> keys = new ArrayList<String>(params.keySet());
            Collections.sort(keys);
    
            String prestr = "";
    
            for (int i = 0; i < keys.size(); i++) {
                String key = keys.get(i);
                Object value = params.get(key);
    
                if (i == keys.size() - 1) {// 拼接时,不包括最后一个&字符
                    prestr = prestr + key + "=" + value;
                } else {
                    prestr = prestr + key + "=" + value + "&";
                }
            }
    
            return prestr;
        }

    2、分享js

      /*
       * 注意:
       * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
       * 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
       * 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
       *
       * 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈:
       * 邮箱地址:weixin-open@qq.com
       * 邮件主题:【微信JS-SDK反馈】具体问题
       * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。
       * 
       * 说明:此js用于配置微信公众号js-sdk相关参数
       * =======================本系统所有页面需要用到微信js-sdk相关接口都需要 加入此js即可====================================================
       */
        var server_path = "";//服务器路径
        var basePath = "";//服务器路径
    
       var debug = true;
       var appId = "wx0dd21a0061759b0c";
       var timestamp = "";
       var nonceStr = "";
       var signature = "";
    /**    初始化微信接口配置    */
       function init_weixin_config(web_title,web_url,web_logo_small,web_description){
           console.log("url11:"+window.location.href);
           /** 先通过本系统服务端的一个接口,获取该签名等信息 */
            $.ajax({
                   url:"weixin/jsapi_signature",
                   data:"url="+window.location.href,
                    success:function(json){
                      timestamp = json.timestamp; 
                      nonceStr = json.nonceStr; 
                      signature = json.signature;
                      
                      console.log("timestamp:"+timestamp);
                      console.log("nonceStr:"+nonceStr);
                      console.log("signature:"+signature);
                      console.log("url22:"+window.location.href);
            /** 获取签名等数据后再设置本地微信js配置参数 ,设置完下面的配置之后,别的页面就可以用 js-sdk的jsApiList中的功能了 */
                          wx.config({
                              debug: false,
                              appId: appId,
                              timestamp: timestamp,
                              nonceStr: nonceStr,
                              signature: signature,
                              jsApiList: [
                                'checkJsApi',
                                'onMenuShareTimeline',
                                'onMenuShareAppMessage',
                                'onMenuShareQQ',
                                'onMenuShareWeibo',
                                'onMenuShareQZone',
                                'hideMenuItems',
                                'showMenuItems',
                                'hideAllNonBaseMenuItem',
                                'showAllNonBaseMenuItem',
                                'translateVoice',
                                'startRecord',
                                'stopRecord',
                                'onVoiceRecordEnd',
                                'playVoice',
                                'onVoicePlayEnd',
                                'pauseVoice',
                                'stopVoice',
                                'uploadVoice',
                                'downloadVoice',
                                'chooseImage',
                                'previewImage',
                                'uploadImage',
                                'downloadImage',
                                'getNetworkType',
                                'openLocation',
                                'getLocation',
                                'hideOptionMenu',
                                'showOptionMenu',
                                'closeWindow',
                                'scanQRCode',
                                'chooseWXPay',
                                'openProductSpecificView',
                                'addCard',
                                'chooseCard',
                                'openCard'
                              ]
                          });
                          wx.ready(function(){
                              //wx.hideMenuItems({menuList: ['menuItem:share:qq','menuItem:share:weiboApp','menuItem:share:facebook','menuItem:share:QZone','menuItem:copyUrl','menuItem:share:email','menuItem:openWithQQBrowser','menuItem:openWithSafari','menuItem:share:brand']});
                              //wx.showMenuItems({menuList: ['menuItem:profile','menuItem:addContact']});
                              wx.showMenuItems({menuList: ['menuItem:share:qq','menuItem:share:weiboApp','menuItem:share:facebook','menuItem:share:QZone','menuItem:copyUrl','menuItem:share:email','menuItem:openWithQQBrowser','menuItem:openWithSafari','menuItem:share:brand']});
                              weixin_share_all_init(web_title,web_url,web_logo_small,web_description,0,0);
                          });
                 }
            });
       }
       
       
    
     /*=//////////////////以下几种分享用于通用的分享,如需个性化,请在自行的页面中编写////////////微信分享相关js   开始///////////////////////////////////////*/
       
    /**微信分享统一初始化函数:页面通过此方法=初始化微信相关的所有分享接口*/
       function weixin_share_all_init(title,link,imgUrl,desc,objType,objId){
           desc = desc.substring(0,40);
           weixin_share_friends(title,link,imgUrl,desc,objType,objId);
           weixin_share_circle_of_friends(title,link,imgUrl,objType,objId);
           weixin_share_qq(title,link,imgUrl,desc,objType,objId);
           weixin_share_weibo(title,link,imgUrl,desc,objType,objId);
           weixin_share_QZone(title,link,imgUrl,desc,objType,objId);
       }
       
       /**保存分享成功记录======================客户端分享成功后调用,服务器保存分享记录=======================================*/
       function save_share(link,channel,objType,objId){
           $.ajax({
                    type: "get",
                    url: basePath+"/share/save",
                    data: "share.link="+link+"&share.channel="+channel+"&share.objType="+objType+"&share.objId="+objId,
                    success: function(html){
                        /*alert("分享成功");*/
                    }
                  });
       }
    /**
     * 微信分享邀请注册成功后回调此函数
     * @param link
     */
       function share_registe_success(link){
           if(link.indexOf("open_share")>-1){
               $.ajax({
                    type: "get",
                    url: basePath+"/hongbao/share_registe_success",
                    success: function(json){
                        if(json.code=="00"){
                          alert("分享获取奖金成功");
                          window.location.href = basePath+"hongbao/share_registe_success_view?change_score_money="+json.change_score_money;
                        }else{
                            alert("分享成功");
                        }
                    }
               });
           }
       }
    /**微信分享给朋友===============初始化此方法,用于设置 分享内容及监听事件=======1==========================*/
       function weixin_share_friends(title,link,imgUrl,desc,objType,objId){
         wx.onMenuShareAppMessage({
           title: title,
           desc: desc,
           link: link,
           imgUrl: imgUrl,
           trigger: function (res) {
             // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
             alert('用户点击发送给朋友');
           },
           success: function (res) {
             //save_share(link,1,objType,objId);
             alert('已分享');
             share_registe_success(link);
           },
           cancel: function (res) {
             alert('已取消');
           },
           fail: function (res) {
             alert(JSON.stringify(res));
           }
         });
       }
       
       
    /**微信分享朋友圈===================页面需要初始化此方法==============2=================*/
        function weixin_share_circle_of_friends(title,link,imgUrl,objType,objId){
            wx.onMenuShareTimeline({
              title: title,
              link: link,
              imgUrl: imgUrl,
              trigger: function (res) {
                // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
    //            alert('用户点击分享到朋友圈');
              },
              success: function (res) {
    //            save_share(link,2,objType,objId);
                alert('已分享');
                share_registe_success(link);
              },
              cancel: function (res) {
    //            alert('已取消');
              },
              fail: function (res) {
    //            alert(JSON.stringify(res));
              }
            });
        }
        /**
         * 微信分享QQ===================页面需要初始化此方法==============3=================
         */
        function weixin_share_qq(title,link,imgUrl,desc,objType,objId){
            wx.onMenuShareQQ({
                title: title,
                desc: desc,
                link: link,
                imgUrl: imgUrl,
                trigger: function (res) {
    //                alert('用户点击分享到QQ');
                  },
                  complete: function (res) {
    //                alert(JSON.stringify(res));
                  },
                  success: function (res) {
    //                  save_share(link,3,objType,objId);
                    alert('已分享');
                    share_registe_success(link);
                  },
                  cancel: function (res) {
    //                alert('已取消');
                  },
                  fail: function (res) {
    //                alert(JSON.stringify(res));
                  }
                });
        }
    /**微信分享到微博====================页面需要分享微博    需初始化此方法============4==================*/
    function weixin_share_weibo(title,link,imgUrl,desc,objType,objId){
         wx.onMenuShareWeibo({
              title: title,
              desc: desc,
              link: link,
              imgUrl: imgUrl,
              trigger: function (res) {
    //            alert('用户点击分享到微博');
              },
              complete: function (res) {
    //            alert(JSON.stringify(res));
              },
              success: function (res) {
    //            save_share(link,4,objType,objId);
                alert('已分享');
                share_registe_success(link);
              },
              cancel: function (res) {
    //            alert('已取消');
              },
              fail: function (res) {
    //            alert(JSON.stringify(res));
              }
            });
    }
    
    /**微信分享到QQ空间==============页面需要分享到QQ空间========5==========*/
    function weixin_share_QZone(title,link,imgUrl,desc,objType,objId){
        wx.onMenuShareQZone({
            title: title,
              desc: desc,
              link: link,
              imgUrl: imgUrl,
            trigger: function (res) {
    //          alert('用户点击分享到QZone');
            },
            complete: function (res) {
    //          alert(JSON.stringify(res));
            },
            success: function (res) {
    //          save_share(link,5,objType,objId);
              alert('已分享');
              share_registe_success(link);
            },
            cancel: function (res) {
    //          alert('已取消');
            },
            fail: function (res) {
    //          alert(JSON.stringify(res));
            }
          });
    }
    
    
    /**微信分享到QQ空间==============页面需要分享到QQ空间========5==========*/
    function weixin_copyUrl(title,link,imgUrl,desc,objType,objId){
        wx.onMenuShareQZone({
            title: title,
            desc: desc,
            link: link,
            imgUrl: imgUrl,
            trigger: function (res) {
    //          alert('用户点击分享到QZone');
            },
            complete: function (res) {
    //          alert(JSON.stringify(res));
            },
            success: function (res) {
    //            save_share(link,5,objType,objId);
              alert('已分享');
              share_registe_success(link);
            },
            cancel: function (res) {
    //          alert('已取消');
            },
            fail: function (res) {
    //          alert(JSON.stringify(res));
            }
        });
    }
    /*=/////////////////////////////////////////////////////微信分享相关js   结束////////////////////////////////////////////////////////////////////*/

     3、页面代码

         $(function(){
            var web_title = '要分享的标题';          //标题
            var web_url = '要分享的地址';           //路径
            var web_logo_small = '分享图标的地址';    //图标
            var web_description = '分享描述的内容';   //描述
            init_weixin_config(web_title,web_url,web_logo_small,web_description);    
         });
  • 相关阅读:
    在MPTCP中引入流量监控——bwm-ng的使用说明
    Ubuntu下配置MPTCP
    实现两台MPTCP主机之间的通信——VSFTPD的配置与使用
    Google 辟谣,Android 和 Chrome OS 不合并
    paper-7
    计算机网络方面国际三大顶尖会议
    谷歌物联网操作系统Android Things揭开面纱
    张纯如
    Android binder机制之 5 --(创建binder服务)
    【BZOJ 1491】[NOI2007]社交网络
  • 原文地址:https://www.cnblogs.com/xyt-0412/p/6490067.html
Copyright © 2011-2022 走看看