开发者社区> 问答> 正文

关于各种Token及Ticket问题的终级解决办法

每个企业不论增加多少自己开发的企业应用,Token只有一个,Token默认有效期为7200秒,在7200秒内每重新调用获取一次,token不会变化,会自动续期。
每个企业不论增加多少自己开发的企业应用,ticket也只有一个,ticket默认有效期为7200秒,每重新调用获取一次,ticket会变化,所以会出现各种校验失败问题。


解决办法:首次获取到token及ticket后,将其存入一个公共的数据库表里面,单独写个循环任务每隔7200秒(token及ticket最好提前2-5分钟去刷新,因为有可能本机与钉钉服务器存在时间差)去刷新并写入数据库。其它所有自己的企业应用,应都去获取该数据库表里面的token与ticket,而不是各企业应用单独重新获取。


(PS:不谢,如果帮到了您,谢谢打赏:支付宝 277705362@sina.com )

展开
收起
unlee 2016-08-14 17:51:35 23612 0
14 条回答
写回答
取消 提交回答
  • Re关于各种Token及Ticket问题的终级解决办法
    我就是来围观的

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

    回 楼主unlee的帖子
    放进redis的确很方便

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

    回 6楼低调de鸟的帖子

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

    Re关于各种Token及Ticket问题的终级解决办法
    法师法师
    2018-10-17 10:56:27
    赞同 展开评论 打赏
  • Re关于各种Token及Ticket问题的终级解决办法
    我的回调url验证成功了,但是一直收不到http推送,不知道是什么原因?
    2018-07-29 18:53:37
    赞同 展开评论 打赏
  • Re关于各种Token及Ticket问题的终级解决办法
    对得,就是该这样做。
    但也有可能不同开发商同时去读的情况。
    2018-04-19 11:16:47
    赞同 展开评论 打赏
  • Re关于各种Token及Ticket问题的终级解决办法
    用  php 緩存就行  
    2018-04-10 10:07:52
    赞同 展开评论 打赏
  • Re关于各种Token及Ticket问题的终级解决办法
    2018-03-02 11:00:31
    赞同 展开评论 打赏
  • Re关于各种Token及Ticket问题的终级解决办法
    并不是这样的,只要管理员生成多个corpSecret,每个应用用一个单独的corpSecret就可以了,这样ticket不会因为其他应用而失效
    2018-02-08 09:09:10
    赞同 展开评论 打赏
  • Re关于各种Token及Ticket问题的终级解决办法
    我想问一下,我每次用到这个页面的时候都重新发起请求获取ticket,不保存到数据库中并定时刷新,这样可以吗?
    2017-10-18 09:07:25
    赞同 展开评论 打赏
  • Re关于各种Token及Ticket问题的终级解决办法
    如果公司部门比较多,开发多个微应用,没办法做到统一入口,改怎么办,单独获取ticket会相互影响
    2017-05-27 10:08:35
    赞同 展开评论 打赏
  • Re关于各种Token及Ticket问题的终级解决办法
    存在服务器内存中不好吗?
    2017-03-29 08:29:21
    赞同 展开评论 打赏
  • Re关于各种Token及Ticket问题的终级解决办法
    这几个东西又不大,好存好取,直接存文件就行了。没必要非得装个redis吧
    2017-02-16 13:31:52
    赞同 展开评论 打赏
  • 回 3楼simon龙龙的帖子
    C#的案例,
    //获取服务窗channeljsapitick
            public  static string getchanneljsapiticket(string corpId, string channeltoken)
            {
                
                if (HttpContext.Current.Cache[corpId + "_channeljsapitick"] != null)
                {
                    return HttpContext.Current.Cache[corpId + "_channeljsapitick"].ToString();
                }
                string url = "https://oapi.dingtalk.com/service/channel/get_channel_jsapi_ticket?access_token=" + channeltoken;
                Hashtable table = getUrl(url);
                if (table["errcode"].ToString().Equals("0"))
                {
                    HttpContext.Current.Cache.Insert(corpId + "_channeljsapitick", table["ticket"].ToString(), null, DateTime.Now.AddSeconds(7100), TimeSpan.Zero, CacheItemPriority.Normal, null);
                    return table["ticket"].ToString();
                }
                return "";
        
            }
    2016-10-11 09:56:52
    赞同 展开评论 打赏
  • ReRe关于各种Token及Ticket问题的终级解决办法
    引用第1楼阅新悦心于2016-08-30 19:41发表的 Re关于各种Token及Ticket问题的终级解决办法 :
    数据库效率低,也用不着循环任务去刷新,直接存redis,有效期7140秒(即1小时59分),每次从redis获取,首次未取到或者过期就调用接口获取,再次放进redis,就可以了 [url=https://bbs.aliyun.com/job.php?action=topost&tid=291728&pid=824913][/url]

    有没有Redis的案例

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

    回 4楼ileven的帖子
    谢谢~ 我已经通过Redis实现
    思路如下
    用户请求时判断Redis是否有缓存,
    没有的话获取并保存设置7000s过期时间
    有的话直接返回前端

    如果前端校验出错异步请求服务器重新获取AC并清空原有AC保存到Redis后刷新页面
    2016-09-21 09:38:24
    赞同 展开评论 打赏
  • Re关于各种Token及Ticket问题的终级解决办法
    2楼说的对,直接存进Redis里面,很方便。
    2016-09-12 17:24:46
    赞同 展开评论 打赏
  • Re关于各种Token及Ticket问题的终级解决办法
    数据库效率低,也用不着循环任务去刷新,直接存redis,有效期7140秒(即1小时59分),每次从redis获取,首次未取到或者过期就调用接口获取,再次放进redis,就可以了
    2016-08-30 19:41:31
    赞同 展开评论 打赏
滑动查看更多
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

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