[1, 4, Order::PAY_TYPE_WX_B2B, Order::PAY_TYPE_ADAPAY_WX, Order::PAY_TYPE_ADAPAY_ALIPAY, Order::PAY_TYPE_ADAPAY_QUICKPAY_FRONTPAY, Order::PAY_TYPE_HUIFU_V2_JSPAY_WX]], [['_from'], 'in', 'range' => ['app', 'mini', 'h5', 'official']], [['session_key'], 'safe'], ]; } public function save() { $this->wechatPay = self::getWechatPay(); if (!$this->validate()) { return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0], ]; } $order = new ReOrder(); $order->store_id = $this->store_id; $order->user_id = $this->user->id; if ($this->send_price != 0 || $this->send_integral != 0) { $exists = Recharge::find()->where([ 'store_id' => $this->store_id, 'pay_price' => $this->pay_price, 'send_price' => $this->send_price, 'send_integral' => $this->send_integral, 'is_delete' => 0 ])->exists(); if (!$exists) { return [ 'code' => 1, 'msg' => '充值失败,请重新充值' ]; } } // TODO 判断用户等级是否可以充值 if (!empty($this->assign_member)) { $condition = json_decode($this->assign_member, true); $numeric_array = array_map('intval', $condition); $levelType = Level::find()->where(['store_id' => get_store_id(), 'is_delete' => Level::NOT_DELETE])->andWhere(['level' => $numeric_array])->asArray()->all(); $user = User::findOne(get_user_id()); if (in_array(0, $numeric_array)) { } else if (isset($user->level) && in_array($user->level, $numeric_array)) { } else { $names = ArrayHelper::getColumn( $levelType, function ($item) { return is_array($item['name']) ? implode(', ', $item['name']) : $item['name']; } ); $levelNames = implode(', ', $names); if (!empty($levelNames)) { return [ 'code' => 1, 'msg' => "仅限 {$levelNames} 购买" ]; } } } // 是否是平台小程序订单 if (is_platform()) { $order->is_platform = 1; } $order->pay_price = $this->pay_price; $order->send_price = $this->send_price; $order->send_integral = $this->send_integral; $order->order_no = OrderNo::getOrderNo(OrderNo::ORDER_RECHARGE); $order->is_pay = 0; $order->pay_type = $this->pay_type; $order->is_delete = 0; $order->created_at = time(); if (!empty($this->level_up) && !empty($this->recharge_id)) { $order->recharge_id = $this->recharge_id; $order->level_up = $this->level_up; } // 供应链系统下单时是否使用平台商户号,1使用,0未使用 // if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($this->store_id)) { // $order->is_use_platform_mch = 1; // } if ($order->save()) { $this->order = $order; $body = "充值"; if ($this->pay_type == 1) { if ($this->_from == OrderPayDataForm::PAY_FROM_APP) { $order->order_origin = Order::ORDER_SOURCE_APP; $order->save(); if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($this->store_id) && self_mini() === false) { $result = WechatPay::orderUnify($order,OrderNo::ORDER_RECHARGE, $body, 0, true); } else { if (is_profit_pay()) { $result = WechatNewPay::orderUnify($order,OrderNo::ORDER_RECHARGE, $body, 0, true); } else { $result = WechatPay::orderUnify($order,OrderNo::ORDER_RECHARGE, $body, 0, true); } } } else { $is_h5 = false; if (is_h5()) { $is_h5 = true; } $is_mp = false; $order->order_origin = $is_h5 ? Order::ORDER_SOURCE_WEB : Order::ORDER_SOURCE_MINI; if ($this->_from == OrderPayDataForm::PAY_FROM_OFFICIAL) { $order->order_origin = Order::ORDER_SOURCE_MP; $is_h5 = false; $is_mp = true; } $order->save(); if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($this->store_id) && self_mini() === false) { $result = WechatPay::orderUnify($order,OrderNo::ORDER_RECHARGE, $body, 0, false, 0, $is_h5, $is_mp); } else { if (is_profit_pay()) { $result = WechatNewPay::orderUnify($order,OrderNo::ORDER_RECHARGE, $body, 0, false, 0, $is_h5, $is_mp); } else { $result = WechatPay::orderUnify($order,OrderNo::ORDER_RECHARGE, $body, 0, false, 0, $is_h5, $is_mp); } } } if (isset($result['code']) && $result['code'] == 1) { return $result; } return [ 'code' => 0, 'msg' => 'success', 'data' => (object)$result['data'], 'res' => $result['res'], 'body' => $body, ]; } elseif (in_array($this->pay_type, [Order::PAY_TYPE_WX_B2B])) { $result = \app\modules\admin\models\UserAuditForm::pay($this->session_key, $order,OrderNo::ORDER_RECHARGE, $body); return $result; } elseif (in_array($this->pay_type, [Order::PAY_TYPE_ADAPAY_WX, Order::PAY_TYPE_ADAPAY_ALIPAY])) { $result = Adapay::create($this->pay_type, $order,OrderNo::ORDER_RECHARGE, $body, 0, false, 0, 0, is_h5()); return $result; } elseif (in_array($this->pay_type, [Order::PAY_TYPE_ADAPAY_QUICKPAY_FRONTPAY, Order::PAY_TYPE_HUIFU_V2_JSPAY_WX])) { $result = \app\utils\Adapay\AdapayV2::create($this->pay_type, $order,OrderNo::ORDER_RECHARGE, $body, 0, false, 0, 0, is_h5()); return $result; }elseif ($this->pay_type == 4) { $user = get_user(); if ($this->_from == 'mini') { if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($this->order->store_id) && self_mini() === false) { $result = Alipay::mini($this->order, '充值', $user, '', '', 0, 0, 0); } else { if (is_profit_pay('ali')) { $result = AlipayProfit::mini($order, '充值', $user, '', '', false, 0, 0, 0); } else { $result = Alipay::mini($order, '充值', $user, '', '', 0, 0, 0); } } if (isset($result['code']) && $result['code'] == 1) { return $result; } if (isset($result['data'])) { $result['data'] = array_merge($result['data'], [ 'is_finish' => 1 ]); } return $result; } else if ($this->_from == 'h5') { if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($this->order->store_id, 'alipay', is_h5())) { $result = Alipay::wap($this->order,'充值', 'user/balance/recharge'); } else { if (is_profit_pay()) { $result = AlipayProfit::wap($this->order, '充值', 'user/balance/recharge'); } else { $result = Alipay::wap($this->order, '充值', 'user/balance/recharge'); } } if($result['code']){ return $result; } return [ 'code' => 0, 'msg' => 'success', 'data' => $result ]; } else { if (is_profit_pay('ali')) { $result = AlipayProfit::app($this->order, '充值', $user, '', 0); } else { $result = Alipay::app($this->order, '充值', $user, '', 0); } if (isset($result['code']) && $result['code'] == 1) { return $result; } return [ 'code' => 0, 'msg' => 'success', 'data' => $result, ]; } } } else { return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0], ]; } } }