| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 | <?php/** * @copyright   Copyright (c) 2017 https://www.sapixx.com All rights reserved. * @license     Licensed (http://www.apache.org/licenses/LICENSE-2.0). * @author      pillar<ltmn@qq.com> * 好店 */namespace app\allwin\controller\api\v4;use app\allwin\controller\api\Base;use app\allwin\model\AllwinStore;use app\allwin\model\AllwinStoreChain;use app\allwin\model\Coupon;use app\allwin\model\CouponUser;use app\allwin\model\Order;use app\allwin\model\MchId;use app\allwin\model\AllwinConfig;use app\common\facade\WechatPay;use app\common\model\SystemMemberForm;class Payment extends Base{    /**     * 初始化当前应用管理员是不是联盟城市账户     * @return void     */    public function initialize() {        parent::initialize();        $this->isUserAuth();    }    /**     * 买单付款     * @param integer 读取ID     * @return json     */    public function index(){        $param['store_id'] = $this->request->param('store_id/d',0);        $param['code_id']  = $this->request->param('code_id/s',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'],'签名验证失败');        }        if($param['code_id']){            $where['code_id'] = $param['code_id'];        }else{            $where['id']      = $param['store_id'];        }        $where['member_miniapp_id'] = $this->miniapp_id;        $where['is_lock']           = 0;        $store = AllwinStore::where($where)->field('id,name,tips,quan_id')->find();        if(empty($store)){            if($param['code_id']){                $chain_where['member_miniapp_id'] = $this->miniapp_id;                $chain_where['code_id']           = $param['code_id'];                $chain = AllwinStoreChain::with(['store' => function($query) {                    $query->field('id,name,tips,quan_id');                }])->where($chain_where)->find();                if(empty($chain->store)){                    return enjson(301,'未找到付款好店1',['url' =>'/pages/index']);                }                $store = $chain->store;            }else{                return enjson(301,'未找到付款好店',['url' =>'/pages/index']);            }        }        return enjson(200,'成功',$store);    }     /**     * 用户商家已领取的所有有效优惠券     * @param integer $store_id     * @param [type] $price     * @return void     */    public function userCoupon(int $store_id = 0,$price){        $param['store_id'] = $this->request->param('store_id/d',0);        $param['price']    = $this->request->param('price/f',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'],'签名验证失败');        }        //读取用户优惠券        $condition[] = ['member_miniapp_id','=',$this->miniapp_id];        $condition[] = ['is_end','=',0];                 //结束        $condition[] = ['user_size','>',0];              //大小        $condition[] = ['store_id','=',$store_id];       //好店        $condition[] = ['uid','=',$this->user->id];      //用户        if($param['price'] > 0){            $condition[] = ['howmuch','<=',$param['price']]; //输入金额        }        $coupon  = CouponUser::where($condition)->field('id,name,size,user_size,tips,types,price,discount,weekday,create_time,ontypes')->select();        if($coupon->isEmpty()){            return enjson(204);        }        //判断是否可用        foreach ($coupon as $val){            if(strpos($val['weekday'],date('w')) && (($val['ontypes'] == 1 && strtotime(date('Y-m-d',$val['create_time']) . ' 23:59:59') < strtotime("now")) || $val['ontypes'] == 0)){                $val['state'] = 0;            }else{                $val['state'] = 1;            }        }        return enjson(200,'成功',$coupon);    }    /**     * 读取管理商家和买单的优惠券     **/    public function Coupon(){        $param['store_id'] = $this->request->param('store_id/d',0);        $param['quan_id']  = $this->request->param('quan_id/d',0);        $param['price']    = $this->request->param('price/f',0);        $param['page']     = $this->request->param('page/d',1);        $param['signkey']  = $this->request->param('signkey');        $param['sign']     = $this->request->param('sign');        $rel = $this->apiSign($param);        if($rel['code'] != 200){            return enjson($rel['code'],'签名验证失败');        }        $condition   = [];        $condition[] = ['member_miniapp_id','=',$this->miniapp_id];        $condition[] = ['is_lock','=',0];        $condition[] = ['is_end','=',0];        $condition[] = ['is_check','=',1];        $condition[] = ['num','>',0];        $condition[] = ['endtime','>',time()];        if($param['price'] > 0){            $condition[] = ['howmuch','<=',$param['price']]; //输入金额        }        //用户的优惠券        $ids = CouponUser::userCouponIds($this->user->id);        if (!empty($ids)) {            $condition[] = ['id','notin',$ids];        }        //读取自己好店优惠券        $store_coupon = [];        if($param['store_id'] > 0 && $param['page'] == 1){            $storeCoupon = Coupon::where($condition)->where('store_id','=',$param['store_id'])->field('id,name,size,tips,types,price,pay_price,discount,theme')->order('size desc,id desc')->select();            if(!$storeCoupon->isEmpty()) {                $store_coupon = $storeCoupon->toArray();            }        }        $coupon = [];        $condition[] = ['store_id','<>',$param['store_id']];        if($param['quan_id']){            $store = AllwinStore::where(['quan_id' => $param['quan_id']])->column('id');            if(!empty($store)){                $condition[] = ['store_id','in',$store];            }        }        $rel = Coupon::where($condition)->field('id,name,size,tips,types,price,pay_price,discount,theme')->order('is_top desc,sort desc,size desc')->paginate(6,true);        if (!$rel->isEmpty()) {            $coupon = $rel->toArray()['data'];        }        if(!empty($store_coupon)){            $coupon = array_merge_recursive($store_coupon,$coupon);        }        if(empty($coupon)){            return enjson(204);        }        return enjson(200,'成功',$coupon);    }  /**     * 微信给商家支付     * @param string $no     * @return void     */    public function wechat(){        if (request()->isPost()) {            $rule = [                'member_miniapp_id' => $this->miniapp_id,                'store_id'          => $this->request->param('store_id/d'),                'user_couponr_id'   => $this->request->param('user_couponr_id/d',0),                'coupon_ids'        => $this->request->param('coupon_ids/a'),                'money'             => $this->request->param('money/f'),                'amount'            => $this->request->param('amount/f'),                'code_id'           => $this->request->param('code_id/d'),                'ucode'             => $this->request->param('ucode/s'),                'uid'               => $this->user->id,            ];            $validate = $this->validate($rule, 'Dopay.gopay');            if (true !== $validate) {                return json(['code'=>403,'msg'=>$validate]);            }            //判断好店            $store = AllwinStore::where(['member_miniapp_id' => $this->miniapp_id,'id' => $rule['store_id'],'is_lock' => 0])->field('id,name,state,manage_uid,mch_id')->find();            if(empty($store)){                return json(['code'=>403,'msg'=>'未找到好店']);            }            if(empty($store->manage_uid)){                return json(['code'=>403,'msg'=>'未设置老板']);            }            if($store->state == 0){                return json(['code'=>403,'msg'=>'好店未营业']);            }            //计算付款金额            $amount = Order::countPrice($rule);            if($amount['code'] == 403){                return json($amount);            }            $amount = $amount['data'];            //创建订单            $order_no = $this->user->invite_code.order_no();            //唤醒微信支付参数            $payparm = [                'openid'     => $this->user->miniapp_uid,                'miniapp_id' => $this->miniapp_id,                'name'       => $store->name,                'order_no'   => $order_no,                'total_fee'  => $amount['order_amount']*100,                'notify_url' => api(4,'allwin/paymentnotify/index',$this->miniapp_id),            ];            //读取配置            $setting = AllwinConfig::getConfig($this->miniapp_id);            if($setting->is_psp == 1){ //服务商模式                if($store->mch_id){                    $default_mchid = MchId::getMch($store->mch_id);   //商户的商户号                }else{                    $default_mchid = MchId::getMch(0, $this->miniapp_id);  //默认收款账户                }                if (empty($default_mchid)) {                    return json(['code'=>403,'msg'=>'未找到商户号']);                }                $payparm['mchid'] = $default_mchid->mchid;                //分账参数                switch ($setting->is_fees_types){                    case 1:                        if($rule['user_couponr_id']){                            $payparm['profit_sharing'] = $setting->is_wechat_profitsharing == 1 || $payparm['profit_sharing'] ? 'Y' : 'N';                        }else{                            $payparm['profit_sharing'] = 'N';                        }                        break;                    case 2:                        $payparm['profit_sharing'] = 'N';                        break;                    default:                        $payparm['profit_sharing'] = $setting->is_wechat_profitsharing == 1 ? 'Y' : 'N';                        break;                }            }            $ispay = WechatPay::orderPay($payparm);            if($ispay['code'] == 0){                return json(['code'=>403,'msg'=>$ispay['msg']]);            }            //添加订单记录            $rule['order_no']        = $order_no;            $rule['coupon_price']    = $amount['coupon_user_price'];  //优惠金额            $rule['store_amount']    = $amount['store_amount'];       //好店应收            $rule['platform_amount'] = $amount['platform_amount'];    //领优惠券金额            $rule['order_amount']    = $amount['order_amount'];       //实支付金额            $rule['user_amount']     = $amount['user_amount'];        //输入金额            $rel = Order::addOrder($rule);            if(!$rel){                return json(['code'=>403,'msg'=>'订单创建失败']);            }            //把支付packageID添加到数据库            $package = $ispay['data']['package'];            SystemMemberForm::addForm($this->miniapp_id,$this->user->id,substr($package,10));            $ispay['data']['url'] = '/pages/store/views?store_id='.$rule['store_id'];            return enjson(200,'成功',$ispay['data']);         }    }}
 |