diff --git a/.env b/.env index 27d789fe..5145219a 100644 --- a/.env +++ b/.env @@ -66,6 +66,8 @@ static_root="/home/wwwroot/api.tmrjournals.com/public" [journal] ;官网服务器地址 base_url = http://journalapi.tmrjournals.com/public/index.php +;base_url =http://192.168.110.131/journal/public/index.php +journal_image_url = http://192.168.110.131/journal/public/ [gpt] api_key = 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 diff --git a/application/api/controller/Special.php b/application/api/controller/Special.php index 744dc367..6685d75c 100644 --- a/application/api/controller/Special.php +++ b/application/api/controller/Special.php @@ -1465,20 +1465,37 @@ class Special extends Controller } /** * 获取已开通的专刊列表(代理 journal getSpecials,state=2) + * 入参为投稿系统 journal_id:先按 ISSN 换官网 journal_id,再调官网接口 */ public function getSpecials() { $data = $this->request->post(); $rule = new Validate([ - 'journal_id' => 'require', + 'journal_id' => 'require|number', ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } + $localJournalId = intval($data['journal_id']); + $journalInfo = $this->journal_obj->where('journal_id', $localJournalId)->find(); + if (!$journalInfo) { + return jsonError('journal not found'); + } + $issn = trim(isset($journalInfo['issn']) ? (string)$journalInfo['issn'] : ''); + if ($issn === '') { + return jsonError('journal issn is empty'); + } + + $resolved = $this->resolveSiteJournalIdByIssn($issn); + if (!$resolved['ok']) { + return jsonError($resolved['msg']); + } + $siteJournalId = intval($resolved['journal_id']); + $base_url = Env::get('journal.base_url'); - $res = object_to_array(json_decode(myPost($base_url . '/api/Special/getSpecials', [ - 'journal_id' => $data['journal_id'], + $res = object_to_array(json_decode(myPost(rtrim($base_url, '/') . '/api/Special/getSpecials', [ + 'journal_id' => $siteJournalId, ]))); if (!isset($res['code']) || intval($res['code']) !== 0) { $msg = isset($res['msg']) ? $res['msg'] : 'get specials failed'; @@ -2146,4 +2163,71 @@ class Special extends Controller ]); } + /** + * 根据 ISSN 获取官网期刊 ID(代理 journal master/Special/getJournalIdByIssn) + * 入参兼容 journal_issn / issn;转发官网时使用字段名 issn + */ + public function getJournalIdByIssn() + { + $data = $this->request->post(); + $issn = ''; + if (isset($data['journal_issn'])) { + $issn = trim((string)$data['journal_issn']); + } + if ($issn === '' && isset($data['issn'])) { + $issn = trim((string)$data['issn']); + } + if ($issn === '') { + return jsonError('issn不能为空'); + } + + $resolved = $this->resolveSiteJournalIdByIssn($issn); + if (!$resolved['ok']) { + return jsonError($resolved['msg']); + } + + return jsonSuccess([ + 'journal_issn' => $issn, + 'journal_id' => intval($resolved['journal_id']), + ]); + } + + /** + * 按 ISSN 向官网解析 journal_id + * @return array{ok:bool,msg:string,journal_id:int} + */ + private function resolveSiteJournalIdByIssn($issn) + { + $issn = trim((string)$issn); + if ($issn === '') { + return ['ok' => false, 'msg' => 'issn不能为空', 'journal_id' => 0]; + } + + $base_url = Env::get('journal.base_url'); + $raw = myPost(rtrim($base_url, '/') . '/master/Special/getJournalIdByIssn', [ + 'issn' => $issn, + ]); + $res = object_to_array(json_decode($raw)); + if (!isset($res['code']) || intval($res['code']) !== 0) { + $msg = isset($res['msg']) ? $res['msg'] : ('get journal id by issn failed: ' . (is_string($raw) ? $raw : 'remote empty')); + return ['ok' => false, 'msg' => $msg, 'journal_id' => 0]; + } + + $payload = isset($res['data']) ? $res['data'] : []; + $journalId = 0; + if (is_array($payload)) { + $journalId = intval(isset($payload['journal_id']) ? $payload['journal_id'] : 0); + } elseif (is_numeric($payload)) { + $journalId = intval($payload); + } + if ($journalId <= 0 && isset($res['journal_id'])) { + $journalId = intval($res['journal_id']); + } + if ($journalId <= 0) { + return ['ok' => false, 'msg' => 'journal id not found for issn', 'journal_id' => 0]; + } + + return ['ok' => true, 'msg' => '', 'journal_id' => $journalId]; + } + }