'Cn8zlXvVB5DwjcA9h40z9fprHDoc3Jqv97SwrInpmyYiilkeRdKvpD63cWqTYHfz','url' => 'http://mmbiz.qpic.cn/mmbiz_jpg/QHFVW13lONaQJxK9QbHU9CtrvTS2ModZnUyeAvuVN67t8XP85DxVJwDJf2YxCTalrsr17jS080xM6xQv5yGiaEQ/0?wx_fmt=jpeg'];//默认头像 //文章图片icon地址 protected $sArticleIcon = '/public/articleicon/'; //期刊图片icon地址 protected $sJournalIcon = '/public/journalicon/'; //作者头像地址 protected $sUserIcon = '/public/usericon/'; //期刊编辑二维码地址 protected $sJournalEditorQrcode = '/public/journaleditorqrcode/'; //二维码地址 protected $sQrCodeUrl = 'public/qrcode/'; //官网地址 protected $sJournalUsx = 'https://www.tmrjournals.com'; //默认头像 protected $sDefaultUserIcon = '/static/img/userImg.f3d9bc3b.jpg'; public function __construct(\think\Request $request = null) { } /** * @title 生成期刊二维码 * @param aJournal 期刊信息 */ public function createJournalQrCode($aJournal = []){ $iJournalId = empty($aJournal['journal_id']) ? 0 : $aJournal['journal_id']; //生成图片地址 $sImagePath = 'journal/'.$iJournalId.'.jpg'; $sQrCodeUrl = ROOT_PATH.$this->sQrCodeUrl.$sImagePath; //地址 $journal_usx = empty($aJournal['journal_usx']) ? '' : $aJournal['journal_usx']; $sUrl = trim($this->sJournalUsx,'/').'/'.$journal_usx.'/'; //二维码中间图片 $sLogo = empty($aJournal['journal_icon']) ? '' : $aJournal['journal_icon']; if(empty($sLogo)){ $sImg = QrCodeImage::generate($sUrl,500,$sQrCodeUrl); }else{ $sLogo = trim($this->sJournalUsx,'/').$this->sJournalIcon.$sLogo; $aImageInfo = json_decode($this->getImage($sLogo,$iJournalId,'journal'),true); if(empty($aImageInfo['data'])){ $sImg = QrCodeImage::generate($sUrl,500,$sQrCodeUrl); } $sImg = QrCodeImage::withLogo($sUrl,$aImageInfo['data'],500,100, $sQrCodeUrl); } //插入字段 $aInsertParam = ['journal_id' => $iJournalId,'qrcode_url' => $sImagePath,'create_time' => time(),'update_time' => time()]; $sStartSql = 'INSERT INTO t_ai_journal_qrcode ('.implode(',', array_keys($aInsertParam)).') VALUES ('; $sEndSql = ') ON DUPLICATE KEY UPDATE update_time = VALUES(update_time)'; $sSql = ''; foreach ($aInsertParam as $key => $value) { $sSql .= '"'.$value.'",'; } $sSql = $sStartSql.trim($sSql,',').$sEndSql; $result = Db::execute($sSql); return $aInsertParam; } /** * @title 生成文章二维码 * @param aArticle 文章信息 */ public function createArticleQrCode($aArticle = []){ $iArticleId = empty($aArticle['article_id']) ? 0 : $aArticle['article_id']; //创建二维码 //生成图片地址 $sImagePath = 'article/'.$iArticleId.'.jpg'; $sQrCodeUrl = ROOT_PATH.$this->sQrCodeUrl.$sImagePath; //地址 $sUrl = trim($this->sJournalUsx,'/').'/'.'article.html?J_num='.$aArticle['journal_id'].'&a_id='.$iArticleId; //二维码中间图片 $sLogo = $aArticle['article_icon']; if(empty($sLogo)){ $sImg = QrCodeImage::generate($sUrl,500,$sQrCodeUrl); }else{ $sLogo = trim($this->sJournalUsx,'/').$this->sArticleIcon.$sLogo; $aImageInfo = json_decode($this->getImage($sLogo,$iArticleId,'article'),true); if(empty($aImageInfo['data'])){ $sImg = QrCodeImage::generate($sUrl,500,$sQrCodeUrl); } $sImg = QrCodeImage::withLogo($sUrl,$aImageInfo['data'],500,100, $sQrCodeUrl); } //插入字段 $aInsertParam = ['article_id' => $iArticleId,'qrcode_url' => $sImagePath,'create_time' => time(),'update_time' => time()]; $sStartSql = 'INSERT INTO t_ai_article_qrcode ('.implode(',', array_keys($aInsertParam)).') VALUES ('; $sEndSql = ') ON DUPLICATE KEY UPDATE update_time = VALUES(update_time)'; $sSql = ''; foreach ($aInsertParam as $key => $value) { $sSql .= '"'.$value.'",'; } $sSql = $sStartSql.trim($sSql,',').$sEndSql; $result = Db::execute($sSql); return $aInsertParam; } /** * @title curl 请求获取图片保存到本地 * @param sPath 图片链接地址 */ public function getImage($sPath = '',$iId = 0,$sType = 'journal'){ //判断参数 if(empty($sPath)){ return json_encode(['status' => 2,'msg' => 'url is empty','data' => '']); } //获取图片名称 $aImageInfo = pathinfo($sPath); //图片后缀名 $sExtension = empty($aImageInfo['extension']) ? 'jpg' : $aImageInfo['extension']; //图片地址 $sImagePath = $sType.'/imgae_'.$iId.'.'.$sExtension; $sImagePath = ROOT_PATH.$this->sQrCodeUrl.$sImagePath; if (file_exists($sImagePath)) { return json_encode(['status' => 1,'msg' => 'success','data' => $sImagePath]); } //curl 请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$sPath); // 设置请求URL curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 设置返回数据而不是直接输出 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 禁用SSL验证 $response = curl_exec($ch); if (curl_errno($ch)) { return json_encode(['status' => 3,'msg' => 'Error:' . curl_error($ch),'data' => $sImagePath]); } //保存图片 file_put_contents($sImagePath, $response); curl_close($ch); return json_encode(['status' => 1,'msg' => 'success','data' => $sImagePath]); } /** * 添加文章素材 * @param article_id 文章ID * @param media_id 微信公众号素材media_id * @param media_url 微信公众号素材地址 * @param sType select 查询|add 新增 * @param $sPath 图片地址 */ public function addArticleMaterial($aParam = []){ //文章ID $iArticleId = empty($aParam['article_id']) ? '' : $aParam['article_id']; //文章图片 $sIcon = empty($aParam['icon']) ? '' : $aParam['icon']; //必填验证 if(empty($iArticleId) || empty($sIcon)){ return json_encode(['status' => 2,'msg' => 'article_id or article_image is empty']); } //处理图片地址 $aImageInfo = pathinfo($sIcon); //图片后缀名 $sExtension = empty($aImageInfo['extension']) ? 'jpg' : $aImageInfo['extension']; $sImagePath = 'article/imgae_'.$iArticleId.'.'.$sExtension; $sImagePath = ROOT_PATH.$this->sQrCodeUrl.$sImagePath; if (!file_exists($sImagePath)) {//下载图片 $aImageInfo = json_decode($this->getImage($sIcon,$iArticleId,'article'),true); if(empty($aImageInfo['data'])){ return json_encode(['status' => 3,'msg' => 'Image download failed']); } } //调用微信新增素材接口上传 $oWechat = new Wechat; $sWechatAppId = empty($aParam['wechat_app_id']) ? '' : $aParam['wechat_app_id']; $sWechatAppSecret = empty($aParam['wechat_app_secret']) ? '' : $aParam['wechat_app_secret']; $aImageParam = ['image_url' => $sImagePath,'wechat_app_id' => $sWechatAppId,'wechat_app_secret' => $sWechatAppSecret]; $aUploadResult = json_decode($oWechat->uploadMaterial($aImageParam),true); $sMsg = empty($aUploadResult['msg']) ? 'Failed to upload materials' : $aUploadResult['msg']; $aData = empty($aUploadResult['data']) ? [] : $aUploadResult['data']; if(empty($aData['url'])){ return json_encode(['status' => 4,'msg' => $sMsg]); } //处理入库数据 $sMediaId = empty($aData['media_id']) ? [] : $aData['media_id']; $sMediaUrl = empty($aData['url']) ? [] : $aData['url']; $iTime = empty($aUploadResult['created_at']) ? time() : $aUploadResult['created_at']; //入库数据组装 $aInsert = ['type' => 'image','media_id' => $sMediaId,'create_time' => $iTime,'article_id' => $iArticleId,'media_url' => $sMediaUrl,'update_time' => $iTime]; $sStartSql = 'INSERT INTO t_ai_article_material ('.implode(',', array_keys($aInsert)).') VALUES ('; $sEndSql = ') ON DUPLICATE KEY UPDATE update_time = VALUES(update_time),media_id = VALUES(media_id),media_url = VALUES(media_url)'; $sSql = ''; foreach ($aInsert as $key => $value) { $sSql .= '"'.$value.'",'; } $sSql = $sStartSql.trim($sSql,',').$sEndSql; $result = Db::execute($sSql); return json_encode(['status' => 1,'msg' => 'success','data' => $aInsert]); } /** * 添加期刊素材 */ public function addJournalMaterial($aParam = []){ //期刊ID $iJournalId = empty($aParam['journal_id']) ? '' : $aParam['journal_id']; //期刊图片 $sIcon = empty($aParam['icon']) ? '' : $aParam['icon']; if(empty($iJournalId) || empty($sIcon)){ return json_encode(['status' => 2,'msg' => 'journal_id or image is empty']); } //处理图片地址 $aImageInfo = pathinfo($sIcon); //图片后缀名 $sExtension = empty($aImageInfo['extension']) ? 'jpg' : $aImageInfo['extension']; $sImagePath = 'journal/imgae_'.$iJournalId.'.'.$sExtension; $sImagePath = ROOT_PATH.$this->sQrCodeUrl.$sImagePath; if (!file_exists($sImagePath)) {//下载图片 $aImageInfo = json_decode($this->getImage($sIcon,$iJournalId,'journal'),true); if(empty($aImageInfo['data'])){ return json_encode(['status' => 3,'msg' => 'Image download failed']); } } //调用微信新增素材接口上传 $oWechat = new Wechat; $sWechatAppId = empty($aParam['wechat_app_id']) ? '' : $aParam['wechat_app_id']; $sWechatAppSecret = empty($aParam['wechat_app_secret']) ? '' : $aParam['wechat_app_secret']; $aImageParam = ['image_url' => $sImagePath,'wechat_app_id' => $sWechatAppId,'wechat_app_secret' => $sWechatAppSecret]; $aUploadResult = json_decode($oWechat->uploadMaterial($aImageParam),true); $sMsg = empty($aUploadResult['msg']) ? 'Failed to upload materials' : $aUploadResult['msg']; $aData = empty($aUploadResult['data']) ? [] : $aUploadResult['data']; if(empty($aData['url'])){ return json_encode(['status' => 4,'msg' => $sMsg]); } //处理入库数据 $sMediaId = empty($aData['media_id']) ? [] : $aData['media_id']; $sMediaUrl = empty($aData['url']) ? [] : $aData['url']; $iTime = empty($aUploadResult['created_at']) ? time() : $aUploadResult['created_at']; //入库数据组装 $aInsert = ['type' => 'image','media_id' => $sMediaId,'create_time' => $iTime,'journal_id' => $iJournalId,'media_url' => $sMediaUrl,'update_time' => $iTime]; $sStartSql = 'INSERT INTO t_ai_journal_material ('.implode(',', array_keys($aInsert)).') VALUES ('; $sEndSql = ') ON DUPLICATE KEY UPDATE update_time = VALUES(update_time),media_id = VALUES(media_id),media_url = VALUES(media_url)'; $sSql = ''; foreach ($aInsert as $key => $value) { $sSql .= '"'.$value.'",'; } $sSql = $sStartSql.trim($sSql,',').$sEndSql; $result = Db::execute($sSql); return json_encode(['status' => 1,'msg' => 'success','data' => $aInsert]); } /** * 更新期刊二维码关联微信公众号素材 */ public function updateJournalQrcode($aParam = []){ //期刊ID $iJournalId = empty($aParam['journal_id']) ? '' : $aParam['journal_id']; if(empty($iJournalId)){ return json_encode(['status' => 2,'msg' => 'journal_id or image is empty']); } //查询是否生成二维码 $aWhere = ['journal_id' => $iJournalId,'is_delete' => 2]; $aMaterial = Db::name('ai_journal_qrcode')->field('qrcode_url,media_id,media_url')->where($aWhere)->find(); if(empty($aMaterial)){ return json_encode(['status' => 3,'msg' => 'data is null']); } //处理图片地址 $sImagePath = ROOT_PATH.$this->sQrCodeUrl.$aMaterial['qrcode_url']; //调用微信新增素材接口上传 $oWechat = new Wechat; $sWechatAppId = empty($aParam['wechat_app_id']) ? '' : $aParam['wechat_app_id']; $sWechatAppSecret = empty($aParam['wechat_app_secret']) ? '' : $aParam['wechat_app_secret']; $aImageParam = ['image_url' => $sImagePath,'wechat_app_id' => $sWechatAppId,'wechat_app_secret' => $sWechatAppSecret]; $aUploadResult = json_decode($oWechat->uploadMaterial($aImageParam),true); $sMsg = empty($aUploadResult['msg']) ? 'Failed to upload materials' : $aUploadResult['msg']; $aData = empty($aUploadResult['data']) ? [] : $aUploadResult['data']; if(empty($aData['url'])){ return json_encode(['status' => 4,'msg' => $sMsg]); } $sMediaId = empty($aData['media_id']) ? [] : $aData['media_id']; $sMediaUrl = empty($aData['url']) ? [] : $aData['url']; $iTime = empty($aUploadResult['created_at']) ? time() : $aUploadResult['created_at']; $aUpdate = ['media_id' => $sMediaId,'media_url' => $sMediaUrl,'update_time' => $iTime]; $response = Db::name('ai_journal_qrcode')->where('journal_id',$iJournalId)->limit(1)->update($aUpdate); if($response === false){ return json_encode(['status' => 3,'msg' => 'fail']); } return json_encode(['status' => 1,'msg' => 'success','data' => $aUpdate]); } /** * 更新文章二维码关联微信公众号素材 */ public function updateArticleQrcode($aParam = []){ $iArticleId = empty($aParam['article_id']) ? '' : $aParam['article_id']; if(empty($iArticleId)){ return json_encode(['status' => 2,'msg' => 'article_id is empty']); } //查询是否添加素材 $aWhere = ['article_id' => $iArticleId,'is_delete' => 2]; $aMaterial = Db::name('ai_article_qrcode')->field('qrcode_url,media_id,media_url')->where($aWhere)->find(); if(empty($aMaterial)){ return json_encode(['status' => 3,'msg' => 'data is null']); } //处理图片地址 $sImagePath = ROOT_PATH.$this->sQrCodeUrl.$aMaterial['qrcode_url']; //调用微信新增素材接口上传 $oWechat = new Wechat; $sWechatAppId = empty($aParam['wechat_app_id']) ? '' : $aParam['wechat_app_id']; $sWechatAppSecret = empty($aParam['wechat_app_secret']) ? '' : $aParam['wechat_app_secret']; $aImageParam = ['image_url' => $sImagePath,'wechat_app_id' => $sWechatAppId,'wechat_app_secret' => $sWechatAppSecret]; $aUploadResult = json_decode($oWechat->uploadMaterial($aImageParam),true); $sMsg = empty($aUploadResult['msg']) ? 'Failed to upload materials' : $aUploadResult['msg']; $aData = empty($aUploadResult['data']) ? [] : $aUploadResult['data']; if(empty($aData['url'])){ return json_encode(['status' => 5,'msg' => $sMsg]); } //更新 $sMediaId = empty($aData['media_id']) ? [] : $aData['media_id']; $sMediaUrl = empty($aData['url']) ? [] : $aData['url']; $iTime = empty($aUploadResult['created_at']) ? time() : $aUploadResult['created_at']; $aUpdate = ['media_id' => $sMediaId,'media_url' => $sMediaUrl,'update_time' => $iTime]; $response = Db::name('ai_article_qrcode')->where('article_id',$iArticleId)->limit(1)->update($aUpdate); if($response === false){ return json_encode(['status' => 3,'msg' => 'update fail']); } return json_encode(['status' => 1,'msg' => 'success','data' => $aUpdate]); } /** * 更新通讯作者关联微信公众号素材 */ public function updateArticleAuthor($aParam = []){ $sEmail = empty($aParam['email']) ? '' : $aParam['email']; //文章图片 $sIcon = empty($aParam['icon']) ? '' : $aParam['icon']; if(empty($sEmail) || empty($sIcon)){ return json_encode(['status' => 2,'msg' => 'email is empty']); } //处理图片地址 $sImagePath = ROOT_PATH.$this->sUserIcon.trim($sIcon,'/'); if(trim($sIcon) != $this->sDefaultUserIcon){//非默认头像 //调用微信新增素材接口上传 $oWechat = new Wechat; $sWechatAppId = empty($aParam['wechat_app_id']) ? '' : $aParam['wechat_app_id']; $sWechatAppSecret = empty($aParam['wechat_app_secret']) ? '' : $aParam['wechat_app_secret']; $aImageParam = ['image_url' => $sImagePath,'wechat_app_id' => $sWechatAppId,'wechat_app_secret' => $sWechatAppSecret]; $aUploadResult = json_decode($oWechat->uploadMaterial($aImageParam),true); $sMsg = empty($aUploadResult['msg']) ? 'Failed to upload materials' : $aUploadResult['msg']; $aData = empty($aUploadResult['data']) ? [] : $aUploadResult['data']; if(empty($aData['url'])){ return json_encode(['status' => 5,'msg' => $sMsg]); } } if(trim($sIcon) == $this->sDefaultUserIcon){//默认头像 $aData = $this->aLogo; } //更新 $sMediaId = empty($aData['media_id']) ? [] : $aData['media_id']; $sMediaUrl = empty($aData['url']) ? [] : $aData['url']; $iTime = empty($aUploadResult['created_at']) ? time() : $aUploadResult['created_at']; $aInsert = ['media_id' => $sMediaId,'media_url' => $sMediaUrl,'create_time' => $iTime,'email' => $sEmail,'user_id' => $aParam['user_id'],'update_time' => $iTime]; $sStartSql = 'INSERT INTO t_ai_author_material ('.implode(',', array_keys($aInsert)).') VALUES ('; $sEndSql = ') ON DUPLICATE KEY UPDATE update_time = VALUES(update_time),media_id = VALUES(media_id),media_url = VALUES(media_url)'; $sSql = ''; foreach ($aInsert as $key => $value) { $sSql .= '"'.$value.'",'; } $sSql = $sStartSql.trim($sSql,',').$sEndSql; $result = Db::execute($sSql); return json_encode(['status' => 1,'msg' => 'success','data' => $aInsert]); } /** * 更新通讯作者关联微信公众号素材 */ public function updateJournalEditorQrcode($aParam = []){ $iJournalId = empty($aParam['journal_id']) ? '' : $aParam['journal_id']; //文章图片 $sIcon = empty($aParam['editor_qrcode']) ? '' : $aParam['editor_qrcode']; if(empty($iJournalId) || empty($sIcon)){ return json_encode(['status' => 2,'msg' => 'The journal editor did not upload the QR code']); } //处理图片地址 $sImagePath = ROOT_PATH.$this->sJournalEditorQrcode.trim($sIcon,'/'); //调用微信新增素材接口上传 $oWechat = new Wechat; $sWechatAppId = empty($aParam['wechat_app_id']) ? '' : $aParam['wechat_app_id']; $sWechatAppSecret = empty($aParam['wechat_app_secret']) ? '' : $aParam['wechat_app_secret']; $aImageParam = ['image_url' => $sImagePath,'wechat_app_id' => $sWechatAppId,'wechat_app_secret' => $sWechatAppSecret]; $aUploadResult = json_decode($oWechat->uploadMaterial($aImageParam),true); $sMsg = empty($aUploadResult['msg']) ? 'Failed to upload materials' : $aUploadResult['msg']; $aData = empty($aUploadResult['data']) ? [] : $aUploadResult['data']; if(empty($aData['url'])){ return json_encode(['status' => 5,'msg' => $sMsg]); } //处理入库数据 $sMediaId = empty($aData['media_id']) ? [] : $aData['media_id']; $sMediaUrl = empty($aData['url']) ? [] : $aData['url']; $iTime = empty($aUploadResult['created_at']) ? time() : $aUploadResult['created_at']; //操作数据组装 $aInsert = ['media_id' => $sMediaId,'journal_id' => $iJournalId,'media_url' => $sMediaUrl,'create_time' => $iTime,'update_time' => $iTime]; $sStartSql = 'INSERT INTO t_ai_journal_editor_material ('.implode(',', array_keys($aInsert)).') VALUES ('; $sEndSql = ') ON DUPLICATE KEY UPDATE update_time = VALUES(update_time),media_id = VALUES(media_id),media_url = VALUES(media_url)'; $sSql = ''; foreach ($aInsert as $key => $value) { $sSql .= '"'.$value.'",'; } $sSql = $sStartSql.trim($sSql,',').$sEndSql; $result = Db::execute($sSql); return json_encode(['status' => 1,'msg' => 'success','data' => $aInsert]); } }