requestService = $requestService; $this->userService = $userService; $this->paymentService = $paymentService; } private function createRequestLog($data) { $params = [ 'app_id' => '', 'data' => json_encode($data), ]; return $this->requestService->createRequestLog('', $params); } private function checkUser(RequestInterface $request) { $token = $request->input('token'); if (empty($token)) { throw new BusinessException('未登录'); } $result = Redis::get(RedisKey::getUserTokenKey($token)); if (empty($result)) { throw new BusinessException('未登录'); } $userInfo = json_decode($result, true); if (empty($userInfo)) { throw new BusinessException('未登录'); } return $userInfo; } public function register(RequestInterface $request) { $username = $request->input('username'); $password = $request->input('password'); if (strlen($username) < 6 || strlen($username) > 20) { throw new BusinessException('账号必须为6~20位'); } if (strlen($password) < 6 || strlen($password) > 20) { throw new BusinessException('密码必须为6~20位'); } $account = Account::where('username', $username)->first(); if (!empty($account)) { throw new BusinessException('账号已存在'); } $account = new Account(); $account->salt = StringHelper::getRandomString(6); $account->username = $username; $account->password = md5($password . $account->salt); $account->save(); return $this->success(); } public function login(RequestInterface $request) { $username = $request->input('username'); $password = $request->input('password'); $account = Account::where('username', $username)->first(); if (empty($account)) { throw new BusinessException('账号或密码错误'); } if (md5($password . $account->salt) != $account->password) { throw new BusinessException('账号或密码错误'); } $userInfo = json_encode(['userId' => $account->account_id]); $token = StringHelper::getRandomString(16); Redis::set(RedisKey::getUserTokenKey($token), $userInfo); Redis::expire(RedisKey::getUserTokenKey($token), 3600); return $this->success(['token' => $token]); } public function openAccount(RequestInterface $request) { $userInfo = $this->checkUser($request); $requestLog = $this->createRequestLog(['userId' => 'ACT_' . $userInfo['userId']]); $url = $this->userService->register($requestLog->getData(), $requestLog->app, $requestLog->request_token); return $this->success(['url' => $url]); } public function bindCard(RequestInterface $request) { $userInfo = $this->checkUser($request); $requestLog = $this->createRequestLog(['userId' => 'ACT_' . $userInfo['userId']]); $url = $this->userService->bindCard($requestLog->getData(), $requestLog->app, $requestLog->request_token); return $this->success(['url' => $url]); } public function transferPay(RequestInterface $request) { $userInfo = $this->checkUser($request); $bankCard = BankCard::where('user_id', 'ACT_' . $userInfo['userId'])->first(); $requestLog = $this->createRequestLog([ 'userId' => 'ACT_' . $userInfo['userId'], 'goodsName' => '充值', 'agreementNo' => $bankCard->agreement_no, 'notifyUrl' => 'http://www.baidu.com', 'returnUrl' => 'http://www.baidu.com', 'amount' => intval($request->input('amount') * 100), 'outOrderNo' => time() . rand(1000, 9999), 'validDate' => date('Y-m-d', time() + 12*3600), 'marketInfo' => [ 'amount' => 0, 'remark' => 'test', ], 'splitInfoList' => [ [ 'splitUserId' => 'RLX1990', 'sellerFlag' => 1, 'splitAmount' => 100, 'subOutOrderNo' => time() . rand(1000, 9999), ] ] ]); $acsNo = $this->paymentService->transferPay($requestLog->getData(), $requestLog->app, $requestLog->request_token); return $this->success(['acsNo' => $acsNo]); } }