微信js sdk分享功能,签名错误,java

livgo 发布于 2015/02/28 18:49
阅读 3K+
收藏 2

config时总是报签名错误,用微信的校验工具测试的签名结果与程序一致

js代码

<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript">
    $.ajax({
        url: '${ctx}/rest/toger/get/wxshare',
        type: 'POST',
        data:{activityId:'${indexDto.activityId}',activityUserId:'${indexDto.activityUserId}',url:location.href.split('#')[0]},
        dataType: 'json',
        timeout: 1000,
        error: function(){alert('Error');},
        success: function(result){
            wx.config({
                debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                appId: result.appId, // 必填,公众号的唯一标识
                timestamp: result.timestamp, // 必填,生成签名的时间戳
                nonceStr: result.nonceStr, // 必填,生成签名的随机串
                signature: result.signature,// 必填,签名,见附录1
                jsApiList: [
                    'onMenuShareTimeline',
                    'onMenuShareAppMessage',
                    'onMenuShareQQ'
                ]
            });
            wx.ready(function(){


                //在页面加载时就调用相关接口需要在这里进行
                //    wx.hideOptionMenu();
//    wx.hideMenuItems({
//        //要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3
//        menuList: ["menuItem:share:appMessage","menuItem:share:timeline","menuItem:share:qq","menuItem:share:weiboApp","menuItem:share:facebook"]
//    });
                //分享到朋友圈
                wx.onMenuShareTimeline({
                    title: '一块抢', // 分享标题
                    desc: '一块抢活动', // 分享描述
                    link: result.link, // 分享链接
                    imgUrl: '<%=basePath%>/images/logo.png', // 分享图标
                    success: function () {
                        addRank();
                    },
                    cancel: function () {
                        alert('已取消分享')
                    }
                });


                //分享给朋友
                wx.onMenuShareAppMessage({
                    title: '一块抢', // 分享标题
                    desc: '一块抢活动', // 分享描述
                    link: result.link, // 分享链接
                    imgUrl: '<%=basePath%>/images/logo.png', // 分享图标
                    type: '', // 分享类型,music、video或link,不填默认为link
                    dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
                    success: function () {
                        alert('fenxiang');
                        addRank();
                    },
                    cancel: function () {
                        alert('已取消分享')
                    }
                });


                //分享到QQ
                wx.onMenuShareQQ({
                    title: '一块抢', // 分享标题
                    desc: '一块抢活动', // 分享描述
                    link: result.link, // 分享链接
                    imgUrl: '<%=basePath%>/images/logo.png', // 分享图标
                    success: function () {
                        addRank();
                    },
                    cancel: function () {
                        alert('已取消分享')
                    }
                });


                //分享到腾讯微博
                wx.onMenuShareWeibo({
                    title: '一块抢', // 分享标题
                    desc: '一块抢活动', // 分享描述
                    link: result.link, // 分享链接
                    imgUrl: '<%=basePath%>/images/logo.png', // 分享图标
                    success: function () {
                        addRank();
                    },
                    cancel: function () {
                        alert('已取消分享')
                    }
                });
            });
            wx.error(function(res){
                // config信息验证失败会执行error函数
                alert(res);
            });


        }


    });


</script>


Controller代码

 @RequestMapping(value = "/get/wxshare", method = RequestMethod.POST)
    public ModelAndView getWxShare(ModelMap modelMap,HttpServletRequest request, HttpServletResponse response,
                                   @RequestParam(value = "url") String url,
                                   @RequestParam(value = "activityId") Long activityId,
                           @RequestParam(value = "activityUserId") Long activityUserId) {


        ModelAndView mv = new ModelAndView();
        String jsapi_ticket = togerService.getJsapiTicket(request, response);
        // 注意 URL 一定要动态获取,不能 hardcode
//        String url = domain + PRONAME + "/rest/toger/index";
        Map<String, String> ret = Share.sign(jsapi_ticket, url);
        String link = domain + PRONAME + "/rest/toger/get/share?activityid=" + activityId + "&activityuserid=" + activityUserId;
        ret.put("link", link);
        logger.info("============index========jsapi_ticket=========>>" + ret.get("jsapi_ticket"));
        logger.info("============index========appId=========>>" + ret.get("appId"));
        logger.info("============index========url=========>>" + url);
        logger.info("============index========nonceStr=========>>" + ret.get("nonceStr"));
        logger.info("============index========timestamp=========>>" + ret.get("timestamp"));
        logger.info("============index========signature=========>>" + ret.get("signature"));
        logger.info("============index========link=========>>" + ret.get("link"));
        mv.addAllObjects(ret);
        return mv;
    }


Share代码

   ret.put("jsapi_ticket", jsapi_ticket);
        ret.put("nonceStr", nonce_str);
        ret.put("timestamp", timestamp);
        ret.put("signature", signature);
        ret.put("appId", APPID);
jsapi_ticket=========>>bxLdikRXVbTPdHSM05e5u7HpxzI-k97MaWv8BH0vxceb0zrJgIse_jLP53gW77jicOXp1JBsvJX8pYUKx_Y5kA
url=========>>http://dev.happigo.com/agrab/rest/toger/index //页面传来的
nonceStr=========>>acf800f9-7d7c-4d94-a598-043acf9d5324
timestamp=========>>1425118551
signature=========>>78a97400318db2cbadfbd0f064f0c4286e3ed7e0
link=========>>http://dev.happigo.com/agrab/rest/toger/get/share?activityid=16&activityuserid=43

js可以取到result里面的值

签名校验了没有问题

问题是页面总报签名错误

求解答,求解决方案,求出路

绑定了域名 dev.happigo.com

www.happigo.com已备案

加载中
0
Aweihuan
Aweihuan
  微信的config和后台校验js分开  动态加载config及分享的js
0
Aweihuan
Aweihuan
微信的config和后台签名js分开  动态加载config及分享的js
返回顶部
顶部