在FastAdmin中进行微信开发时,FastAdmin中使用的EasyWechat
在获取和缓存微信access_token
默认采用的是文件进行缓存,如果我们服务端存在分布式部署时,此时我们在调用微信的相关接口时就会经常出现以下错误
{"errcode":40001,"errmsg":"invalid credential, access_token is invalid or not latest rid: "}
此时我们需要将EasyWechat
的缓存修改为Redis
,有以下两种方式:
全局配置
use EasyWeChatFactory;$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 EasyWeChatFactory;$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 = thinkCache::store('redis')->handler();
即可,这样可以减少一次Redis的连接。
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, Fastadmin, ClassCMS, LeCMS, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。