Files
tougao/application/common/Material.php
2025-05-21 17:40:09 +08:00

701 lines
32 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace app\common;
use think\Db;
use app\common\QrCodeImage;
use app\common\Wechat;
use think\Cache;
class Material
{
protected $aLogo = ['media_id' => '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';
protected $sMaterialStepName = 'upload_step_name_';
protected $sMaterialError = 'upload_error_';
protected $sAppID; //= 'wx03cb871b66e34e10';
protected $sAppSecret; //= 'f59ccaf00383dcfab489292c4697620a';
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 图片地址
*/
private 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]);
}
/**
* 添加期刊素材
*/
private 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]);
}
/**
* 更新期刊二维码关联微信公众号素材
*/
private 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]);
}
/**
* 更新文章二维码关联微信公众号素材
*/
private 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]);
}
/**
* 更新通讯作者关联微信公众号素材
*/
private 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]);
}
/**
* 更新通讯作者关联微信公众号素材
*/
private 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]);
}
/**
* 写入Reids 防止两小时内重复上传
*/
public function setStepForRedis($iArticleId = 0,$sStepName = 'addArticleMaterial'){
//写入redis 避免重复请求
$sStepNameForRedis = $this->getStepForRedis($iArticleId);
if(empty($sStepNameForRedis) || (!empty($sStepNameForRedis) && $sStepNameForRedis != 'finish')){
$sRedisKey = $this->sMaterialStepName.'upload_article_id_'.$iArticleId;
return Cache::set($sRedisKey, $sStepName, 600); // 有效期600秒
}
}
/**
* 获取Reids 防止两小时内重复上传
*/
public function getStepForRedis($iArticleId = 0){
$sRedisKey = $this->sMaterialStepName.'upload_article_id_'.$iArticleId;
return Cache::get($sRedisKey); // 有效期600秒
}
/**
* 写入Reids 防止两小时内重复上传
*/
public function setErrorForRedis($iArticleId = 0,$sStepName = 'addArticleMaterial'){
$sRedisKey = $this->sMaterialError.$iArticleId;
return Cache::set($sRedisKey, $sStepName, 600); // 有效期600秒
}
/**
* 写入Reids 防止两小时内重复上传
*/
public function getErrorForRedis($iArticleId = 0){
$sRedisKey = $this->sMaterialError.$iArticleId;
return Cache::set($sRedisKey, $sStepName, 600); // 有效期600秒
}
/**
* 上传素材
*/
public function uploadMaterial($aParam = []){
//获取参数
$aParam = empty($aParam) ? $this->input->post() : $aParam;
//文章ID
$iArticleId = empty($aParam['article_id']) ? '' : $aParam['article_id'];
//必填验证
if(empty($iArticleId)){
return json_encode(['status' => 2,'msg' => 'article_id is empty']);
}
//期刊ID
$iJournalId = empty($aParam['journal_id']) ? '' : $aParam['journal_id'];
if(empty($iJournalId)){
return json_encode(['status' => 2,'msg' => 'journal_id is empty']);
}
// 获取微信公众号APPID和APPKEY
if(empty($aParam['wechat_app_id']) || empty($aParam['wechat_app_secret'])){
return json_encode(['status' => 2,'msg' => 'Please configure the AppID and AppSecret']);
}
//获取缓存标识
$sStepName = $this->getStepForRedis($iArticleId);
if(!empty($sStepName) && $sStepName == 'finish'){
return json_encode(['status' => 1,'msg' => 'The relevant materials for the article have been uploaded. Please try again in ten minutes']);
}
if(empty($sStepName)){
//写入标识
$this->setStepForRedis($iArticleId);
$sStepName = 'addArticleMaterial';
}
//微信公众号密钥
$aWechatParam = ['wechat_app_id' => $aParam['wechat_app_id'],'wechat_app_secret' => $aParam['wechat_app_secret']];
//获取文章参数
$aArticle = empty($aParam['article_info']) ? [] : $aParam['article_info'];
//上传文章素材参数组装
$aArticleParam = ['article_id' => $iArticleId,'icon' => empty($aArticle['icon']) ? '' : $aArticle['icon']];
$aArticleParam += $aWechatParam;
//上传文章图片素材
if(!empty($aArticleParam['icon']) && $sStepName == 'addArticleMaterial'){
$aUploadResult = json_decode($this->addArticleMaterial($aArticleParam),true);
$aParam['article_info'] = empty($aUploadResult['data']) ? [] : $aUploadResult['data'];
if(empty($aParam['article_info'])){
$sMsg = empty($aUploadResult['msg']) ? 'Article material upload failed' : $aUploadResult['msg'];
$this->setErrorForRedis($iArticleId,$sMsg);
return json_encode(['status' => 2,'msg' => $sMsg]);
}
}
//写入Redis下一个执行方法
$sStepName = 'updateArticleQrcode';
$this->setStepForRedis($iArticleId,$sStepName);
//文章二维码图片上传
if($sStepName == 'updateArticleQrcode'){
$aUploadResult = json_decode($this->updateArticleQrcode($aArticleParam),true);
$aParam['article_qrcode_info'] = empty($aUploadResult['data']) ? [] : $aUploadResult['data'];
if(empty($aParam['article_qrcode_info'])){
$sMsg = empty($aUploadResult['msg']) ? 'Article QR code image upload failed' : $aUploadResult['msg'];
$this->setErrorForRedis($iArticleId,$sMsg);
return json_encode(['status' => 2,'msg' => $sMsg]);
}
}
//写入Redis下一个执行方法
$sStepName = 'addJournalMaterial';
$this->setStepForRedis($iArticleId, $sStepName);
//获取期刊信息
$aJournal = empty($aParam['journal_info']) ? [] : $aParam['journal_info'];
//上传期刊素材相关参数组装
$aJournalParam = ['journal_id' => $iJournalId,'icon' => empty($aJournal['icon']) ? '' : $aJournal['icon'],'editor_qrcode' => empty($aJournal['editor_qrcode']) ? '' : $aJournal['editor_qrcode']];
$aJournalParam += $aWechatParam;
//上传期刊图片
if(!empty($aJournalParam['icon']) && $sStepName == 'addJournalMaterial'){
$aUploadResult = json_decode($this->addJournalMaterial($aJournalParam),true);
$aParam['journal_info'] = empty($aUploadResult['data']) ? [] : $aUploadResult['data'];
if(empty($aParam['journal_info'])){
$sMsg = empty($aUploadResult['msg']) ? 'Journal material image upload failed' : $aUploadResult['msg'];
$this->setErrorForRedis($iArticleId,$sMsg);
return json_encode(['status' => 2,'msg' => $sMsg]);
}
}
//写入Redis下一个执行方法
$sStepName = 'updateJournalQrcode';
$this->setStepForRedis($iArticleId,$sStepName);
//上传期刊二维码
if($sStepName == 'updateJournalQrcode'){
$aUploadResult = json_decode($this->updateJournalQrcode($aJournalParam),true);
$aParam['journal_qrcode_info'] = empty($aUploadResult['data']) ? [] : $aUploadResult['data'];
if(empty($aParam['journal_qrcode_info'])){
$sMsg = empty($aUploadResult['msg']) ? 'Journal QR code image upload failed' : $aUploadResult['msg'];
$this->setErrorForRedis($iArticleId,$sMsg);
return json_encode(['status' => 2,'msg' => $sMsg]);
}
}
//写入Redis下一个执行方法
$sStepName = 'updateJournalEditorQrcode';
$this->setStepForRedis($iArticleId,$sStepName);
//期刊编辑二维码
if(!empty($aJournalParam['editor_qrcode']) && $sStepName == 'updateJournalEditorQrcode'){
$aUploadResult = json_decode($this->updateJournalEditorQrcode($aJournalParam),true);
$aParam['editor_qrcode_info'] = empty($aUploadResult['data']) ? [] : $aUploadResult['data'];
if(empty($aParam['editor_qrcode_info'])){
$sMsg = empty($aUploadResult['msg']) ? "Journal editor's QR code image upload failed" : $aUploadResult['msg'];
$this->setErrorForRedis($iArticleId,$sMsg);
return json_encode(['status' => 2,'msg' => $sMsg]);
}
}
//写入下一个执行方法
$sStepName = 'updateArticleAuthor';
$this->setStepForRedis($iArticleId,$sStepName);
//作者
$aAuthor = empty($aParam['author_info']) ? [] : $aParam['author_info'];
if(!empty($aAuthor) && $sStepName == 'updateArticleAuthor'){
$sError = '';
foreach ($aAuthor as $key => $value) {
if(empty($value['icon'])){
continue;
}
//文章二维码图片上传
$aUpload = ['email' => $value['email'],'icon' => $value['icon'],'user_id' => $value['user_id']];
$aUpload += $aWechatParam;
$aAuthorResult = json_decode($this->updateArticleAuthor($aUpload),true);
$aAuthorData = empty($aAuthorResult['data']) ? [] : $aAuthorResult['data'];
if(empty($aAuthorData)){
$sError .= empty($aAuthorResult['msg']) ? "The corresponding author's avatar upload failed:".$value['email'].';' : $aAuthorResult['msg']."-".$value['email'].';';
}
$aAuthor[$key]['icon'] = empty($aAuthorData['media_url']) ? $value['icon'] : $aAuthorData['media_url'];
}
$aParam['author_info'] = $aAuthor;
}
if(!empty($sError)){
$this->setErrorForRedis($iArticleId,$sError);
return json_encode(['status' => 2,'msg' => $sError]);
}
//写入redis 上传执行完成
$this->setStepForRedis($iArticleId,'finish');
//返回参数
return json_encode(['status' => 1,'msg' => 'Upload successful','data' => $aParam]);
}
/**
* 获取素材
*/
public function getMaterial($aParam = []){
//获取参数
$aParam = empty($aParam) ? $this->input->post() : $aParam;
//文章ID
$iArticleId = empty($aParam['article_id']) ? '' : $aParam['article_id'];
//必填验证
if(empty($iArticleId)){
return json_encode(['status' => 2,'msg' => 'article_id is empty']);
}
//期刊ID
$iJournalId = empty($aParam['journal_id']) ? '' : $aParam['journal_id'];
if(empty($iJournalId)){
return json_encode(['status' => 2,'msg' => 'journal_id is empty']);
}
//返回数据定义空数组
$aData = [];
//文章图片素材
$aWhere = ['article_id' => $iArticleId,'is_delete' => 2];
$aData['ai_article_material'] = Db::name('ai_article_material')->field('media_id,media_url')->where($aWhere)->find();
//文章二维码素材
$aData['ai_article_qrcode'] = Db::name('ai_article_qrcode')->field('media_id,media_url')->where($aWhere)->find();
//期刊素材
$aJournalWhere = ['journal_id' => $iJournalId,'is_delete' => 2];
$aData['ai_journal_material'] = Db::name('ai_journal_material')->field('media_id,media_url')->where($aJournalWhere)->find();
//期刊二维码
$aData['ai_journal_qrcode'] = Db::name('ai_journal_qrcode')->field('media_id,media_url')->where($aJournalWhere)->find();
//期刊编辑
$aData['ai_journal_editor_material'] = Db::name('ai_journal_editor_material')->field('media_id,media_url')->where($aJournalWhere)->find();
//文章作者
if(!empty($aParam['author_info'])){
$aEmail = array_column($aParam['author_info'], 'email');
$aWhere = ['email' => ['in',$aEmail],'is_delete' => 2];
$aData['ai_author_material'] = Db::name('ai_author_material')->field('user_id,email,media_id,media_url')->where($aWhere)->find();
}
return json_encode(['status' => 1,'msg' => 'Successfully obtained data','data' => $aData]);
}
}