services->setting->mall->get($this->mall_id, 'mini_program'); if(!isset($mini_program['version'])) $mini_program['version'] = ''; if(!isset($mini_program['desc'])) $mini_program['desc'] = ''; if(!isset($mini_program['secret_key_file'])) $mini_program['secret_key_file'] = ''; return $mini_program; } /** * 保存小程序配置 * * @param array $data * @return boolean */ public function setMiniProgramConfig(array $data) { // 保存数据 $trans = Yii::$app->db->beginTransaction(); try { Yii::$app->services->setting->mall->set($this->mall_id, ['mini_program' => $data]); $trans->commit(); } catch (\Exception $e) { $trans->rollBack(); return $this->error($e->getMessage()); } WechatMiniProgramLogic::setMsgJumpPath(['mall_id' => $this->mall_id]); return true; } /** * 获取小程序上传日志分页列表 * * @param array $params * @return array */ public function getTaskPageList(array $params = []) { return WechatMiniProgramUpload::getPaginationList($this->getLimit($params), function ($query) { $query->where(['mall_id' => $this->mall_id])->select([ 'api_domain', 'app_id', 'created_at', 'desc', 'id', 'is_live', 'mall_id', 'mall_sign', 'plugins', 'static_domain', 'status', 'updated_at', 'version', 'is_review', ]); }, 'id desc'); } public function getTaskLog($params = []) { $info = WechatMiniProgramUpload::getOne([ ['mall_id' => $this->mall_id], ['id' => $params['id']] ], true, [], 'id desc', 'output'); return $info; } /** * 添加小程序上传日志 * * @param array $data * @return boolean */ public function addTaskLog(array $data) { $data['mall_id'] = $this->mall_id; // version判断版本号 $last_version = WechatMiniProgramUpload::getLastVersion($this->mall_id); if ($last_version && $data['version'] <= $last_version) { return $this->error('版本号必须大于' . $last_version); } if (WechatMiniProgramUpload::getTaskByVersion($this->mall_id, $data['version'])) { return $this->error('版本号已存在'); } // 保存数据 $trans = Yii::$app->db->beginTransaction(); try { $model = WechatMiniProgramUpload::addTask($data); $model->changeAllTaskReview(); $trans->commit(); } catch (\Exception $e) { $trans->rollBack(); return $this->error($e->getMessage()); } // 获取是否属于docker部署方式 $is_docker_deploy = Yii::$app->params['is_docker_deploy'] ?? false; if ($is_docker_deploy) { // docker部署方式不支持异步上传,只能进行同步上传 $res = WechatMiniProgramUpload::uploadMiniProgramCode(['id' => $model->id]); if ($res === false) return $this->error('上传失败'); } else { // 队列处理 Yii::$app->services->rabbitMq->push( RabbitMqEnum::EXCHANGE_TASK, RabbitMqEnum::TASK_QUEUE, ['id' => $model->id], WechatMiniProgramUpload::class, 'uploadMiniProgramCode' ); } return true; } /** * 提交至微信审核小程序 * * @return false|array */ public function uploadToWechat() { $api_url = Yii::$app->services->setting->platform->get('system.api_url'); if(empty($api_url)) return $this->error('api域名不能为空,请联系平台管理员'); // 获取小程序配置 $mini_program = $this->getMiniProgramConfig(); if(empty($mini_program['app_id'])) return $this->error('请先填写appid,保存后,再提交微信审核'); if(empty($mini_program['version'])) return $this->error('请先填写版本号,保存后,再提交微信审核'); if(empty($mini_program['secret_key_file'])) return $this->error('请先上传密钥文件,保存后,再提交微信审核'); if(empty($mini_program['desc'])) return $this->error('请先填写描述,保存后,再提交微信审核'); $dir = dirname(dirname($_SERVER['DOCUMENT_ROOT'])); $file_name = $dir . '/' . $mini_program['secret_key_file']; $result = CurlHelper::upload(self::UPLOAD_URI . '/upload', $file_name); if (!empty($result['errno'])) return $this->error($result['data']['msg']); $arr = explode('/', $mini_program['secret_key_file']); $file_name = array_pop($arr); $params = [ 'app_id' => $mini_program['app_id'], 'api_url' => $api_url, 'file_name' => $file_name, 'version' => $mini_program['version'], 'desc' => $mini_program['desc'], 'is_live' => $mini_program['is_live'], 'sign' => $this->mall['mall_sign'], 'static' => Yii::getAlias("@attachurl"), ]; $result = CurlHelper::post(self::UPLOAD_URI . '/api/upload', $params); if (!empty($result['errno'])) return $this->error($result['data']['msg']); return $result['data']; } /** * 获取小程序上传任务配置 * * @return array */ public function getTaskLogConfig() { $data = $this->getMiniProgramConfig(); $next_version = WechatMiniProgramUpload::getNextVersion($this->mall_id); $data['api_domain'] = str_replace(['http://', 'https://'], '', Yii::getAlias('@apiUrl')); $data['static_domain'] = str_replace(['http://', 'https://'], '', Yii::getAlias('@attachurl')); $data['is_docker_deploy'] = Yii::$app->params['is_docker_deploy'] ?? 0; $data['version'] = $next_version; // 获取小程序拓展插件 $event = new GetMiniProgramAdsEvent($this->mall_id); Yii::$app->services->events->dispatch($event); $data['addons_list'] = $event->getAdsList(); return $data; } /** * 修改任务审核状态 * * @param integer $id * @return boolean */ public function changeTaskReview(int $id) { /** * @var WechatMiniProgramUpload|null $task */ $task = WechatMiniProgramUpload::getOne([['mall_id' => $this->mall_id, 'id' => $id]]); if (empty($task)) return $this->error('任务不存在'); $trans = Yii::$app->db->beginTransaction(); try { $task->changeTaskReview(); $trans->commit(); } catch (\Exception $e) { $trans->rollBack(); return $this->error($e->getMessage()); } return true; } }