首页  >  问答  >  正文

javascript - 微信js接口,access_token和jsapi_ticket没有缓存导致的服务不可用如何解决?

现在一直在跳invalid signature签名错误,不知道如何解决,是等一段时间就行了还是就不能用了?

PHP中文网PHP中文网2749 天前375

全部回复(4)我来回复

  • 怪我咯

    怪我咯2017-04-10 15:17:22

    那就缓存一下呗。有条件上memcache,redis,简单点直接用文件缓存也行(官方的demo就是)

    回复
    0
  • 迷茫

    迷茫2017-04-10 15:17:22

    微信上文档好像说的是 access_token 7200秒过期,
    所以,我们只需要简单的写一下文件来达到缓存的目的就可以了,

    例如下面的代码就是先去读缓存,如果没有的话,再去微信请求一遍

    $token = Lib_Cache::read('access_token', 3600);
    if (!$token || strlen($token) < 6) {
        $res = file_get_contents('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.Lib_Weixin::$appId.'&secret='.Lib_Weixin::$appSecret);
        $res = json_decode($res, true);
        $token = $res['access_token'];
        Lib_Cache::write('access_token', $token, 3600);
    }
    return $token;
    

    这样独立以后,缓存部分可以替换为任意方案,我在这儿就简单的以文件为例子了,主要是我也用的文件,不麻烦:

    class Lib_Cache {
        public static function read($file, $expires) {
            if(file_exists($file)) {
                $time = filemtime($file);
                if(time() - $time > $expires) {
                    return null;
                }else {
                    return file_get_contents($file);
                }
            }
            return null;
        }
    
        public static function write($file, $value) {
            @file_put_contents($file, $value);
        }
    }
    

    access_token的请求,一天有2000次的限制,但7200秒过期,所以就3600秒一个小时一次,怎么用也不会过期的

    回复
    0
  • 大家讲道理

    大家讲道理2017-04-10 15:17:22

    access_token官方限制了每天获取2000次,但是签名错误的话,你是不是要检查下你的签名到底有没有问题啊.

    回复
    0
  • ringa_lee

    ringa_lee2017-04-10 15:17:22

    保存在数据库中,写定时任务,每110分钟请求一次。。。用accesstoken的时候先判断下是否过期

    回复
    0
  • 取消回复