From a5153e8e9485947091251dfc6da448da33d3aabd Mon Sep 17 00:00:00 2001 From: ELF <360197197@qq.com> Date: Wed, 25 Nov 2020 18:52:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A8=E5=B9=BF=E5=91=98=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=BB=93=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Base/Service/PromoteService.class.php | 52 ++++++++- .../Controller/BaseController.class.php | 110 +++++++++++------- .../Sdk/Controller/BaseController.class.php | 48 ++++++-- ThinkPHP/Library/Think/Pay.class.php | 42 +++++-- 4 files changed, 183 insertions(+), 69 deletions(-) diff --git a/Application/Base/Service/PromoteService.class.php b/Application/Base/Service/PromoteService.class.php index 704c4801..0ef90ae3 100644 --- a/Application/Base/Service/PromoteService.class.php +++ b/Application/Base/Service/PromoteService.class.php @@ -732,9 +732,6 @@ class PromoteService { public function getTopPromote($promote) { - /* if ($promote['level'] == 1) { - return $promote; - } */ $chain = trim($promote['chain'], '/'); if ($chain == '') { return $promote; @@ -743,4 +740,53 @@ class PromoteService { return M('promote', 'tab_')->where(['id' => $topPromoteId])->find(); } } + + public function getPromoteById($id, $with = []) + { + $promote = M('promote', 'tab_')->where(['id' => $id])->find(); + if ($promote && in_array('parent', $with)) { + $promote['parent'] = M('promote', 'tab_')->where(['id' => $promote['parent_id']])->find(); + } + if ($promote && in_array('top', $with)) { + $promote['top'] = $this->getTopPromote($promote); + } + return $promote; + } + + public function getMarketAdminIdByPromoteId($promoteId) + { + $promote = $this->getPromoteById($promoteId, ['top']); + return $this->getMarketAdminIdByPromote($promote); + } + + public function getMarketAdminIdByPromote($promote) + { + $marketAdminId = 0; + if ($promote) { + $topPromote = $promote['top'] ?? null; + if (is_null($topPromote)) { + $topPromote = $this->getTopPromote($promote); + } + $marketAdminId = $topPromote['admin_id']; + } + return $marketAdminId; + } + + public function getSettleGameIds($promote) + { + $topPromote = $promote['top'] ?? null; + if (is_null($topPromote)) { + $topPromote = $this->getTopPromote($promote); + } + return $topPromote['game_ids'] == '' ? [] : explode(',', $topPromote['game_ids']); + } + + public function isGameIdSettle($promote, $gameId) + { + $gameIds = $this->getSettleGameIds($promote); + if (in_array($gameId, $gameIds)) { + return true; + } + return false; + } } \ No newline at end of file diff --git a/Application/Callback/Controller/BaseController.class.php b/Application/Callback/Controller/BaseController.class.php index f4d90eeb..8f9d150b 100644 --- a/Application/Callback/Controller/BaseController.class.php +++ b/Application/Callback/Controller/BaseController.class.php @@ -13,45 +13,50 @@ use Base\Service\PromoteService; * 支付回调控制器 * @author 小纯洁 */ -class BaseController extends Controller { - protected function _initialize(){ - C(api('Config/lists')); - C(sdk::get_tool()); - } +class BaseController extends Controller +{ + private $promoteService; + + protected function _initialize() + { + C(api('Config/lists')); + C(sdk::get_tool()); + $this->promoteService = new PromoteService(); + } - /** - * 购买成功后 - * @author 鹿文学 - */ - protected function set_order($data) { - $order = M('Order','tab_'); - $map['order_number'] = $data['out_trade_no']; - $result_data = $order->where($map)->find(); - if(empty($result_data)) {$this->record_logs("数据异常");return false;} - $other = $order->where(array('merchandise_id'=>$result_data['merchandise_id'],'pay_status'=>1))->find(); - if(!empty($other)){ - $datasave['pay_status'] = 1; - $datasave['is_refund'] = 2; - $res = $order->where($map)->save($datasave); - return false; - } - if($result_data['pay_status'] == 0) { - $data_save['pay_status'] = 1; - $data_save['trade_no'] = $data['trade_no']; - $data_save['pay_time'] = NOW_TIME; - $res = $order->where($map)->save($data_save); - if($res!== false) { - M('Merchandise','tab_')->where(['id'=>$result_data['merchandise_id']])->save(['status'=>4]); - M('user','tab_')->where(['id'=>$result_data['buyer_id']])->setInc("cumulative",$result_data['order_price']); - return true; - } else { - $this->record_logs("修改数据失败"); - } - } else { - + /** + * 购买成功后 + * @author 鹿文学 + */ + protected function set_order($data) { + $order = M('Order','tab_'); + $map['order_number'] = $data['out_trade_no']; + $result_data = $order->where($map)->find(); + if(empty($result_data)) {$this->record_logs("数据异常");return false;} + $other = $order->where(array('merchandise_id'=>$result_data['merchandise_id'],'pay_status'=>1))->find(); + if(!empty($other)){ + $datasave['pay_status'] = 1; + $datasave['is_refund'] = 2; + $res = $order->where($map)->save($datasave); + return false; + } + if($result_data['pay_status'] == 0) { + $data_save['pay_status'] = 1; + $data_save['trade_no'] = $data['trade_no']; + $data_save['pay_time'] = NOW_TIME; + $res = $order->where($map)->save($data_save); + if($res!== false) { + M('Merchandise','tab_')->where(['id'=>$result_data['merchandise_id']])->save(['status'=>4]); + M('user','tab_')->where(['id'=>$result_data['buyer_id']])->setInc("cumulative",$result_data['order_price']); return true; - } + } else { + $this->record_logs("修改数据失败"); + } + } else { + + return true; } + } /** *充值到游戏成功后修改充值状态和设置游戏币 @@ -705,21 +710,35 @@ class BaseController extends Controller { return $result; } - public function getMarketAdminId($promoteId) + public function getPromoteById($promoteId) + { + return $this->promoteService->getPromoteById($promoteId, ['top']); + } + + public function getMarketAdminId($promote) { - $promote = M('promote', 'tab_')->field(['id', 'chain', 'level', 'admin_id'])->where(['id' => $promoteId])->find(); - $marketAdminId = 0; - if ($promote) { - $topPromote = (new PromoteService)->getTopPromote($promote); - $marketAdminId = $topPromote['admin_id']; + return $this->promoteService->getMarketAdminIdByPromote($promote); + } + + public function getIsCheckValue($promote, $gameId) + { + if (is_null($promote)) { + return 1; + } + if ($this->promoteService->isGameIdSettle($promote, $gameId)) { + return 1; + } else { + return 2; } - return $marketAdminId; } /** *消费记录表 参数 */ private function spend_param($param=array()){ + + $promote = $this->getPromoteById($vo->getPromoteId()); + $user_entity = get_user_entity($param['user_id']); $data_spned['user_id'] = $param["user_id"]; $data_spned['user_account'] = $user_entity["account"]; @@ -747,9 +766,10 @@ class BaseController extends Controller { $data_spned['pay_game_status'] = 0; $data_spned['extend'] = $param['extend']; $data_spned['pay_way'] = $param["pay_way"]; - $data_spned['market_admin_id'] = $this->getMarketAdminId($user_entity["promote_id"]); + $data_spned['market_admin_id'] = $this->getMarketAdminId($promote); + $data_spned['is_check'] = $this->getIsCheckValue($promote, $vo->getGameId()); if($data_spned['pay_way'] != 7){ - $discount = $this->get_discount($param['game_id'],$user_entity['promote_id'],$param['user_id']); + $discount = $this->get_discount($param['game_id'],$user_entity['promote_id'], $param["game_id"]); $data_spned['pay_amount'] = $param["price"] * $discount['discount']/10;//实付金额 $data_spned['discount_type'] = $discount['discount_type']; }else{//苹果支付不计入折扣 diff --git a/Application/Sdk/Controller/BaseController.class.php b/Application/Sdk/Controller/BaseController.class.php index ca6dc147..d4087da0 100644 --- a/Application/Sdk/Controller/BaseController.class.php +++ b/Application/Sdk/Controller/BaseController.class.php @@ -5,7 +5,10 @@ use Org\XiguSDK\Xigu; use Qiniu\json_decode; use Base\Service\PromoteService; -class BaseController extends RestController{ +class BaseController extends RestController +{ + private $promoteService; + // 不需要验证游戏签名的接口 A.B A==> 控制器 B==》方法 protected $noNeedGame = [ 'Apple.apple_alipay_pay','Apple.apple_weixin_pay','User.get_alipay_zmxy_return', @@ -32,10 +35,13 @@ class BaseController extends RestController{ protected $userToken; // 验证token得到的user H5页面使用 - protected function _initialize(){ + protected function _initialize() + { C(api('Config/lists')); C(self::get_tool()); + $this->promoteService = new PromoteService(); + $c = CONTROLLER_NAME; $a = ACTION_NAME; $data = json_decode ( base64_decode ( file_get_contents ( "php://input" ) ), true ); @@ -498,21 +504,35 @@ class BaseController extends RestController{ return round((float)$check_money,2); } - public function getMarketAdminId($promoteId) + public function getPromoteById($promoteId) + { + return $this->promoteService->getPromoteById($promoteId, ['top']); + } + + public function getMarketAdminId($promote) { - $promote = M('promote', 'tab_')->field(['id', 'chain', 'level', 'admin_id'])->where(['id' => $promoteId])->find(); - $marketAdminId = 0; - if ($promote) { - $topPromote = (new PromoteService)->getTopPromote($promote); - $marketAdminId = $topPromote['admin_id']; + return $this->promoteService->getMarketAdminIdByPromote($promote); + } + + public function getIsCheckValue($promote, $gameId) + { + if (is_null($promote)) { + return 1; + } + if ($this->promoteService->isGameIdSettle($promote, $gameId)) { + return 1; + } else { + return 2; } - return $marketAdminId; } /** *消费记录表 参数 */ - private function spend_param($param=array()){ + private function spend_param($param=array()) + { + $promote = $this->getPromoteById($user_entity["promote_id"]); + $user_entity = get_user_entity($param['user_id']); $data_spned['user_id'] = $param["user_id"]; $data_spned['user_account'] = $user_entity["account"]; @@ -536,7 +556,8 @@ class BaseController extends RestController{ $data_spned['spend_time'] = NOW_TIME; // $data_spned['pay_time'] = NOW_TIME; $data_spned['pay_status'] = $param["pay_status"]; - $data_spned['market_admin_id'] = $this->getMarketAdminId($user_entity["promote_id"]); + $data_spned['market_admin_id'] = $this->getMarketAdminId($promote); + $data_spned['is_check'] = $this->getIsCheckValue($promote, $param["game_id"]); if ($param["pay_status"] == 1) $data_spned['payed_time'] = time(); else @@ -575,6 +596,9 @@ class BaseController extends RestController{ *平台币充值记录表 参数 */ private function deposit_param($param=array()){ + + $promote = $this->getPromoteById($user_entity["promote_id"]); + $user_entity = get_user_entity($param['user_id']); $data_deposit['order_number'] = $param["order_number"]; $data_deposit['pay_order_number'] = $param["pay_order_number"]; @@ -591,7 +615,7 @@ class BaseController extends RestController{ $data_deposit['pay_way'] = $param["pay_way"]; $data_deposit['pay_ip'] = $param["spend_ip"]; $data_deposit['sdk_version'] = $param["sdk_version"]; - $data_deposit['market_admin_id'] = $this->getMarketAdminId($user_entity["promote_id"]); + $data_deposit['market_admin_id'] = $this->getMarketAdminId($promote); if (isset($param["pay_url"])) { $data_deposit['pay_url'] = $param["pay_url"]; } diff --git a/ThinkPHP/Library/Think/Pay.class.php b/ThinkPHP/Library/Think/Pay.class.php index 76b283b3..fb0fe958 100644 --- a/ThinkPHP/Library/Think/Pay.class.php +++ b/ThinkPHP/Library/Think/Pay.class.php @@ -30,6 +30,12 @@ class Pay * @var type */ private $apitype; + + /** + * 推广员服务 + * @var PromoteService + */ + private $promoteService; /** * 构造方法,用于构造上传实例 @@ -49,6 +55,7 @@ class Pay /* 设置支付驱动 */ $class = strpos($driver, '\\') ? $driver : 'Think\\Pay\\Driver\\' . ucfirst(strtolower($driver)); $this->setDriver($class, $config); + $this->promoteService = new PromoteService(); } public function isKBCPartner($promoteId) @@ -324,15 +331,26 @@ class Pay return $result; } - public function getMarketAdminId($promoteId) + public function getPromoteById($promoteId) { - $promote = M('promote', 'tab_')->field(['id', 'chain', 'level', 'admin_id'])->where(['id' => $promoteId])->find(); - $marketAdminId = 0; - if ($promote) { - $topPromote = (new PromoteService)->getTopPromote($promote); - $marketAdminId = $topPromote['admin_id']; + return $this->promoteService->getPromoteById($promoteId, ['top']); + } + + public function getMarketAdminId($promote) + { + return $this->promoteService->getMarketAdminIdByPromote($promote); + } + + public function getIsCheckValue($promote, $gameId) + { + if (is_null($promote)) { + return 1; + } + if ($this->promoteService->isGameIdSettle($promote, $gameId)) { + return 1; + } else { + return 2; } - return $marketAdminId; } /** @@ -340,6 +358,8 @@ class Pay */ private function add_spend(Pay\PayVo $vo, $param=array(), $payConf = array()) { + $promote = $this->getPromoteById($vo->getPromoteId()); + $spend = M("spend", "tab_"); $spend_data['user_id'] = $vo->getUserId(); $spend_data['user_account'] = $vo->getAccount(); @@ -371,7 +391,8 @@ class Pay $spend_data['extend'] = $vo->getExtend(); $spend_data['spend_ip'] = get_client_ip(); $spend_data['sdk_version'] = $vo->getSdkVersion(); - $spend_data['market_admin_id'] = $this->getMarketAdminId($vo->getPromoteId()); + $spend_data['market_admin_id'] = $this->getMarketAdminId($promote); + $spend_data['is_check'] = $this->getIsCheckValue($promote, $vo->getGameId()); /* if ($isKBCPartner) { $spend_data['partner_type'] = 1; } */ @@ -399,6 +420,9 @@ class Pay $uc_user = $uc->get_user_from_uid($vo->getUserId()); $uc_id = $uc->uc_deposit($vo->getUserId(), $vo->getAccount(), $vo->getUserNickName(), $vo->getGameId(), $vo->getGameAppid(), $vo->getGameName(), 0, '', $vo->getPromoteId(), $vo->getPromoteName(), "", $vo->getOrderNo(), $vo->getFee(), time(), $vo->getExtend(), $vo->getPayWay(), get_client_ip(), '', 5, $uc_user['platform'], '', ''); } else { + + $promote = $this->getPromoteById($vo->getPromoteId()); + $deposit = M("deposit", "tab_"); // $ordercheck = $deposit->where(array('pay_order_number'=>$data["order_no"]))->find(); // if($ordercheck)$this->error("订单已经存在,请刷新充值页面重新下单!"); @@ -418,7 +442,7 @@ class Pay $deposit_data['pay_source'] = 2; $deposit_data['create_time'] = NOW_TIME; $deposit_data['sdk_version'] = $vo->getSdkVersion(); - $deposit_data['market_admin_id'] = $this->getMarketAdminId($vo->getPromoteId()); + $deposit_data['market_admin_id'] = $this->getMarketAdminId($promote); /* if ($isKBCPartner) { $deposit_data['partner_type'] = 1; } */