request->isAjax) { if (\Yii::$app->request->isGet) { $settings = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_HUIFU_PAY, 'basic'); // $wechat = \Yii::$app->services->setting->mall->get($this->mall_id, 'wechat'); if (empty($settings)) $settings = null; if (!empty($settings['huifupay_trade_channel'])) $settings['huifupay_trade_channel'] = json_decode($settings['huifupay_trade_channel'], true); if (!empty($settings['huifupay_ledger_list'])) $settings['huifupay_ledger_list'] = json_decode($settings['huifupay_ledger_list'], true); if (!empty($settings['huifupay_merchant'])) $settings['huifupay_merchant'] = json_decode($settings['huifupay_merchant'], true); $tactics_pay_setting = []; if (MallAddons::isInstall($this->mall_id, 'TacticsPay')) { $tactics_pay_setting = [ 'is_installed' => 1, 'more_merchant_field' => HuifuPayEnum::getMoreMerchantField() ]; } return $this->success('success', ['settings' => $settings, 'tactics_pay_setting' => $tactics_pay_setting]); } else { $post = \Yii::$app->request->post(); $rules = [ [['huifupay_status', 'huifupay_sys_id','huifupay_product_id','huifupay_huifu_id', 'huifupay_trade_channel', 'huifupay_mp_wx_open','huifupay_mp_wx_open_jhzs', 'huifupay_wechat_open', 'huifupay_wechat_h5_open','huifupay_wechat_app_open', 'huifupay_alipay_h5_open', 'huifupay_fast_pay_status','huifupay_big_pay_status','huifupay_big_trade_name','huifupay_balance_pay_status', 'huifupay_private_key', 'huifupay_public_key', 'huifupay_wechat_trade_name', 'huifupay_ledger_status', 'huifupay_alipay_trade_name', 'huifupay_fastpay_trade_name'], 'required'], [['huifupay_status', 'huifupay_mp_wx_open','huifupay_mp_wx_open_jhzs', 'huifupay_wechat_open', 'huifupay_wechat_h5_open','huifupay_wechat_app_open', 'huifupay_alipay_h5_open', 'huifupay_fast_pay_status','huifupay_big_pay_status','huifupay_ledger_status', 'huifupay_more_merchant_enable'], 'integer'], [['huifupay_status', 'huifupay_mp_wx_open','huifupay_mp_wx_open_jhzs', 'huifupay_wechat_open', 'huifupay_wechat_h5_open', 'huifupay_alipay_h5_open','huifupay_wechat_app_open','huifupay_balance_pay_status', 'huifupay_fast_pay_status','huifupay_big_pay_status','huifupay_ledger_status'], 'default', 'value' => 0], [['huifupay_wechat_trade_name', 'huifupay_alipay_trade_name', 'huifupay_fastpay_trade_name','huifupay_big_trade_name','huifupay_balance_trade_name'], 'string', 'max' => 10], [['huifupay_ledger_list', 'huifupay_merchant'], 'safe'] ]; if (empty($post['huifupay_trade_channel']) || !is_array($post['huifupay_trade_channel'])) return $this->error('汇付支付渠道填写错误'); $res = \Yii::$app->services->validate->validate($post, $rules); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); // 组合多商户配置默认信息 $more_field = array_column(HuifuPayEnum::getMoreMerchantField(), 'key'); $sys_merchant_id = PayTypeEnum::HUIFUPAY . str_repeat('0', 12 - strlen(PayTypeEnum::HUIFUPAY)); !isset($post['huifupay_merchant']) && $post['huifupay_merchant'] = []; $temp_merchant = array_column($post['huifupay_merchant'], null, 'merchant_id'); if (isset($temp_merchant[$sys_merchant_id])) { foreach ($more_field as $key) { $temp_merchant[$sys_merchant_id][$key] = $post[$key] ?? ''; } $temp_merchant[$sys_merchant_id]['is_sys'] = true; $post['huifupay_merchant'] = array_values($temp_merchant); }else { $field_row = ['merchant_id' => $sys_merchant_id]; foreach ($more_field as $key) { $field_row[$key] = $post[$key] ?? ''; } $field_row['is_sys'] = true; array_unshift($post['huifupay_merchant'], $field_row); } $configs = [ 'basic' => $post, ]; // dd($configs); \Yii::$app->services->setting->addons->set($this->mall_id, AddonsEnum::ADDONS_NAME_HUIFU_PAY, $configs); // 支付配置同时写入商城配置 $huifupay_configs = [ 'status' => $post['huifupay_status'], 'sys_id' => $post['huifupay_sys_id'], 'product_id' => $post['product_id'], 'huifu_id' => $post['huifu_id'], 'private_key' => $post['huifupay_private_key'], 'public_key' => $post['huifupay_public_key'], ]; $data = [ 'pay' => [ 'huifupay' => json_encode($huifupay_configs), ], ]; \Yii::$app->services->setting->mall->set($this->mall_id, $data); } return $this->success('保存成功', $post); } return $this->render('index'); } public function actionBasicSetting() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isGet) { $group = \Yii::$app->request->get('group'); if (empty($group) || !in_array($group, ['basic'])) return $this->error('参数错误'); $settings = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_HUIFU_PAY, $group); return $this->success('success', ['settings' => $settings]); } else { $post = \Yii::$app->request->post(); $group = $post['group'] ?? ''; if (empty($group) || !in_array($group, ['basic']) || empty($post[$group])) return $this->error('参数错误'); $rules = ['basic' => [ [['huifupay_status', 'huifupay_sys_id','huifupay_product_id','huifupay_huifu_id', 'huifupay_trade_channel', 'huifupay_mp_wx_open', 'huifupay_wechat_open', 'huifupay_wechat_h5_open', 'huifupay_alipay_h5_open', 'huifupay_ledger_status', 'huifupay_fast_pay_status','huifupay_big_pay_status','huifupay_big_trade_name', 'huifupay_private_key', 'huifupay_public_key', 'huifupay_wechat_trade_name', 'huifupay_balance_pay_status','huifupay_balance_trade_name', 'huifupay_alipay_trade_name', 'huifupay_fastpay_trade_name'], 'required'], [['huifupay_status', 'huifupay_mp_wx_open', 'huifupay_wechat_open', 'huifupay_wechat_h5_open', 'huifupay_wechat_app_open','huifupay_alipay_h5_open', 'huifupay_fast_pay_status','huifupay_big_pay_status','huifupay_ledger_status'], 'integer'], [['huifupay_status', 'huifupay_mp_wx_open', 'huifupay_wechat_open', 'huifupay_wechat_h5_open', 'huifupay_alipay_h5_open', 'huifupay_big_trade_name','huifupay_big_pay_status','huifupay_ledger_status','huifupay_balance_pay_status','huifupay_wechat_app_open'], 'default', 'value' => 0], [['huifupay_wechat_trade_name', 'huifupay_alipay_trade_name', 'huifupay_fastpay_trade_name','huifupay_big_trade_name'], 'string', 'max' => 10], [['huifupay_ledger_list'], 'safe'] ]]; $res = \Yii::$app->services->validate->validate($post[$group], $rules[$group]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); // dd($post); $configs = [ $group => $post[$group], ]; \Yii::$app->services->setting->addons->set($this->mall_id, AddonsEnum::ADDONS_NAME_HUIFU_PAY, $configs); // 支付配置同时写入商城配置 if ('basic' == $group) { // huifupay $huifupay_configs = [ 'status' => $post['basic']['huifupay_status'], 'sys_id' => $post['basic']['huifupay_sys_id'], 'product_id' => $post['basic']['product_id'], 'huifu_id' => $post['basic']['huifu_id'], 'private_key' => $post['basic']['huifupay_private_key'], 'public_key' => $post['basic']['huifupay_public_key'], ]; $data = [ 'pay' => [ 'huifupay' => json_encode($huifupay_configs), ], ]; \Yii::$app->services->setting->mall->set($this->mall_id, $data); } return $this->success('保存成功'); } } return $this->render('/config/basic-setting'); } public function actionFastpaySetting() { return $this->render('/config/fastpay-setting'); } public function actionPayRecord() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isGet) { $order_no = \Yii::$app->request->get('order_no'); $start_time = \Yii::$app->request->get('start_time'); $end_time = \Yii::$app->request->get('end_time'); $user_id = \Yii::$app->request->get('user_id'); $user_keyword = \Yii::$app->request->get('user_keyword'); $out_trade_no = \Yii::$app->request->get('out_trade_no'); $pay_type = \Yii::$app->request->get('pay_type'); $page = \Yii::$app->request->get('page', 1); $limit = \Yii::$app->request->get('limit', $this->pageSize); $wheres[] = ['mall_id' => $this->mall_id]; if (empty($pay_type)) { $wheres[] = ['pay_type' => [18]]; } else { if (!in_array($pay_type, [18])) { return $this->error('参数错误'); } $wheres[] = ['pay_type' => $pay_type]; } if (!empty($start_time)) $wheres[] = ['>=', 'created_at', strtotime($start_time . '00:00:00')]; if (!empty($end_time)) $wheres[] = ['<=', 'created_at', strtotime($end_time . ' 23:59:59')]; if (!empty($out_trade_no)) $wheres[] = ['like', 'out_trade_no', $out_trade_no]; if (!empty($user_id)) $wheres[] = ['user_id' => $user_id]; if (!empty($user_keyword)) { $users = User::find() ->select('id,nickname,mobile,avatar_url') ->where(['or', ['like', 'nickname', $user_keyword], ['like', 'mobile', $user_keyword]]) ->asArray() ->indexBy('id') ->all(); $user_ids = array_column($users, 'id'); $wheres[] = ['user_id' => $user_ids]; } $trade_ids = []; if (!empty($order_no)) { $payment_order_logs = PaymentTradeOrder::find() ->select('trade_id,order_no') ->where(['order_no' => $order_no]) ->asArray() ->indexBy('trade_id') ->all(); $trade_ids = array_column($payment_order_logs, 'trade_id'); $wheres[] = ['id' => $trade_ids]; } $params = [ 'select' => 'id,mall_id,user_id,out_trade_no,pay_fee as amount,is_pay,pay_type,created_at,updated_at', 'where' => $wheres, 'order' => 'created_at desc,updated_at desc', 'page' => $page, 'limit' => $limit ]; $pay_records = PaymentTrade::listPage($params,false,true); if (empty($pay_records['list'])) { if (false === $pay_records['list']) { return $this->error(PaymentTrade::getStaticError()); } return $this->success('success', $pay_records); } if (empty($users)) { $user_ids = array_column($pay_records['list'], 'user_id'); $users = User::find() ->select('id,nickname,mobile,avatar_url') ->where(['id' => $user_ids, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]) ->asArray() ->indexBy('id') ->all(); } if (empty($payment_order_logs)) { $trade_ids = array_column($pay_records['list'], 'id'); $payment_order_logs = PaymentTradeOrder::find() ->select('trade_id,order_no') ->where(['trade_id' => $trade_ids]) ->asArray() ->indexBy('trade_id') ->all(); } $payment_order_union=[]; if (!empty($pay_records)) { $trade_nos = array_column($pay_records['list'], 'out_trade_no'); $payment_order_union = HuifuPayOrderModel::find() ->select('hf_order_no,trade_no') ->where(['trade_no' => $trade_nos]) ->asArray() ->indexBy('trade_no') ->all(); } foreach ($pay_records['list'] as &$record) { $user = $users[$record['user_id']] ?? []; $payment_order_log = $payment_order_logs[$record['id']] ?? []; $record['nickname'] = $user['nickname'] ?? '默认会员'; $record['avatar_url'] = $user['avatar_url'] ?? \Yii::$app->request->hostInfo . '/resources/img/common/default-avatar.png'; $record['mobile'] = $user['mobile'] ?? ''; $record['order_no'] = $payment_order_log['order_no'] ?? ''; //汇付单号 $payment_order_huifu=$payment_order_union[$record['out_trade_no']] ?? []; $record['hf_order_no'] = $payment_order_huifu['hf_order_no'] ? $payment_order_huifu['hf_order_no'].' ':''; } $pay_records['export_list'] = huifupayFastpayOrder::fieldsList(); return $this->success('success', $pay_records); } if(\Yii::$app->request->post('flag') == 'EXPORT'){ $post = \Yii::$app->request->post(); $post['mall_id'] = $this->mall_id; $filename = '支付记录-' . date('YmdHis').'_'.rand(10000,99999); $res = CsvExportHelper::exportDownLoadCenter($this->mall_id,$filename,DownloadEnum::TYPE_ORDERS,huifupayFastpayOrder::class,'exportHandle',$post); if ($res === false) return $this->error('加入导出任务失败'.CsvExportHelper::getStaticError()); return $this->success('添加导出任务成功,任务完成后请在下载中心进行下载!'); } } return $this->render('/pay-record/index'); } public function actionSignRecord() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isGet) { $card_no = \Yii::$app->request->get('card_no'); $start_time = \Yii::$app->request->get('start_time'); $end_time = \Yii::$app->request->get('end_time'); $user_id = \Yii::$app->request->get('user_id'); $user_keyword = \Yii::$app->request->get('user_keyword'); $page = \Yii::$app->request->get('page', 1); $limit = \Yii::$app->request->get('limit', $this->pageSize); $wheres[] = ['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'is_sign' => 1]; if (!empty($card_no)) $wheres[] = ['like', 'bank_card_no', $card_no]; if (!empty($start_time)) $wheres[] = ['>=', 'created_at', strtotime($start_time . '00:00:00')]; if (!empty($end_time)) $wheres[] = ['<=', 'created_at', strtotime($end_time . ' 23:59:59')]; if (!empty($user_id)) $wheres[] = ['user_id' => $user_id]; if (!empty($user_keyword)) { $users = User::find() ->select('id,nickname,mobile,avatar_url') ->where(['or', ['like', 'nickname', $user_keyword], ['like', 'mobile', $user_keyword]]) ->asArray() ->indexBy('id') ->all(); $user_ids = array_column($users, 'id'); $wheres[] = ['user_id' => $user_ids]; } $params = [ 'select' => 'id,mall_id,user_id,card_id,bank_name,bank_card_no,mobile_no,card_type_name,created_at,updated_at', 'where' => $wheres, 'order' => 'created_at desc', 'page' => $page, 'limit' => $limit, ]; $sign_records = huifupayUserBankcard::listPage($params); if (empty($sign_records['list'])) { if (false === $sign_records['list']) { return $this->error(huifupayUserBankcard::getStaticError()); } return $this->success('success', $sign_records); } if (empty($users)) { $user_ids = array_column($sign_records['list'], 'user_id'); $users = User::find() ->select('id,nickname,mobile,avatar_url') ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $user_ids]) ->asArray() ->indexBy('id') ->all(); } $sign_orders = huifupayFastpayOrder::find() ->select('order_no,bank_card_id') ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'user_id' => $user_ids, 'is_sign' => 1]) ->asArray() ->indexBy('bank_card_id') ->all(); foreach ($sign_records['list'] as &$record) { $user = $users[$record['user_id']] ?? []; $sign_order = $sign_orders[$record['card_id']] ?? []; $record['nickname'] = $user['nickname'] ?? '默认会员'; $record['avatar_url'] = $user['avatar_url'] ?? \Yii::$app->request->hostInfo . '/resources/img/common/default-avatar.png'; $record['mobile'] = $user['mobile'] ?? ''; $record['order_no'] = $sign_order['order_no'] ?? ''; } return $this->success('success', $sign_records, ApiStatusEnum::CODE_SUCCESS, 0); } } return $this->render('/sign-record/index'); } public function actionShareRecord() { if (\Yii::$app->request->isAjax && \Yii::$app->request->isGet) { $ret = (new HuifuBillShareService())->page($this->mall_id, \Yii::$app->request->get()); return is_string($ret) ? $this->error($ret) : $this->success('获取成功', $ret); } return $this->render('/share-record/index'); } public function actionShareRetry() { if (\Yii::$app->request->isAjax && \Yii::$app->request->isPost) { $ret = HuifuBillShareService::shareRetry($this->mall_id, \Yii::$app->request->post('id')); return is_string($ret) ? $this->error($ret) : $this->success('操作成功', $ret); } } public function actionGetMerchantId() { $merchant_id = PayTypeEnum::HUIFUPAY . StringHelper::generateRandCode(10 - strlen(PayTypeEnum::HUIFUPAY)) . rand(10, 99); return $this->success('获取成功', $merchant_id); } public function actionRequestLog() { $requestPath = HuifuPayEnum::getRequestPaths(); $requestPathSearchList = []; foreach ($requestPath as $k => $v) { $requestPathSearchList[] = [ 'value' => $k, 'label' => $v ]; } if (!$this->request->isAjax) { return $this->render($this->action->id, ['request_path_search_list' => json_encode($requestPathSearchList)]); } $baseWhere = [ 'mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED ]; $where = [$baseWhere]; $path = $this->request->get('path', ''); if ($path) { $where[] = ['path' => $path]; } $list = HuifupayPayRequestLog::listPage([ 'where' => $where, 'order' => 'id desc' ]); foreach ($list['list'] as &$item) { $item['created_at_text'] = date('Y-m-d H:i:s', $item['created_at']); $item['type_text'] = $requestPath[$item['path']] ?? '-'; } $this->success('success', $list); } }