开发者社区> 问答> 正文

关键JSAPI签名

开发文档上面写的获取jsapi_ticket有次数限制,建议全局缓存2个钟;我们的实际测试结果是:仅缓存几分钟后,用缓存的数据去做验证,就会出现签名认证错误

展开
收起
爱钓鱼的猫 2016-04-13 11:43:37 5967 0
2 条回答
写回答
取消 提交回答
  • Re关键JSAPI签名
                    dd.device.base.getUUID({
                        onSuccess: function (data) {
                            /*
                            {
                            uuid: '3udbhg98ddlljokkkl' //
                            }
                            */
                            //alert(data.uuid);
                            $("#uuid").val(data.uuid);
                        },
                        onFail: function (err) {
                            var temp = "";
                            for (var i in err) {
                                temp += i + ":" + err + "\n";
                            }
                            alert(temp);
                        }
                    });
    PS:这里是我获取UUID的代码,但是就算是没成功获取到UUID同样不会走我onFail的代码;
    另外:jsapi_ticket我说过的,我这边测试的是,缓存几分钟过后我再用这个去签名的时候会报错图片

    保存jsapi_ticket的代码如下:
            if (Application["JSAPI"] == null)
            {
                jsApiTicket = EnterpriseBusiness.GetTickets(accessToken);
                Application["JSAPI"] = jsApiTicket;
            }
            else
            {
                jsApiTicket = Application["JSAPI"].ToString();
            }
    上面的是保存
    然后我写了全局处理程序用来定时清除,代码如下:
        void Application_Start(object sender, EventArgs e)
        {
            //在应用程序启动时运行的代码
            System.Timers.Timer timer = new System.Timers.Timer(6000000);
            timer.AutoReset = true;
            timer.Enabled = true;
            timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
        }
        void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            Application["JSAPI"] = null;
        }
    实际结果是:大概过4、5分钟左右就会提示签名错误

    -------------------------

    回 1楼忠恕的帖子
    另外:UUID获取失败的时候并不会报签名错误,而且获取UUID的JS代码我也是放在dd.ready下面的,我实在是搞不明白为什么会报错了,请大神帮忙解决下,万分感谢

    -------------------------

    回 1楼忠恕的帖子
                  dd.device.base.getUUID({
                        onSuccess: function (data) {
                            /*
                            {
                            uuid: '3udbhg98ddlljokkkl' //
                            }
                            */
                            //alert(data.uuid);
                            $("#uuid").val(data.uuid);
                        },
                        onFail: function (err) {
                            var temp = "";
                            for (var i in err) {
                                temp += i + ":" + err + "\n";
                            }
                            alert(temp);
                        }
                    });
    PS:这里是我获取UUID的代码,但是就算是没成功获取到UUID同样不会走我onFail的代码;
    另外:jsapi_ticket我说过的,我这边测试的是,缓存几分钟过后我再用这个去签名的时候会报错图片

    保存jsapi_ticket的代码如下:
            if (Application["JSAPI"] == null)
            {
                jsApiTicket = EnterpriseBusiness.GetTickets(accessToken);
                Application["JSAPI"] = jsApiTicket;
            }
            else
            {
                jsApiTicket = Application["JSAPI"].ToString();
            }
    上面的是保存
    然后我写了全局处理程序用来定时清除,代码如下:
        void Application_Start(object sender, EventArgs e)
        {
            //在应用程序启动时运行的代码
            System.Timers.Timer timer = new System.Timers.Timer(6000000);
            timer.AutoReset = true;
            timer.Enabled = true;
            timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
        }
        void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            Application["JSAPI"] = null;
        }
    实际结果是:大概过4、5分钟左右就会提示签名错误

    -------------------------

    回 1楼忠恕的帖子
    都想哭了,所以我现在都不敢缓存jsApiTicket 了,都是每一次都重新获取
    2016-04-14 16:56:20
    赞同 展开评论 打赏
  • 1. 首先确认下是否jsapi_ticket是否频繁的获取,请用最新获取的jsticket去做验证;
    2. 麻烦把出现问题的详细信息提供出来,出现的时间,corpi/orgid等

    -------------------------

    先回答第一个问题:这里是我获取UUID的代码,但是就算是没成功获取到UUID同样不会走我onFail的代码。
    你在调用device.base.getUUID,请确保dd.ready,同时加上dd.error,是否dd.ready已经报错,结构类似如下:
    stopPull: function(callback){
                dd.ready(function(){
                    dd.ui.pullToRefresh.stop({
                        onSuccess:function(data){
                            callback(data);
                        },
                        onFail:function(data){
                            Util.toast(JSON.stringify(data));
                        }
                    })
                });
                dd.error(function(err){
                    Util.toast(err.message);
                })
            }

    -------------------------

    回 4楼(爱钓猫的鱼) 的帖子
    你这边定时清除数据之后,为啥没有再从服务端获取最新的jsticket?double check!
    你钉钉联系下我:忠恕。
    2016-04-14 12:10:19
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载