think-wechat
think-wechat copied to clipboard
在队列(think-queue)中调用出错
`namespace app\home\queue; use think\queue\Job;
use Naixiaoxin\ThinkWechat\Facade; use app\home\model\Wechat;
class ReleaseCode{
public function fire(Job $job, $data){
$data = json_decode($data, true);
$openPlatform = Facade::openPlatform();
$miniProgram = $openPlatform->miniProgram($data['program']['authorizer_appid'], $data['program']['refresh_token']);
$code = $miniProgram->code;
$category = $code->getCategory();
$page = $code->getPage();
$config = json_decode($data['program']['config'], true);
//获取已授权小程序设置的类目 get_category
if((int)$category['errcode'] === 0){
$config['category'] = $category['category_list'];
}
//获取小程序的第三方提交代码的页面配置 get_page
if((int)$page['errcode'] === 0){
$config['page'] = $page['page_list'];
}
if(!Wechat::update(['id'=>$data['program']['id'],'config'=>json_encode($config)])){
//TODO 收集错误
$job->release(2);
}
$job->delete();
if ($job->attempts() > 3) {
//通过这个方法可以检查这个任务已经重试了几次了
$job->delete();
}
}
}命令端运行报
[think\exception\ClassNotFoundException]
class not exists: wechat.open_platform `
这个是怎么回事?
"naixiaoxin/think-wechat": "^1.4", "topthink/think-queue": "^2.0",
#9 一个问题 正在解决中
这是什么原因导致的呢?说出来,大家一起来想想办法来解决
目前来看是在命令行模式下 容器的关系绑定有些问题 怀疑是本身TP设计缺陷 正在尝试解决
hi 尝试在app/tags.php中 app_init增加我的行为扩展
'app_init' => [
\Naixiaoxin\ThinkWechat\Behavior\AppInit::class
],
错误还是依然存在
作者测试是可以的吗?????
还以为和Swoole是一个问题~~ 确实是有问题。 我是在app_init钩子里注入了我的类。但是app_init只要在\think\App:run里才执行,并不会在queue里执行。我这边还在想另外的办法去解决这个问题
看来是无解了 肿么办呢 .....
已经给官方提交了issue top-think/framework#1600
我将作为app_init
类初始化的原因其实就是因为认为app_init
是任何初始化都会执行的。
而且官方文档中说明的也是如此
但是事与愿违,app_init却在run函数里才执行。run函数是用来调度路由/执行http业务的。所以在路由中是正常的,但是在命令行中是有异常的。
在 Swoole 环境下也出现了如上问题,例如异步任务,目前的解决方案就是调用之前先进行:
$appInit = new AppInit(); $appInit->run();
官方给的方案 其实是建议自己在Console文件里加钩子。。这样就改动了官方的源码了 就因为这个不多导致的。。 详见top-think/framework#1600
今天遇到同样的问题 。。。
@qiqizjl 我在 think 里加了 $appInit = new \Naixiaoxin\ThinkWechat\Behavior\AppInit(); $appInit->run(); 1楼的报错已经绕过,但是出现新的问题 Credential "component_verify_ticket" does not exist in cache. 请问这个应该怎么填 ?
@w263756314 你用的是三方开发平台? 三方开发平台需要先让微信回调ticket才可以
@qiqizjl 已解决哈,谢谢 解决记录我发在这里了 解决办法
现在这个问题有办法解决吗?