* 好店 */ 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']); } } }