UserController.php 12.9 KB
<?php
namespace api\home\controller;

use app\portal\controller\PayController;
use cmf\controller\RestBaseController;
use think\Db;
use EasyWeChat\Foundation\Application;
use EasyWeChat\Payment\Order;
use wxapp\pay\WeixinPay;
/**
 * @title 个人信息
 * @description 个人信息相关接口
 */
class UserController extends RestBaseController
{
    /**
     * @title 个人首页
     * @description 个人首页页面
     * @author panhaowen
     * @url /home/user/index
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     */
    public function index()
    {
        $userId=$this->getUserId();
        $data=Db::name('user')->where('id',$userId)->find();
        $this->success('获取信息成功',[$userId,cmf_get_image_preview_url($data['avatar']).$data['user_nickname']]);
    }


    /**
     * @title 我的收入订单
     * @description 收入订单页面
     * @author panhaowen
     * @url /home/user/myOrder
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:status type:int require:1  desc:订单状态(全部=>"",1=>待接单,2=>待完成,,3=>已取消,4=>待提现,5=>已完成)
     */
    public function myOrder()
    {
        $userId=$this->getUserId();
        $param=$this->request->param();
        $where=[];
        $where['p.user_id']=$userId;
        if ($param['status']==2){
            $where['o.status']=['in',[2,6]];
        }else if ($param['status']!=""){
            $where['o.status']=$param['status'];
        }
        $data=Db::name('order')
            ->alias('o')
            ->join('post p','o.post_id=p.id')
            ->join('user u1','p.user_id=u1.id')
            ->where($where)
            ->field('o.*,u1.user_nickname')
            ->select()->each(function ($item) {
                if ($item['to_post_status']!=6){
                    $item['remark'] =null;
                }
                $item['end_time']=date('Y-m-d H:i:s',$item['start_time']+$item['last']*60*60);
                $item['start_time']=date('Y-m-d H:i:s',$item['start_time']);
                return $item;
            });
        $this->success('获取数据成功',$data);
    }

    /**
     * @title 收入订单取消
     * @description 收入订单取消
     * @author panhaowen
     * @url /home/user/cancel
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:id type:int require:1  desc:订单id
     */
    public function cancel()
    {
        $userId=$this->getUserId();
        $param=$this->request->param();
        $order=Db::name('order')->where('id',$param['id'])->find();

        //执行退款逻辑
        $options=[
            'app_id'  => config('wechat_config.app_id'),
            'secret'  => config('wechat_config.secret'),
            'payment' => config('wechat_config.payment'),
        ];
        $app = new Application($options);
        $payment = $app->payment;
        //使用商户订单号退款  PS.其他形式参考文档
        $orderNo = $order['order_sn'];//商户系统内部的订单号(out_trade_no)
        $refundNo = cmf_get_order_sn();//退款单号
        $result = $payment->refund($orderNo, $refundNo, $order['total_price']*100, $order['total_price']*100); // 总金额 100, 退款 80,refundFee可选(为空时全额退款)

        Db::name('refund')->insert(['type'=>1,'order_sn'=>$orderNo,'create_time'=>time(),'money'=>$order['total_price'],'user_id'=>$order['user_id']]);
        Db::name('order')
            ->where('id',$param['id'])
            ->update(['status'=>6,'to_user_status'=>3,'to_post_status'=>3]);
        $this->success('操作成功');
    }

    /**
     * @title 收入订单接单
     * @description 收入订单接单
     * @author panhaowen
     * @url /home/user/accept
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:id type:int require:1  desc:订单id
     */
    public function accept()
    {
        $userId=$this->getUserId();
        $param=$this->request->param();
        Db::name('order')
            ->where('id',$param['id'])
            ->update(['status'=>2,'to_user_status'=>2,'to_post_status'=>2]);
        $this->success('操作成功');
    }


    /**
     * @title 上传凭证
     * @description 上传凭证
     * @author panhaowen
     * @url /home/user/proof
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:id type:int require:1  desc:订单id
     * @param name:proof type:varchar require:1  desc:凭证
     */
    public function proof()
    {
        $userId=$this->getUserId();
        $param=$this->request->param();
        $status=Db::name('order')
            ->where('id',$param['id'])
            ->find()['status'];
        if ($status==2) {
            Db::name('order')
                ->where('id', $param['id'])
                ->update(['status' => 3, 'proof' => $param['proof']]);
        }elseif ($status==4){
            Db::name('order')
                ->where('id', $param['id'])
                ->update(['status' => 5, 'proof' => $param['proof']]);
        }
        $this->success('操作成功');
    }

    /**
     * @title 提现
     * @description 提现
     * @author panhaowen
     * @url /home/user/withdraw
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:id type:int require:1  desc:订单id
     */
    public function withdraw()
    {
        $userId=$this->getUserId();
        $param=$this->request->param();
        $openid=Db::name('third_party_user')->where('user_id',$userId)->find()['openid'];

        $config=Db::name('config')->where('id',1)->find();
        $order=Db::name('order')
            ->where('id',$param['id'])
            ->find();
        if ($order['status']==7&&$order['to_user_status']==4&&$order['to_post_status']==4) {
            //用户分成企业支付
            $options=[
                'app_id'  => config('app_id'),
//                'secret'  => config('wechat_config.secret'),
                'payment' => [
                    'merchant_id'        => '1365052302',
                    'key'                => 'ebfe7fba8f7a0fba3e19efcc547b956d',
                    'cert_path'          => '../wechat/cert/apiclient_cert.pem', // XXX: 绝对路径!!!!
                    'key_path'           => '../wechat/cert/apiclient_key.pem',      // XXX: 绝对路径!!!!
                    // 'device_info'     => '013467007045764',
                    // 'sub_app_id'      => '',
                    // 'sub_merchant_id' => '',
                    // ...
                ],
            ];
            $app = new Application($options);
            $merchantPay = $app->merchant_pay;
            $merchantPayData = [
                'partner_trade_no' => cmf_get_order_sn(), //随机字符串作为订单号,跟红包和支付一个概念。
                'openid' => $openid, //收款人的openid
                'check_name' => 'NO_CHECK',  //文档中有三种校验实名的方法 NO_CHECK OPTION_CHECK FORCE_CHECK
//                    're_user_name'=>'张三',     //OPTION_CHECK FORCE_CHECK 校验实名的时候必须提交
                'amount' => $config['order_percent']*$order['total_price']*100,  //单位为分
                'desc' => '企业付款',
                'spbill_create_ip' => get_client_ip(0,true),  //发起交易的IP地址
            ];
             $re=$merchantPay->send($merchantPayData);
//            $this->success('操作成功',$re);
            Db::name('refund')->insert(['type'=>2,'order_sn'=>$merchantPayData['partner_trade_no'],'create_time'=>time(),'money'=>$config['order_percent']*$order['total_price'],'user_id'=>$order['user_id']]);
            Db::name('order')
                ->where('id', $param['id'])
                ->update(['status' => 8, 'to_post_status' => 5]);

            $this->success('操作成功');
        }else{
            $this->error('操作失败');
        }
    }

    /**
     * @title 支付订单取消
     * @description 支付订单取消
     * @author panhaowen
     * @url /home/user/cancel2
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:id type:int require:1  desc:订单id
     */
    public function cancel2()
    {
        $userId=$this->getUserId();
        $param=$this->request->param();
        Db::name('order')
            ->where('id',$param['id'])
            ->delete();
        $this->success('操作成功');
    }

    /**
     * @title 支付订单付款
     * @description 支付订单付款
     * @author panhaowen
     * @url /home/user/payOrder
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:id type:int require:1  desc:订单id
     */
    public function payOrder()
    {
        $userId=$this->getUserId();
        $param=$this->request->param();
        $openid=Db::name('third_party_user')->where('user_id',$userId)->find()['openid'];
        $order=Db::name('order')->where('id',$param['id'])->find();
        $pay=new WeixinPay();
        $this->success('唤起支付',$pay->pay($openid,$order['order_sn'],'下单支付',$order['total_price']*100,url('portal/pay/notify2')));
    }


    /**
     * @title 联系客服
     * @description 联系客服接口
     * @author panhaowen
     * @url /home/user/kefu
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     */
    public function kefu(){
        $mobile=Db::name('config')->where('id',1)->find()['mobile'];
        $this->success('获取数据成功',$mobile);
    }


    /**
     * @title 我的发布
     * @description 我的发布接口
     * @author panhaowen
     * @url /home/user/myPost
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     */
    public function myPost(){
        $userId=$this->getUserId();
        $data=Db::name('post')
            ->alias('p')
            ->join('user u','p.user_id=u.id')
            ->where(['p.user_id'=>$userId,'p.status'=>2])
            ->field('p.*,u.user_nickname,u.avatar')
            ->find();
        if (!$data){
            $this->error('您暂无发布或审核未通过');
        }
        $data['avatar']=cmf_get_image_preview_url($data['avatar']);
        $data['wx']=cmf_get_image_preview_url($data['wx']);
        $data['skill_id']=explode(',',$data['skill_id']);
        $data['skill']=Db::name('skill')->alias('s')->join('category c','s.category_id=c.id')->where('s.id','in',$data['skill_id'])->field('c.name,s.price')->select();
        $data['thumbnail']=json_decode($data['thumbnail'],true);
        if (!empty($data['thumbnail'])) {
            foreach ($data['thumbnail'] as $k => $v) {
                $data['thumbnail'][$k] = cmf_get_image_preview_url($data['thumbnail'][$k]);
            }
        }
        $this->success('获取信息成功',$data);
    }

    /**
     * @title 技能编辑
     * @description 技能编辑接口
     * @author panhaowen
     * @url /home/user/skillEdit
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     */
    public function skillEdit(){
        $userId=$this->getUserId();
        $data=Db::name('post')
            ->where('user_id',$userId)
            ->find();
        $data['skill_id']=explode(',',$data['skill_id']);
        $skill=Db::name('category')->select()->each(function ($item) {
            $item['skill'] = Db::name('skill') ->where('category_id',$item['id'])->select();
            return $item;
        });
        $this->success('获取信息成功',[$data['skill_id'],$skill]);
    }

    /**
     * @title 我的发布编辑提交
     * @description 我的发布编辑提交接口
     * @author panhaowen
     * @url /home/user/myPostEdit
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:sex type:int require:1  desc:1男,2女
     * @param name:weight type:int require:1  desc:体重
     * @param name:height type:int require:1  desc:身高
     * @param name:skill_id type:int require:1  desc:技能(多个技能用,隔开)
     * @param name:job type:varchar require:1  desc:我的职业
     * @param name:brief type:varchar require:1  desc:个人简介
     * @param name:is_mobile type:int require:1  desc:0不允许通过手机联系,1可以通过手机联系
     * @param name:mobile type:int require:0  desc:手机号
     * @param name:wx type:varchar require:1  desc:微信二维码
     * @param name:is_contact type:int require:1  desc:0不允许非下单以外获取联系方式,1不下单获取联系方式
     * @param name:contact_price type:int require:0  desc:联系价格
     * @param name:thumbnail type:array require:1  desc:相册
     */
    public function myPostEdit(){
        $userId=$this->getUserId();
        $param=$this->request->param();
        $param['update_time']=time();
        $param['status']=1;
        $param['thumbnail']=json_encode(explode(',',$param['thumbnail']));
        Db::name('post')->where('user_id',$userId)->update($param);
        $this->success('操作成功');
    }

}