494 lines
18 KiB
PHP
494 lines
18 KiB
PHP
<?php
|
||
namespace app\api\controller;
|
||
|
||
use think\Db;
|
||
use \think\Loader;
|
||
use think\helper\Hash;
|
||
use Qrcode\Compress;
|
||
use EasyWeChat\Factory;
|
||
use EasyWeChat\MiniProgram;
|
||
use think\facade\Config;
|
||
use app\admin\model\Attachment as AttachmentModel;
|
||
use app\member\model\Member as MemberModel;
|
||
use app\member\model\MemberService as MemberServiceModel;
|
||
use app\member\model\MemberServiceDetail as MemberServiceDetailModel;
|
||
use app\other\model\ProductCategory as ProductCategoryModel;
|
||
use app\other\model\Citys as CitysModel;
|
||
use app\other\model\Advert as AdvertModel;
|
||
use app\member\model\MemberShareLogs as MemberShareLogsModel;
|
||
use app\member\model\MemberServiceOrder as MemberServiceOrderModel;
|
||
use app\member\model\MemberBalanceLogs as MemberBalanceLogsModel;
|
||
use app\member\model\MemberMessages as MemberMessagesModel;
|
||
|
||
/**
|
||
* 公共接口
|
||
* @package app\api\controller
|
||
*/
|
||
class Index extends Api
|
||
{
|
||
|
||
//初始化
|
||
public function initialize(){
|
||
parent::initialize();
|
||
}
|
||
|
||
/**
|
||
* 首页
|
||
* @param $string $keyword 搜索(搜索城市)
|
||
* @param $int $cityid 城市id
|
||
* @param int $page 页数(默认为1,每页显示20条数据)
|
||
* @author loomis<2477365162@qq.com>
|
||
*/
|
||
public function index(){
|
||
//传参数据
|
||
$data_list = $this->params;
|
||
|
||
//首页广告图片
|
||
$indexadvert = AdvertModel::where(['type'=>1])->field('id,linkurl,thumb')->select()->toArray();
|
||
if(!empty($indexadvert)){
|
||
foreach ($indexadvert as $k=>$v){
|
||
$indexadvert[$k]['thumb'] = $this->getFileUrl($v['thumb']);
|
||
}
|
||
}
|
||
|
||
//公告
|
||
$indexnotice = MemberServiceDetailModel::field('id,title')->select()->toArray();
|
||
|
||
//城市数据
|
||
$citylist = CitysModel::where('is_delete',0)->order('sort asc,create_time desc')->field('id,thumb,title')->select()->toArray();
|
||
if(!empty($citylist)){
|
||
foreach ($citylist as $k=>$v){
|
||
$citylist[$k]['thumb'] = $this->getFileUrl($v['thumb']);
|
||
}
|
||
}
|
||
|
||
//置顶搭子群数据
|
||
$topgroups = MemberServiceModel::where(['is_index'=>1,'is_delete'=>0])->order('sort asc,create_time desc')->field('id,index_thumb,index_title')->select()->toArray();
|
||
if(!empty($topgroups)){
|
||
foreach ($topgroups as $k=>$v){
|
||
$topgroups[$k]['index_thumb'] = $this->getFileUrl($v['index_thumb']);
|
||
}
|
||
}
|
||
|
||
//页数
|
||
$page = 1;
|
||
if(isset($data_list['page'])){
|
||
$page = intval($data_list['page']);
|
||
}
|
||
$page = ($page-1);
|
||
$page=$page*20;
|
||
$limit=$page.',20';
|
||
|
||
//搭子群数据
|
||
$where = [];
|
||
$where[] = ['is_delete','eq',0];
|
||
$where[] = ['id','neq',12];
|
||
if(isset($data_list['keyword']) && !empty($data_list['keyword'])){
|
||
$keyword = trim($data_list['keyword']);
|
||
$where2 = [];
|
||
$where2[] = ['is_delete','eq',0];
|
||
$where2[] = ['title','like',"%$keyword%"];
|
||
$ids = CitysModel::where($where2)->column('id');
|
||
$ids = implode(',',$ids);
|
||
$where[] = ['cityid','in',$ids];
|
||
}
|
||
if(isset($data_list['cityid']) && !empty($data_list['cityid'])){
|
||
$cityid = intval($data_list['cityid']);
|
||
$where[] = ['cityid','eq',$cityid];
|
||
}
|
||
$groups = MemberServiceModel::where($where)->order('sort asc,create_time desc')->field('id,title,summary,thumb')->limit($limit)->select()->toArray();
|
||
if(!empty($groups)){
|
||
foreach ($groups as $k=>$v){
|
||
$groups[$k]['thumb'] = $this->getFileUrl($v['thumb']);
|
||
}
|
||
}
|
||
|
||
//浏览数
|
||
$numberviews = MemberServiceModel::where('is_delete',0)->sum('browse');
|
||
//发布
|
||
$sendnum = MemberServiceModel::where('is_delete',0)->count();
|
||
//用户数
|
||
$usernum = MemberModel::where('is_delete',0)->count();
|
||
|
||
$indexfootadvert = AdvertModel::where(['type'=>4])->field('id,linkurl,thumb')->find();
|
||
$indexfootadvert['thumb'] = $this->getFileUrl($indexfootadvert['thumb']);
|
||
|
||
apiReturn('200', '查询成功',[
|
||
'indexadvert'=>$indexadvert,
|
||
'indexnotice'=>$indexnotice,
|
||
'citylist'=>$citylist,
|
||
'topgroups'=>$topgroups,
|
||
'groups'=>$groups,
|
||
'numberviews'=>$numberviews,//浏览数
|
||
'sendnum'=>$sendnum,//发布数
|
||
'usernum'=>$usernum,//用户数
|
||
'indexfootadvert' => $indexfootadvert,
|
||
]);
|
||
}
|
||
|
||
public function getindexfootadinfo(){
|
||
|
||
$indexfootadvert = AdvertModel::where(['type'=>4])->find();
|
||
|
||
$img2arr = explode(',',$indexfootadvert['img2']);
|
||
$randomElement = $img2arr[array_rand($img2arr)];
|
||
|
||
$randomElement = $this->getFileUrl($randomElement);
|
||
$backgroundimage = $this->getFileUrl($indexfootadvert['img1']);
|
||
|
||
apiReturn('200', '查询成功',[
|
||
'randomElement'=>$randomElement,
|
||
'backgroundimage'=>$backgroundimage,
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* 搭子群详情
|
||
* @param $groupid 群id
|
||
* @author loomis<2477365162@qq.com>
|
||
*/
|
||
public function groupdetail(){
|
||
//传参数据
|
||
$data_list = $this->params;
|
||
|
||
if(!isset($data_list['groupid']) || empty($data_list['groupid'])){
|
||
apiReturn('500', '群id不能为空');
|
||
}
|
||
|
||
$groupid = intval($data_list['groupid']);
|
||
$info = MemberServiceModel::where(['id'=>$groupid,'is_delete'=>0])->find();
|
||
if(empty($info)){
|
||
apiReturn('500', '未查询到相关群信息');
|
||
}
|
||
|
||
$type=1;
|
||
$qrcodeimg = '';
|
||
if(!empty(MemberServiceOrderModel::where(['service_id'=>$groupid,'uid'=>$this->user_id,'status'=>2])->count())){
|
||
$type = 2;
|
||
$qrcodeimg = $info['qrcodeimg'];
|
||
}
|
||
|
||
$strs = 'https://'.$_SERVER['HTTP_HOST'].'/uploads/';
|
||
$message = str_replace("/uploads/", $strs, $info['message']);
|
||
|
||
$info->browse = $info->browse+1;
|
||
$info->save();
|
||
|
||
apiReturn('200', '查询成功',[
|
||
'id'=>$groupid,
|
||
'type'=>$type,
|
||
'qrcodeimg'=>$this->getFileUrl($qrcodeimg),
|
||
'title'=>$info['title'],
|
||
'thumb'=>$this->getFileUrl($info['thumb']),
|
||
'create_time'=>date('Y-m-d H:i:s',$info['create_time']),
|
||
'summary'=>$info['summary'],
|
||
'standard'=>$info['standard'],
|
||
'message'=>$message,
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* 购买搭子群二维码
|
||
* @param $groupid 群id
|
||
* @author loomis<2477365162@qq.com>
|
||
*/
|
||
public function buygroup(){
|
||
//传参数据
|
||
$data_list = $this->params;
|
||
|
||
if(!isset($data_list['groupid']) || empty($data_list['groupid'])){
|
||
apiReturn('500', '群id不能为空');
|
||
}
|
||
|
||
$groupid = intval($data_list['groupid']);
|
||
$info = MemberServiceModel::where(['id'=>$groupid,'is_delete'=>0])->find();
|
||
if(empty($info)){
|
||
apiReturn('500', '未查询到相关群信息');
|
||
}
|
||
|
||
$orderinfo = MemberServiceOrderModel::where(['type'=>1,'uid'=>$this->user_id,'service_id'=>intval($data_list['groupid']),'status'=>2])->find();
|
||
if(!empty($orderinfo)){
|
||
return json(['code' => 500, 'msg' => '此群二维码用户已经购买,请勿重复购买']);
|
||
}else{
|
||
//生成订单号
|
||
$numRes = true;
|
||
do{
|
||
$ordernum = 'O'.date('ymd').$this->user_id.rand(100,999);
|
||
$count = MemberServiceOrderModel::where(['ordernum'=>$ordernum])->count();
|
||
if(empty($count)) {
|
||
$numRes=false;
|
||
}
|
||
}while($numRes);
|
||
|
||
$totalprice = $info['price'];
|
||
|
||
$res = MemberServiceOrderModel::create([
|
||
'type'=>1,
|
||
'uid'=>$this->user_id,
|
||
'ordernum'=>$ordernum,
|
||
'service_id'=>intval($data_list['groupid']),
|
||
'totalprice'=>$totalprice,
|
||
'status'=>1,
|
||
'create_time'=>time(),
|
||
'timeout_time'=>time()+600,
|
||
'service_title'=>$info['title'],
|
||
'service_summary'=>$info['summary'],
|
||
'service_price'=>$info['price'],
|
||
'service_thumb'=>$info['qrcodeimg'],
|
||
]);
|
||
}
|
||
|
||
if($res){
|
||
//微信小程序支付回调地址
|
||
$notify_url = 'https://' . $_SERVER['HTTP_HOST'] . url('api/wxpaynotify/index');
|
||
|
||
$config = [
|
||
// 必要配置
|
||
'app_id' => config('smallprogram_appid'),
|
||
'mch_id' => config('wxpay_mchid'),
|
||
'key' => config('wxpay_paykey'), // API v2 密钥 (注意: 是v2密钥 是v2密钥 是v2密钥)
|
||
|
||
// 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
|
||
'cert_path' => get_file_path(config('wxpay_appclient_cert')), // XXX: 绝对路径!!!!
|
||
'key_path' => get_file_path(config('wxpay_appclient_key')), // XXX: 绝对路径!!!!
|
||
'notify_url' => $notify_url, // 你也可以在下单时单独设置来覆盖它
|
||
];
|
||
|
||
$total_fee = $totalprice * 100;
|
||
$app = Factory::payment($config);
|
||
$jssdk = $app->jssdk;
|
||
|
||
if(empty($total_fee)){
|
||
$total_fee = 1;
|
||
}
|
||
|
||
//下单
|
||
$result = $app->order->unify([
|
||
'body' => 'DAZIQUN',
|
||
'out_trade_no' => $ordernum,
|
||
'total_fee' => $total_fee,
|
||
'spbill_create_ip' => '', // 可选,如不传该参数,SDK 将会自动获取相应 IP 地址
|
||
'notify_url' => $notify_url, // 支付结果通知网址,如果不设置则会使用配置里的默认地址
|
||
'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
|
||
'openid' => MemberModel::where(['id' => $this->user_id])->value('openid'),
|
||
]);
|
||
|
||
//组合参数
|
||
$pay = $jssdk->bridgeConfig($result['prepay_id'], false); // 返回数组
|
||
|
||
return json(['code' => 200, 'msg' => '微信支付信息','result'=>$pay]);
|
||
}else{
|
||
return json(['code' => 500, 'msg' => '服务器繁忙,请稍后再试']);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 留言板
|
||
* @param $int $type 1男生通道 2女生通道
|
||
* @param int $page 页数(默认为1,每页显示20条数据)
|
||
* @author loomis<2477365162@qq.com>
|
||
*/
|
||
public function messageboard(){
|
||
//传参数据
|
||
$data_list = $this->params;
|
||
|
||
//页数
|
||
$page = 1;
|
||
if(isset($data_list['page'])){
|
||
$page = intval($data_list['page']);
|
||
}
|
||
$page = ($page-1);
|
||
$page=$page*20;
|
||
$limit=$page.',20';
|
||
|
||
//留言板数据
|
||
$where = [];
|
||
$where[] = ['status','eq',1];
|
||
|
||
$type=1;
|
||
if(isset($data_list['type']) && !empty($data_list['type'])){
|
||
$type = intval($data_list['type']);
|
||
}
|
||
$where[] = ['type','eq',$type];
|
||
$list = MemberMessagesModel::where($where)->order('istop desc,create_time desc')->field('id,uid,message,thumbs,create_time,wechat_number')->limit($limit)->select()->toArray();
|
||
if(!empty($list)){
|
||
foreach ($list as $k=>$v){
|
||
$thumbs = explode(',',$v['thumbs']);
|
||
foreach ($thumbs as $key=>$val){
|
||
$thumbs[$key] = $this->getFileUrl($val);
|
||
}
|
||
$list[$k]['thumbs'] = $thumbs;
|
||
|
||
//用户信息
|
||
$userinfo = MemberModel::where('id',$v['uid'])->find();
|
||
$list[$k]['headimg'] = $this->getFileUrl($userinfo['headimg']);
|
||
$list[$k]['nickname'] = $userinfo['nickname'];
|
||
|
||
$list[$k]['create_time'] = date('Y-m-d H:i:s',$v['create_time']);
|
||
|
||
//用户是否购买此留言的微信号
|
||
$isbuy = MemberBalanceLogsModel::where(['uid'=>$this->user_id,'orderid'=>$v['id'],'mark'=>'购买留言板留言信息微信号'])->count();
|
||
|
||
if($v['uid']==$this->user_id){
|
||
$isbuy = 1;
|
||
}
|
||
|
||
$list[$k]['isbuy'] = !empty($isbuy)?1:0;
|
||
$list[$k]['wechat_number'] = !empty($isbuy)?$v['wechat_number']:"";
|
||
}
|
||
}
|
||
|
||
//广告图片
|
||
$advertlist = AdvertModel::where(['type'=>2])->field('id,linkurl,thumb')->select()->toArray();
|
||
if(!empty($advertlist)){
|
||
foreach ($advertlist as $k=>$v){
|
||
$advertlist[$k]['thumb'] = $this->getFileUrl($v['thumb']);
|
||
}
|
||
}
|
||
|
||
apiReturn('200', '查询成功',[
|
||
'list'=>$list,
|
||
'advert'=>$advertlist,
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* 发布留言-留言板置顶积分
|
||
* @author loomis<2477365162@qq.com>
|
||
*/
|
||
public function gettoppoints(){
|
||
apiReturn('200', '查询成功',[
|
||
'levemeesga_points'=>config('levemeesga_points'),
|
||
'levemessage_toppoints'=>config('levemessage_toppoints'),
|
||
'levemessage_lookwechnum'=>config('levemessage_lookwechnum'),
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* 发布留言
|
||
* @param $int $type 1男生通道 2女生通道
|
||
* @param string $message 留言信息
|
||
* @param string $thumbs 图片(多个图片请使用“,”进行拼接)
|
||
* @param $int $istop 0默认 1置顶
|
||
* @author loomis<2477365162@qq.com>
|
||
*/
|
||
public function sendmessage(){
|
||
//传参数据
|
||
$data_list = $this->params;
|
||
|
||
if (!isset($data_list['type']) || empty($data_list['type'])) {
|
||
return json(['code' => 500, 'msg' => '请选择留言通道']);
|
||
}
|
||
if (!isset($data_list['message']) || empty($data_list['message'])) {
|
||
return json(['code' => 500, 'msg' => '留言信息不能为空']);
|
||
}
|
||
if (!isset($data_list['thumbs']) || empty($data_list['thumbs'])) {
|
||
return json(['code' => 500, 'msg' => '图片不能为空']);
|
||
}
|
||
if (!isset($data_list['wechat_number']) || empty($data_list['wechat_number'])) {
|
||
return json(['code' => 500, 'msg' => '微信号不能为空']);
|
||
}
|
||
|
||
$message = trim($data_list['message']);
|
||
if($this->illegalcharacters($message)){
|
||
apiReturn('500', '非法参数');
|
||
}
|
||
|
||
$istop = 0;
|
||
if (isset($data_list['istop']) && !empty($data_list['istop'])) {
|
||
$istop = intval($data_list['istop']);
|
||
}
|
||
|
||
//用户积分是否足够
|
||
$userinfo = MemberModel::where('id',$this->user_id)->find();
|
||
|
||
$sendpoints = intval(config('levemeesga_points'));
|
||
if($istop==1){
|
||
$sendpoints = $sendpoints + intval(config('levemessage_toppoints'));
|
||
}
|
||
if($userinfo['balance']<$sendpoints){
|
||
apiReturn('500', '发布失败,积分不足');
|
||
}
|
||
|
||
$res = MemberMessagesModel::create([
|
||
'uid'=>$this->user_id,
|
||
'type'=>intval($data_list['type']),
|
||
'message'=>trim($data_list['message']),
|
||
'thumbs'=>trim($data_list['thumbs']),
|
||
'wechat_number'=>trim($data_list['wechat_number']),
|
||
'istop'=>$istop,
|
||
]);
|
||
|
||
if ($res) {
|
||
|
||
//插入积分记录
|
||
MemberBalanceLogsModel::addGetLog($this->user_id,2,$sendpoints,$res['id'],'发布留言');
|
||
|
||
//扣除积分
|
||
$userinfo->balance = $userinfo->balance - $sendpoints;
|
||
$userinfo->save();
|
||
|
||
apiReturn('200', '留言信息提交成功,等待平台审核');
|
||
} else {
|
||
apiReturn('500', '留言信息提交失败');
|
||
}
|
||
}
|
||
|
||
//用户购买留言板微信号
|
||
public function buywechatnumber(){
|
||
//传参数据
|
||
$data_list = $this->params;
|
||
|
||
if (!isset($data_list['id']) || empty($data_list['id'])) {
|
||
return json(['code' => 500, 'msg' => '留言id不能为空']);
|
||
}
|
||
|
||
$id = intval($data_list['id']);
|
||
$info = MemberMessagesModel::where('id',$id)->find();
|
||
if(empty($info)){
|
||
apiReturn('500', '未查询到留言板信息');
|
||
}
|
||
|
||
//用户是否购买此留言的微信号
|
||
$isbuy = MemberBalanceLogsModel::where(['uid'=>$this->user_id,'orderid'=>$id,'mark'=>'查看留言板微信号'])->count();
|
||
if(!empty($isbuy)){
|
||
apiReturn('500', '您已购买过此留言的微信号');
|
||
}
|
||
|
||
//扣除积分
|
||
$userinfo = MemberModel::where('id',$this->user_id)->find();
|
||
$levemessage_lookwechnum = intval(config('levemessage_lookwechnum'));
|
||
if($userinfo['balance']<$levemessage_lookwechnum){
|
||
apiReturn('500', '购买失败,积分不足');
|
||
}
|
||
|
||
//插入积分记录
|
||
MemberBalanceLogsModel::addGetLog($this->user_id,2,$levemessage_lookwechnum,$id,'购买留言板留言信息微信号');
|
||
|
||
//扣除积分
|
||
$userinfo->balance = $userinfo->balance - $levemessage_lookwechnum;
|
||
$userinfo->save();
|
||
|
||
//反馈积分
|
||
$fankuio_points_num = $levemessage_lookwechnum * (config('levemessage_lookwechnumfan')/100);
|
||
$fankuio_points_num = round($fankuio_points_num);
|
||
if($fankuio_points_num<=0){
|
||
$fankuio_points_num = 1;
|
||
}
|
||
|
||
$message_userinfo = MemberModel::where('id',$info['uid'])->find();
|
||
$message_userinfo->balance = $message_userinfo->balance + $fankuio_points_num;
|
||
$message_userinfo->save();
|
||
|
||
//插入积分记录
|
||
MemberBalanceLogsModel::addGetLog($info['uid'],1,$fankuio_points_num,$id,'留言板微信号反馈积分');
|
||
|
||
apiReturn('200', '购买成功');
|
||
}
|
||
|
||
//获取购买微信好需要消耗的积分数
|
||
public function getbuywxnumjf(){
|
||
apiReturn('200', '查询成功',['jfnum'=>config('levemessage_lookwechnum')]);
|
||
}
|
||
}
|