ywtc_api/application/api/controller/Index.php

494 lines
18 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?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')]);
}
}