* 支付接口 */ namespace app\ais\controller\api\v1; use app\ais\controller\api\Base; use app\ais\model\AisShopOrder; use app\ais\model\AisBank; use app\ais\model\AisShop; use app\ais\model\AisConfig; use app\ais\model\AisCouponUser; use app\ais\model\AisVipUser; use app\common\model\SystemUser; use app\common\facade\WechatPay; use app\common\model\SystemUserLevel; class Shoppay extends Base{ /** * 初始化当前应用是否登录 * @return void */ public function initialize() { parent::initialize(); $this->isUserAuth(); } /** * 读取订单并支付 * @param integer $id 商品ID * @return void */ public function index(){ $param['id'] = $this->request->param('id/d',0); $this->apiSign($param); //查找商品 $item = AisShop::field('id,store_id,coupon_id,name,title,img,points_price,sell_price,vip_price,market_price,end_time') ->where(['is_sale'=>1,'id' => $param['id'],'member_miniapp_id' => $this->member_miniapp_id])->find(); if(empty($item)){ return enjson(403,'没有内容'); } return enjson(200,AisShop::userPayPrice($item,$this->user->id)); } /** * 下单发起支付或重新在支付 */ public function payment(){ if (request()->isPost()) { $param['id'] = $this->request->param('id/d'); $param['telphone'] = $this->request->param('telphone/s'); $param['message'] = $this->request->param('message',''); $param['ucode'] = $this->request->param('ucode',''); $this->apiSign($param); $item = AisShop::where(['is_sale'=>1,'id' => $param['id'],'member_miniapp_id' => $this->member_miniapp_id])->find(); if(empty($item)){ return enjson(403,'商品已经下架'); } if($item->warehouse_num <= 0){ return enjson(403,'商品已售完'); } $is_rest_payment = true; //读取订单 $shop_order = AisShopOrder::where(['member_miniapp_id' => $this->member_miniapp_id,'uid' =>$this->user->id,'shop_id' => $item->id,'is_del' => 0])->find(); $order_no = order_no($this->user->invite_code); if(empty($shop_order)){ $validate = $this->validate($param,'Dopay.shop'); if (true !== $validate) { return enjson(403,$validate); } $sell_price = $item->sell_price; }else{ if($shop_order->paid_at == 1 && $shop_order->status == 0){ return enjson(403,'本商品订单未核销,请先去商家核销'); } if($shop_order->sell_price < $item->sell_price){ $shop_order->is_del = 1; //设置删除 return enjson(403,'订单已失效,请重新下单'); }else{ $shop_order->order_no = $order_no; } $shop_order->save(); $sell_price = $shop_order->amount; $is_rest_payment = false; } //价格计算器 $item = AisShop::userPayPrice($item,$this->user->id); //唤醒微信支付参数 $payparm = [ 'openid' => $this->user->miniapp_uid, 'miniapp_id' => $this->member_miniapp_id, 'name' => $item->name, 'order_no' => $order_no, 'attach' => 'N', 'total_fee' => $item->amount <= 0 ? 1 : $item->amount * 100, 'notify_url' => api(1, 'ais/notify/shop', $this->miniapp_id), ]; if($this->member_miniapp->is_psp){ if(empty($item->store->mch_id)){ $setting = AisConfig::getConfig($this->miniapp_id); if (empty($setting->mchid)) { return enjson(403,'服务商模式下,必须配置默认商户号'); } $payparm['mchid'] = $setting->mchid; }else{ $level = SystemUserLevel::where(['user_id' => $this->user->id,'level' => 1])->find(); if(!empty($level) && $level->parent_id != $item->store->manage_uid){ $payparm['profit_sharing'] = 'Y'; $payparm['attach'] = 'Y'; } if(!empty($param['ucode'])){ $payparm['profit_sharing'] = 'Y'; $payparm['attach'] = 'Y'; } $payparm['mchid'] = $item->store->mch_id; } } $ispay = WechatPay::orderPay($payparm); if ($ispay['code'] == 0) { return enjson(403,$ispay['msg']); } //判断是否创建订单 if($is_rest_payment){ $param['uid'] = $this->user->id; $param['member_miniapp_id'] = $this->member_miniapp_id; $param['store_id'] = $item->store_id; $param['sell_price'] = $item->sell_price; $param['amount'] = $item->amount; $param['points'] = $item->user_point; $param['thrifty'] = $item->thrifty; $param['share_uid'] = SystemUser::isInvite($param['ucode']); $param['shop_cache'] = $item->toArray(); AisShopOrder::createOrder($param,$order_no); } return enjson(200,$ispay['data']); } } }