['app', 'mini']], [['pay_type'], 'in', 'range' => [1, 2, 3, 4, COrder::PAY_TYPE_WX_B2B, COrder::PAY_TYPE_ADAPAY_WX, COrder::PAY_TYPE_ADAPAY_ALIPAY]], // 'WECHAT_PAY', 'HUODAO_PAY', 'BALANCE_PAY' 'ALIPAY', [['form_id', 'order_id_list', '_from'], 'string'], ['is_combine', 'default', 'value' => 0], [['parent_user_id', 'condition', 'order_id', 'is_combine'], 'integer'], [['session_key'], 'safe'], ]; } public function search() { $this->wechatPay = \Yii::$app->controller->wechatPay; if (!$this->validate()) { return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0], ]; } $this->user->money = doubleval($this->user->money); if ($this->order_id_list) { $order_id_list = json_decode($this->order_id_list, true); if (is_array($order_id_list) && count($order_id_list) == 1) { $this->order_id = $order_id_list[0]; $this->order_id_list = ''; } } $t = \Yii::$app->db->beginTransaction(); $this->order = Order::findOne([ 'store_id' => $this->store_id, 'id' => $this->order_id, ]); if (!$this->order) { $t->rollBack(); return [ 'code' => 1, 'msg' => '订单不存在', ]; } if ($this->order->is_delete == 1 || $this->order->trade_status == Order::ORDER_FLOW_CANCEL) { $t->rollBack(); return [ 'code' => 1, 'msg' => '订单已取消', ]; } // 存储parent_id CommonOrder::saveParentId($this->parent_user_id); $goods_names = ''; $goods_list = OrderDetail::find()->alias('od')->leftJoin(['g' => Goods::tableName()], 'g.id=od.goods_id')->where(['od.order_id' => $this->order->id, 'od.is_delete' => 0, ])->select('g.name,g.verify_card_id')->asArray()->all(); foreach ($goods_list as $goods) { $goods_names .= $goods['name'] . ';'; } $goods_names = mb_substr($goods_names, 0, 32, 'utf-8'); $this->setReturnData($this->order); $this->order->order_union_id = 0; // 供应链系统下单时是否使用平台商户号,1使用,0未使用 if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($this->store_id)) { $this->order->is_use_platform_mch = 1; } if (!$this->order->save()) { $t->rollBack(); return [ 'code' => 1, 'msg' => '订单保存失败' ]; } // 余额抵扣支付 $balance_price = 0; if ($this->is_combine) { if ($this->user->money >= $this->order->pay_price) { $this->pay_type = 3; } else { $balance_price = $this->user->money; $this->order->combine_money = $this->user->money; $this->order->is_combine_pay = 1; $this->order->save(); } } else { $this->order->combine_money = 0; $this->order->is_combine_pay = 0; $this->order->save(); } if ($this->pay_type == 1) { if ($this->order->pay_price == 0) { $this->order->is_pay = 1; $this->order->pay_type = 1; if ($this->pay_type == 4) { $this->order->pay_type = 4; } $this->order->pay_time = time(); if (!$this->order->save()) { $t->rollBack(); return [ 'code' => 1, 'msg' => '支付失败' ]; } // 支付完成后,相关操作 $form = new OrderComplete(); $form->order_id = $this->order->id; $form->order_type = 6; $form->store_id = get_store_id(); $form->notify(); $t->commit(); return [ 'code' => 0, 'msg' => '0元支付' ]; } if ($this->_from == self::PAY_FROM_APP) { if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming(get_store_id()) && self_mini() === false) { $result = WechatPay::orderUnify($this->order, OrderNo::ORDER_SCAN_CODE_PAY, $goods_names, 0, true, $balance_price); } else { if (is_profit_pay()) { $result = WechatNewPay::orderUnify($this->order, OrderNo::ORDER_SCAN_CODE_PAY, $goods_names, 0, true, $balance_price); } else { $result = WechatPay::orderUnify($this->order, OrderNo::ORDER_SCAN_CODE_PAY, $goods_names, 0, true, $balance_price); } } } else { if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming(get_store_id()) && self_mini() === false) { $result = WechatPay::orderUnify($this->order, OrderNo::ORDER_SCAN_CODE_PAY, $goods_names, 0, false, $balance_price); } else { if (is_profit_pay()) { $result = WechatNewPay::orderUnify($this->order, OrderNo::ORDER_SCAN_CODE_PAY, $goods_names, 0, false, $balance_price); } else { $result = WechatPay::orderUnify($this->order, OrderNo::ORDER_SCAN_CODE_PAY, $goods_names, 0, false, $balance_price); } } } if (isset($result['code']) && $result['code'] == 1) { return $result; } // CloudPrint::doPrint($this->order->id, 0, $this->order->store_id); $t->commit(); return [ 'code' => 0, 'msg' => 'success', 'data' => (object)$result['data'], 'res' => $result['res'], 'body' => $goods_names ]; } elseif (in_array($this->pay_type, [COrder::PAY_TYPE_ADAPAY_WX, COrder::PAY_TYPE_ADAPAY_ALIPAY])) { $result = Adapay::create($this->pay_type, $this->order, OrderNo::ORDER_SCAN_CODE_PAY, $goods_names, 0, false, $balance_price); $t->commit(); return $result; } elseif (in_array($this->pay_type, [COrder::PAY_TYPE_WX_B2B])) { $result = \app\modules\admin\models\UserAuditForm::pay($this->session_key, $this->order, OrderNo::ORDER_SCAN_CODE_PAY, $goods_names); $t->commit(); return $result; } else if ($this->pay_type == 4) { if (is_profit_pay('ali')) { $result = AlipayProfit::mini($this->order, $goods_names, $this->user, '', '', false, 0, $balance_price); } else { $result = Alipay::mini($this->order, $goods_names, $this->user, '', '', 0, $balance_price); } if (isset($result['code']) && $result['code'] == 1) { return $result; } $t->commit(); return [ 'code' => 0, 'msg' => 'success', 'data' => $result['data']['trade_no'], 'body' => $goods_names ]; } else if ($this->pay_type == 3) { $order = $this->order; $user = User::findOne(['id' => $order->user_id]); if ($user->money < $order->pay_price) { $t->rollBack(); return [ 'code' => 1, 'msg' => '支付失败,余额不足', ]; } // $user->money -= floatval($order->pay_price); $res = AccountLog::saveLog($user->id, floatval($order->pay_price), AccountLog::TYPE_BALANCE, AccountLog::LOG_TYPE_EXPEND, AccountLog::TYPE_SCAN_CODE_PAY, $order->id, "当面付余额支付,订单号为:{$order->order_no}。"); if (!$res) { $t->rollBack(); return [ 'code' => 1, 'msg' => '支付失败' ]; } $order->is_pay = 1; $order->pay_type = 3; $order->trade_status = \app\models\Order::ORDER_FLOW_CONFIRM; $order->pay_time = time(); if (!$order->save()) { $t->rollBack(); return [ 'code' => 1, 'msg' => '支付失败' ]; } // 支付完成后,相关操作 $form = new OrderComplete(); $form->order_id = $this->order->id; $form->order_type = 6; $form->store_id = $this->order->store_id; $form->notify(); $t->commit(); return [ 'code' => 0, 'msg' => '支付成功' ]; } else { return [ 'code' => 1, 'msg' => '支付方式有误' ]; } } /** * 设置佣金 * @param Order $order * @return mixed */ private function setReturnData($order) { $form = new ShareMoneyForm(); $form->order = $order; return $form->setScanCodePayData(); } }