在FastAdmin中进行微信开发时,FastAdmin中使用的EasyWechat在获取和缓存微信access_token默认采用的是文件进行缓存,如果我们服务端存在分布式部署时,此时我们在调用微信的相关接口时就会经常出现以下错误

{"errcode":40001,"errmsg":"invalid credential, access_token is invalid or not latest rid: "}

此时我们需要将EasyWechat的缓存修改为Redis,有以下两种方式:

全局配置

use EasyWeChat\Factory; $config = [ 'app_id' => 'your app_id', 'secret' => 'your secret', 'events' => [ 'listen' => [ ApplicationInitialized::class => [ function ($event) { $redis = new \Redis(); $redis->connect('127.0.0.1', 6379); $redis->auth('Redis密码'); //密码为空时可忽略 $cache = new RedisAdapter($redis, $namespace = '', $defaultLifetime = 0); $event->app->rebind('cache', $cache);
                }
            ],
        ],
    ], //... ]; // 建议`$config`配置放在一个通用的配置文件中 $app = Factory::officialAccount($config);

按需配置

use EasyWeChat\Factory; $config = [ 'app_id' => 'your app_id', 'secret' => 'your secret', //... ]; $app = Factory::officialAccount($config); $redis = new \Redis(); $redis->connect('127.0.0.1', 6379); $redis->auth('Redis密码'); //密码为空时可忽略 $cache = new RedisAdapter($redis, $namespace = '', $defaultLifetime = 0); $event->app->rebind('cache', $cache); //...

缓存优化

通过以上步骤已经可以实现使用Redis存储access_token,如果我们框架的缓存同时也使用了Redis,此时如果我们我们希望直接使用框架中的Redis连接,我们可以将上方的

$redis = new \Redis(); $redis->connect('127.0.0.1', 6379); $redis->auth('Redis密码'); //密码为空时可忽略

修改为

$redis = \think\Cache::store('redis')->handler();

即可,这样可以减少一次Redis的连接。

点赞(0)

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部