diff --git a/app/adminapi/logic/user/UserLogic.php b/app/adminapi/logic/user/UserLogic.php index 2e6bfb03..f1103e82 100644 --- a/app/adminapi/logic/user/UserLogic.php +++ b/app/adminapi/logic/user/UserLogic.php @@ -258,30 +258,39 @@ class UserLogic extends BaseLogic return User::where($where)->findOrEmpty(); } - public static function shareProfit($bridgeUser, $villageUser, $streetUser, $profit) + public static function shareProfit($bridgeUser, $villageUser, $streetUser, $orderMoney, $orderNo) { try { Db::startTrans(); - // 小队 + $proportion = 0.03; // 分润比例 - self::userProfit($bridgeUser, $profit, $proportion); - // 村 - self::userProfit($villageUser, $profit, $proportion); - // 镇 - $proportion = 0.01; // 分润比例 - self::userProfit($streetUser, $profit, $proportion); + + if (!empty($bridgeUser)) { + // 小队 + self::userProfit($bridgeUser, $orderMoney, $proportion, $orderNo); + } + + if (!empty($villageUser)) { + // 村 + self::userProfit($villageUser, $orderMoney, $proportion, $orderNo); + } + + if (!empty($streetUser)) { + // 镇 + $proportion = 0.01; // 分润比例 + self::userProfit($streetUser, $orderMoney, $proportion, $orderNo); + } + Db::commit(); } catch (\Exception $e) { Db::rollback(); } } - public static function userProfit($user, $profit, $proportion) + public static function userProfit($user, $orderMoney, $proportion, $orderNo) { - - $money = bcmul($profit, $proportion, 2); - - $arr = [$user['id'], AccountLogEnum::UM_INC_TASK, AccountLogEnum::INC, $money, $user['sn'], '平台推广' . '获得劳务费' . $money . '元', ['company_id' => $data['company_id'], 'proportion' => $proportion], $data['status']]; + $money = bcdiv(bcmul($orderMoney, $proportion, 2), 100, 2); + $arr = [$user['id'], AccountLogEnum::UM_INC_TASK, AccountLogEnum::INC, $money, $orderNo, '平台推广' . '获得劳务费' . $money . '元', ['company_id' => 0, 'proportion' => $proportion], 1]; self::addUserAccountLog($arr); } @@ -293,4 +302,11 @@ class UserLogic extends BaseLogic User::where('id', $data[0])->update(['user_money'=>Db::raw('user_money+' . $data[3])]); return AccountLogLogic::add($data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7]); } + + public static function firstOrderLog($userIds, $orderMoney, $orderNo) + { + foreach ($userIds as $userId) { + Db::name('user_invite_first_order_log')->insert(['user_id' => $userId, 'order_money' => $orderMoney, 'order_no' => $orderNo, 'create_time' => time()]); + } + } } \ No newline at end of file diff --git a/app/api/controller/ShopCallController.php b/app/api/controller/ShopCallController.php index 72283281..da1a361c 100644 --- a/app/api/controller/ShopCallController.php +++ b/app/api/controller/ShopCallController.php @@ -3,14 +3,7 @@ namespace app\api\controller; use app\adminapi\logic\user\UserLogic; -use app\common\logic\task\TaskLogic; -use app\common\model\Company; -use app\common\model\dict\DictData; -use app\common\model\task\Task; -use app\common\model\task_template\TaskTemplate; -use think\Exception; -use think\facade\Db; -use think\facade\Log; +use think\exception\ValidateException; /** * 商城主动调用接口类 @@ -18,14 +11,33 @@ use think\facade\Log; class ShopCallController extends BaseApiController { public array $notNeedLogin = ['user_first_order_share_profit', 'user_order_share_profit']; + + + public function initialize() + { + parent::initialize(); + $this->apiSecret = config('project.shop_api_secret'); + } /** * 用户首单分润 * 队 村 镇三级分润 */ public function user_first_order_share_profit() { - $inviteCode = $this->request->get('promotion_code'); // 推广码 - $profit = $this->request->get('profit'); // 订单金额 + $params = $this->request->param(); + if (!isset($params['data']) || !isset($params['timestamp'])) { + return $this->fail('未传入参数'); + } + $timestamp = $params['timestamp']; + $iv = substr(md5($this->apiSecret.$timestamp), 5, 16); + $secretData = encrypt($params['data'], $this->apiSecret, $iv); + $requestDatas = decrypt($secretData, $this->apiSecret, $iv); + if (null === $requestDatas) { + return $this->fail('非法访问,解析失败'); + } + $inviteCode = $requestDatas['promotion_code']; // 推广码 + $orderMoney= $requestDatas['order_money']; // 订单金额 + $orderNo= $requestDatas['order_no']; // 订单金额 // 推广人 $userSelf = UserLogic::getUserByInviteCode($inviteCode); @@ -47,12 +59,15 @@ class ShopCallController extends BaseApiController $streetUser = UserLogic::getUser($where1); // 计算分润 - UserLogic::shareProfit($userSelf, $villageUser, $streetUser, $profit); + UserLogic::shareProfit($userSelf, $villageUser, $streetUser, $orderMoney, $orderNo); + + // 首单金额记录 + UserLogic::firstOrderLog([$userSelf['id'], $villageUser['id'], $streetUser['id']], $orderMoney, $orderNo); return $this->success('成功', [ - ['user_id' => $userSelf['id'], 'mobile' => $userSelf['account'], 'user_profit' => bcmul($profit, 0.03, 2)], - ['user_id' => $villageUser['id'], 'mobile' => $villageUser['account'], 'user_profit' => bcmul($profit, 0.03, 2)], - ['user_id' => $streetUser['id'], 'mobile' => $streetUser['account'], 'user_profit' => bcmul($profit, 0.01, 2)], + ['user_id' => $userSelf['id'], 'account' => $userSelf['account'], 'user_profit' => bcmul($orderMoney, 0.03, 2)], + ['user_id' => $villageUser['id'], 'account' => $villageUser['account'], 'user_profit' => bcmul($orderMoney, 0.03, 2)], + ['user_id' => $streetUser['id'], 'account' => $streetUser['account'], 'user_profit' => bcmul($orderMoney, 0.01, 2)], ]); } @@ -67,12 +82,15 @@ class ShopCallController extends BaseApiController $streetUser = UserLogic::getUser($where); // 计算分润 - UserLogic::shareProfit($bridgeUser, $userSelf, $streetUser, $profit); + UserLogic::shareProfit($bridgeUser, $userSelf, $streetUser, $orderMoney); + + // 首单金额记录 + UserLogic::firstOrderLog([$userSelf['id'], $bridgeUser['id'], $streetUser['id']], $orderMoney, $orderNo); return $this->success('成功', [ - ['user_id' => $bridgeUser['id'], 'mobile' => $bridgeUser['account'], 'user_profit' => bcmul($profit, 0.03, 2)], - ['user_id' => $userSelf['id'], 'mobile' => $userSelf['account'], 'user_profit' => bcmul($profit, 0.03, 2)], - ['user_id' => $streetUser['id'], 'mobile' => $streetUser['account'], 'user_profit' => bcmul($profit, 0.01, 2)], + ['user_id' => $bridgeUser['id'], 'account' => $bridgeUser['account'], 'user_profit' => bcmul($orderMoney, 0.03, 2)], + ['user_id' => $userSelf['id'], 'account' => $userSelf['account'], 'user_profit' => bcmul($orderMoney, 0.03, 2)], + ['user_id' => $streetUser['id'], 'account' => $streetUser['account'], 'user_profit' => bcmul($orderMoney, 0.01, 2)], ]); } @@ -87,11 +105,15 @@ class ShopCallController extends BaseApiController $bridgeUser = UserLogic::getUser($where); // 计算分润 - UserLogic::shareProfit($bridgeUser, $villageUser, $userSelf, $profit); + UserLogic::shareProfit($bridgeUser, $villageUser, $userSelf, $orderMoney); + + // 首单金额记录 + UserLogic::firstOrderLog([$userSelf['id'], $villageUser['id'], $userSelf['id']], $orderMoney, $orderNo); + return $this->success('成功', [ - ['user_id' => $bridgeUser['id'], 'mobile' => $bridgeUser['account'], 'user_profit' => bcmul($profit, 0.03, 2)], - ['user_id' => $villageUser['id'], 'mobile' => $villageUser['account'], 'user_profit' => bcmul($profit, 0.03, 2)], - ['user_id' => $userSelf['id'], 'mobile' => $userSelf['account'], 'user_profit' => bcmul($profit, 0.01, 2)], + ['user_id' => $bridgeUser['id'], 'account' => $bridgeUser['account'], 'user_profit' => bcmul($orderMoney, 0.03, 2)], + ['user_id' => $villageUser['id'], 'account' => $villageUser['account'], 'user_profit' => bcmul($orderMoney, 0.03, 2)], + ['user_id' => $userSelf['id'], 'account' => $userSelf['account'], 'user_profit' => bcmul($orderMoney, 0.01, 2)], ]); } } @@ -102,8 +124,17 @@ class ShopCallController extends BaseApiController */ public function user_order_share_profit() { - $inviteCode = $this->request->get('promotion_code'); // 推广码 - $profit = $this->request->get('profit'); // 订单金额 + $params = $this->request->param(); + $timestamp = $params['timestamp']; + $iv = substr(md5($this->apiSecret.$timestamp), 5, 16); + $secretData = encrypt($params['data'], $this->apiSecret, $iv); + $requestDatas = decrypt($secretData, $this->apiSecret, $iv); + if (null === $requestDatas) { + return $this->fail('非法访问,解析失败'); + } + $inviteCode = $requestDatas['promotion_code']; // 推广码 + $orderMoney = $requestDatas['order_money']; // 订单金额 分 + $orderNo = $requestDatas['order_no']; // 订单金额 // 推广人 $userSelf = UserLogic::getUserByInviteCode($inviteCode); @@ -116,7 +147,7 @@ class ShopCallController extends BaseApiController // 镇/街道合伙人 if ($userSelf['group_id'] == 15) { // 计算分润 - UserLogic::userProfit($userSelf, $profit, $proportion); + UserLogic::userProfit($userSelf, $orderMoney, $proportion, $orderNo); } // 小队/小区队长 @@ -125,7 +156,7 @@ class ShopCallController extends BaseApiController $where1 = ['group_id' => 15, 'street'=>$userSelf['street']]; $streetUser = UserLogic::getUser($where1); // 计算分润 - UserLogic::userProfit($streetUser, $profit, 0.01); + UserLogic::userProfit($streetUser, $orderMoney, 0.01, $orderNo); } // 村/社区合伙人 @@ -135,8 +166,9 @@ class ShopCallController extends BaseApiController $streetUser = UserLogic::getUser($where); // 计算分润 - UserLogic::userProfit($streetUser, $profit, 0.01); + UserLogic::userProfit($streetUser, $orderMoney, 0.01, $orderNo); } - return $this->success('成功', ['user_id' => $userSelf['id'], 'mobile' => $userSelf['account'], 'user_profit' => bcmul($profit, $proportion, 2)]); + + return $this->success('成功', ['user_id' => $userSelf['id'], 'account' => $userSelf['account'], 'user_profit' => bcmul($orderMoney, $proportion, 2)]); } } \ No newline at end of file diff --git a/app/common.php b/app/common.php index 7846704e..1f149af1 100644 --- a/app/common.php +++ b/app/common.php @@ -541,4 +541,41 @@ function generate_rand_code($length = 8) { } return $code; +} + +/** + * 使用对称密钥进行加密 + * @param $plainText + * @param $secret + * @param $iv + * @return string + */ +function encrypt($plainText, $secret, $iv = null) +{ + $cipher = 'aes-128-cbc'; + $plainText = json_encode($plainText); + if (!empty($iv)) { + $encryptedData = openssl_encrypt($plainText, $cipher, $secret, OPENSSL_RAW_DATA, $iv); + } else { + $encryptedData = openssl_encrypt($plainText, $cipher, $secret); + } + return base64_encode($encryptedData); +} + +/** + * 使用对称秘钥解密 + * @param $plainText + * @param $secret + * @param $iv + * @return false|string + */ +function decrypt($plainText, $secret, $iv = null) { + $cipher = 'aes-128-cbc'; + $plainText = base64_decode($plainText); + if (!empty($iv)) { + $data = openssl_decrypt($plainText,$cipher, $secret, OPENSSL_RAW_DATA, $iv); + $data = json_decode($data, true); + return $data; + } + return openssl_decrypt($plainText, $cipher, $secret); } \ No newline at end of file diff --git a/config/project.php b/config/project.php index 3ca3a4ff..dea567d9 100644 --- a/config/project.php +++ b/config/project.php @@ -99,6 +99,8 @@ return [ 'decorate' => [ // 底部导航栏样式设置 'tabbar_style' => ['default_color' => '#999999', 'selected_color' => '#4173ff'], - ] + ], + + 'shop_api_secret' => 've2HSq011whZYgKE',// 商城api密钥 ];