* 小程序公共API服务 */ namespace app\allwin\controller\api\v4; use app\allwin\controller\api\Base; use app\allwin\model\AllwinInfoCate; use app\allwin\model\AllwinInfo; use app\allwin\model\AllwinInfoReply; use app\allwin\model\AllwinInfoConfig; use app\allwin\model\AllwinInfoFollow; use app\allwin\model\AllwinConfig; use app\allwin\model\AllwinInfoMp; use app\allwin\model\MchId; use app\common\facade\WechatPay; use app\common\facade\Upload; use app\common\model\SystemUser; use app\common\model\SystemMemberSms; use think\facade\Config; use filter\Filter; class Infosend extends Base{ /** * 初始化当前应用是否登录 * @return void */ public function initialize() { parent::initialize(); $this->isUserAuth(); } /** * 判断是否注册城市号 */ public function isRegMp(){ $rel = AllwinInfoMp::where(['uid' => $this->user->id])->count(); if($rel){ return enjson(200); } return enjson(204); } /** * 编辑开通城市号和申请认证城市号 * * @return void */ public function editMp(){ $param['logo'] = $this->request->param('logo/s'); $param['skin'] = $this->request->param('skin/s'); $param['title'] = $this->request->param('title/s'); $param['note'] = $this->request->param('note/s'); $param['telphone'] = $this->request->param('telphone/s'); $param['vip_title'] = $this->request->param('vip_title/s',''); $param['vip_about'] = $this->request->param('vip_about/s',''); $param['checked'] = $this->request->param('checked/d',0); $param['signkey'] = $this->request->param('signkey/s'); $param['sign'] = $this->request->param('sign'); $rel = $this->apiSign($param); if($rel['code'] != 200){ return enjson($rel['code'],'签名验证失败'); } $data['title'] = $param['title']; $data['note'] = $param['note']; $rel = AllwinInfoMp::where(['uid' => $this->user->id])->find(); if($rel){ if($rel->is_lock){ return enjson(403,'城市号已被锁定'); } //判断是否修改skin if(!empty($param['skin'])){ $rel->skin = $param['skin']; } //判断是否修改logo if(!empty($param['logo'])){ $rel->logo = $param['logo']; } if(!$rel->is_apply && !$rel->is_vip){ $rel->is_apply = $param['checked'] ? 1 : 0; $rel->vip_title = $param['vip_title']; $rel->vip_about = $param['vip_about']; } $result = $rel->save(); }else{ $data['member_miniapp_id'] = $this->miniapp_id; $data['uid'] = $this->user->id; $data['is_apply'] = $param['checked'] ? 1 : 0; $data['is_vip'] = 0; $data['vip_title'] = $param['vip_title']; $data['vip_about'] = $param['vip_about']; $data['reg_time'] = time(); $data['vip_time'] = time(); $data['fans'] = AllwinInfoFollow::where(['uid' => $this->user->id])->count(); $data['logo'] = empty($param['logo']) ? $this->user->face: $param['logo']; $data['skin'] = empty($param['skin']) ? Config::get('upload.upload_relative').'static/allwin/skin/2.jpg':$param['skin']; $result = AllwinInfoMp::create($data); } if($result){ return enjson(200,'城市号设置成功'); } return enjson(403,'设置失败'); } /** * VIP认证 */ public function vipAuth(){ if(request()->isPost()){ $rel = AllwinInfoMp::where(['uid' => $this->user->id,'is_lock' => 0,'is_vip' => 1])->count(); if($rel){ return enjson(200,'认证用户',['vip'=>1]); } } return enjson(200,'非认证用户',['vip'=>0]); } /** * 商城图片 */ public function upImg(){ if(request()->isPost()){ $rel = Upload::index(); if($rel['error'] == 0){ return enjson(200,'success',$rel['url']); }else{ return enjson(204); } } } /** * 城市号信息 */ public function getMp(){ $param['uid'] = $this->request->param('uid/d',0); $param['signkey'] = $this->request->param('signkey/s'); $param['sign'] = $this->request->param('sign'); $rel = $this->apiSign($param); if($rel['code'] != 200){ return enjson($rel['code'],'签名验证失败'); } $where = []; $where['uid'] = $param['uid']; $rel = AllwinInfoMp::where($where)->find(); if($rel){ if($rel->is_lock){ return enjson(403,'城市号不存在'); } $rel->views = AllwinInfo::where(['user_id' => $rel->uid])->count(); $rel->like = AllwinInfoFollow::where(['uid' => $rel->uid])->count(); $rel->is_follow = 0; $rel->vip_time = empty($rel->vip_time)?'0':date('Y-m-d',$rel->vip_time); $rel->reg_time = empty($rel->reg_time)?'0':date('Y-m-d',$rel->reg_time); if($this->user){ $rel->is_follow = AllwinInfoFollow::where(['uid' => $this->user->id,'like_uid'=>$rel->uid])->count(); } return enjson(200,'成功',$rel); } return enjson(204); } /** * 发表信息 */ public function send(){ if(request()->isPost()){ $param = [ 'content' => $this->request->param('content/s'), 'telphone' => $this->request->param('telphone/s',''), 'topday' => $this->request->param('topday/d',0), 'cate_id' => $this->request->param('cate_id/d',0), 'store_id' => $this->request->param('store_id/d',0), 'imgs' => $this->request->param('imgs/s','[]','htmlspecialchars_decode'), 'fields' => $this->request->param('fields/s','[]','htmlspecialchars_decode'), 'is_get' => $this->request->param('is_get/d',0), 'price' => $this->request->param('price/d'), 'sign' => $this->request->param('sign/s',0), ]; $rel = $this->apiSign($param); if($rel['code'] != 200){ return enjson($rel['code'],'签名验证失败'); } $param['member_miniapp_id'] = $this->miniapp_id; $param['user_id'] = $this->user->id; $validate = $this->validate($param,'Info.sendInfo'); if(true !== $validate){ return json(['code'=>403,'msg'=>$validate]); } $param['images'] = json_encode(Filter::filter_escape(json_decode($param['imgs'],true))); $param['fields'] = json_encode(Filter::filter_escape(json_decode($param['fields'],true))); //置顶 $amount = 0; $config = AllwinInfoConfig::config($this->miniapp_id); if($param['topday'] && !empty($config)){ $topday = json_decode($config['topday'],true); foreach ($topday as $value) { if($value['day'] == $param['topday']){ $amount = $value['money']; $param['topday'] = $value['day']; } } } $param['top_money'] = $amount; //置顶金额 $param['order_no'] = $this->user->invite_code.order_no(); $result = AllwinInfo::postThemes($param); if($result){ SystemMemberSms::sms($this->miniapp_id,'您有一条信息管理待审核',url('allwin/info.index/index')); if($amount > 0){ $order = [ 'openid' => $this->user['miniapp_uid'], 'miniapp_id' => $this->miniapp_id, 'name' => '信息置顶', 'order_no' => $param['order_no'], 'total_fee' => $amount, 'notify_url' => api(4,'allwin/infonotify/index',$this->miniapp_id) ]; $setting = AllwinConfig::getConfig($this->miniapp_id); if($setting->is_psp == 1){ $default_mchid = MchId::getMch(0,$this->miniapp_id); if (empty($default_mchid)) { return enjson(403,'未找到商户号'); } $order['mchid'] = $default_mchid->mchid; } $ispay = WechatPay::orderPay($order);; if($ispay['code'] == 0){ return json(['code'=>403,'msg'=>$ispay['msg']]); } return enjson(200,'发布成功,内容需审核!',$ispay['data']); }else{ return enjson(204,'发布成功,内容需审核!'); } }else{ return enjson(403,'发布失败'); } } } /** * 发布评论 */ public function postReply(){ if(request()->isPost()){ $param = [ 'content' => $this->request->param('content/s'), 'info_id' => $this->request->param('info_id/d'), 'sign' => $this->request->param('sign/s',0), ]; $rel = $this->apiSign($param); if($rel['code'] != 200){ return enjson($rel['code'],'签名验证失败'); } $data = [ 'content' => $param['content'], 'info_id' => $param['info_id'], 'user_id' => $this->user->id, 'member_miniapp_id' => $this->miniapp_id, ]; $validate = $this->validate($data,'Info.sendReply'); if(true !== $validate){ return enjson(403,$validate); } $result = AllwinInfoReply::postReply($data); if($result){ AllwinInfo::where(['id' => $param['info_id']])->setInc('reply_num',1); return enjson(200,'评论成功'); }else{ return enjson(403,'评论失败'); } } } /** * 读取微信API * @param integer 读取ID * @return json */ public function getTpl(){ $param['id'] = $this->request->param('id/d',0); $param['signkey'] = $this->request->param('signkey'); $param['sign'] = $this->request->param('sign'); $rel = $this->apiSign($param); if($rel['code'] != 200){ return enjson($rel['code'],'签名验证失败'); } $rel = AllwinInfoCate::cateTpl($param['id']); return enjson(200,'成功',$rel); } /** * 点赞 **/ public function like(){ $param['id'] = $this->request->param('id/d',0); $param['sign'] = $this->request->param('sign'); $rel = $this->apiSign($param); if($rel['code'] != 200){ return enjson($rel['code'],'签名验证失败'); } $condition['member_miniapp_id'] = $this->miniapp_id; $condition['id'] = $param['id']; $rel = AllwinInfo::where($condition)->find(); $like_face = json_decode(empty($rel->like_face) ? '[]':$rel->like_face,true); if(count($like_face) < 10){ if(!in_array($this->user->face,$like_face)){ array_push($like_face,$this->user->face); $rel->like_face = json_encode($like_face); } } $rel->like = ['inc',1]; $rel->save(); if(empty($rel)){ return enjson(403,'不用重复点赞'); }else{ return enjson(200); } } /** * 评论点赞 * @return void */ public function replylike(){ $param['id'] = $this->request->param('id/d',0); $param['sign'] = $this->request->param('sign'); $rel = $this->apiSign($param); if($rel['code'] != 200){ return enjson($rel['code'],'签名验证失败'); } $condition['member_miniapp_id'] = $this->miniapp_id; $condition['id'] = $param['id']; $rel = AllwinInfoReply::where($condition)->setInc('like',1); if(empty($rel)){ return enjson(403,'不用重复点赞'); }else{ return enjson(200); } } /** * 关注或取消 */ public function follow(){ $param['uid'] = $this->request->param('uid/d'); $param['state'] = $this->request->param('state/d',0); $param['sign'] = $this->request->param('sign'); $rel = $this->apiSign($param); if($rel['code'] != 200){ return enjson($rel['code'],'签名验证失败'); } if($param['uid'] == $this->user->id){ return enjson(403,'不用关注自己'); } //判断关注用户是否存在 $is_user = SystemUser::where(['id' => $param['uid'],'is_lock' => 0,'is_delete' => 0])->find(); if(empty($is_user)){ return enjson(403,'当前用户已被封号'); } //关注 $condition['like_uid'] = $param['uid']; $condition['uid'] = $this->user->id; $info = AllwinInfoFollow::where($condition)->find(); if(empty($info)){ $follow = AllwinInfoFollow::where(['uid' => $this->user->id,'like_uid' => 0])->find(); if($param['state'] == 1){ if(empty($follow)){ $rel = AllwinInfoFollow::create(['uid' => $this->user->id,'like_uid' => $param['uid']]); }else{ $follow->like_uid = $param['uid']; $rel = $follow->save(); } }else{ return enjson(403,'关注失败'); } }else{ if($param['state'] == 0){ $info->like_uid = 0; $rel = $info->save(); } } if(empty($rel)){ return enjson(403,'关注失败'); }else{ //增加粉丝 $infomp = AllwinInfoMp::where(['uid' => $param['uid']])->find(); if($infomp){ if($param['state']){ $infomp->fans = ['inc',1]; }else{ $infomp->fans = ['dec',1]; } $infomp->save(); } return enjson(200,$param['state']?'已关注':'取消关注'); } } }