在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的连接。
发表评论 取消回复