$out_trade_no, 'buyer_uid' => $this->appInfo['id'], ]; $order_list = model('supply_order')->getList($condition, $field); if (empty($order_list)) { return error(-1, '订单不存在或交易已关闭'); } $pay_status = $order_list[0]['pay_status']; if ($pay_status == 1) { return error(-1, '订单已支付'); } $balance_money = array_sum(array_column($order_list, 'goods_money')); $data = [ 'outTradeNo' => $out_trade_no, 'orderMoney' => $balance_money, 'QrPayUrl' => '', 'onlinePayUrl' => addon_url('supply://shop/pay/pay', ['out_trade_no' => $out_trade_no]), ]; return $data; } /*** * 发起余额扣款 * @param $data * @return void */ public function pbalancePay() { $out_trade_no = input('outTradeNo'); if (empty($out_trade_no)) { return error(-1, '订单号不能为空'); } $payType = input('payType', 'balance'); $condition = [ 'out_trade_no' => $out_trade_no, 'buyer_uid' => $this->appInfo['id'], ]; model('supply_account')->startTrans(); try { if ($payType == 'balance') { $field = 'site_id,order_id,goods_money,buyer_shop_id,pay_status'; $order_list = model('supply_order')->getList($condition, $field); if (empty($order_list)) { return error(-1, '订单不存在或交易已关闭'); } $buyer_shop_id = $order_list[0]['buyer_shop_id']; $pay_status = $order_list[0]['pay_status']; if ($pay_status == 1) { return error(-1, '订单已支付'); } $balance_money = array_sum(array_column($order_list, 'goods_money')); if ($this->appInfo['usable_price'] < $balance_money) { return error(-1, '余额不足'); } $member_account_model = new SupplyAccount(); $order_model = new OrderCommon(); $result = $member_account_model->AddAppsAccount($buyer_shop_id, $this->appInfo['id'], 'usable_price', -$balance_money, 'buy_order', $out_trade_no, $out_trade_no . '订单消费扣除'); $isPay = $result['data']; if ($result['code'] == 0) { $res = $order_model->orderOnlinePay(['out_trade_no' => $out_trade_no, 'pay_type' => 'BALANCE']); } model('supply_account')->commit(); $data = [ 'code' => 0, 'outTradeNo' => $out_trade_no, 'isPay' => 1, 'msg' => '扣款成功', ]; return $data; } else if ($payType == 'withhold') { return error(-1, '暂未开放'); } } catch (\Exception $e) { model('supply_account')->rollback(); return error(-1, $e->getMessage()); } } }