| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- <?php
- namespace backend\modules\mall\services;
- use common\enums\RabbitMqEnum;
- use common\events\mall\GetMiniProgramAdsEvent;
- use common\helpers\CurlHelper;
- use common\logic\wechat\WechatMiniProgramLogic;
- use common\models\wechat\WechatMiniProgramUpload;
- use Yii;
- /**
- * 微信小程序服务
- * @package backend\modules\mall\services
- */
- class MiniProgramService extends BaseService
- {
- /**
- * @var string
- */
- const UPLOAD_URI = 'http://1.14.248.220:3000';
- /**
- * 获取小程序配置
- *
- * @return array
- */
- public function getMiniProgramConfig()
- {
- $mini_program = Yii::$app->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;
- }
- }
|