getMessage(); } } /** * 查询账户余额 * @author php迷途小书童 * @created 2021/1/14 16:34 */ public static function checkAmount($user) { $data = [ 'platformNo' => env('GZC.PLATFORM_NO'), 'appNo' => env('GZC.APP_NO'), 'conName' => $user['user_name'], 'conCertType' => 1, 'conCertNo' => $user['user_card'], ]; foreach (['conName', 'conCertNo'] as $key) { if (empty($data[$key])) { Log::error('[checkAmount] 参数缺失', [ 'missing_field' => $key, 'user' => $user, 'data' => $data ]); } } $tokenData = self::getTokenFromServer(); $token = $tokenData['extendData']['accessToken'] ?? null; if (empty($token)) { Log::error('[checkAmount] Token 获取失败', [ 'tokenData' => $tokenData, 'user' => $user ]); } else { Log::info('[checkAmount] 成功获取 Token', ['token' => $token]); } Log::info('[checkAmount] 请求开始', [ 'url' => '/v1/api/third/in/in30', 'data' => $data, 'user' => $user ]); $response = self::request('POST', '/v1/api/third/in/in30', $data); Log::info('[checkAmount] 接口返回', [ 'response' => $response ]); $code = $response['code'] ?? null; $msg = $response['msg'] ?? ''; $amount = $response['data']['amount'] ?? null; if ($code !== 200) { Log::error('[checkAmount] 接口返回异常状态码', [ 'code' => $code, 'msg' => $msg, 'user' => $user, 'response' => $response ]); } if (!isset($response['data']['amount'])) { Log::error('[checkAmount] 响应结构异常,缺少金额字段', [ 'user' => $user, 'response' => $response ]); } // 情况三:金额为 0,分析可能原因 if ($amount === 0) { $possibleReasons = []; if (empty($token)) { $possibleReasons[] = 'Token 获取失败或未附带'; } if (empty($data['conCertNo']) || empty($data['conName'])) { $possibleReasons[] = '用户姓名或身份证号为空'; } if (stripos($msg, '未开户') !== false || stripos($msg, '未实名') !== false) { $possibleReasons[] = '用户未开户或未实名'; } if (stripos($msg, '无账户') !== false) { $possibleReasons[] = '第三方系统中不存在此账户'; } if (stripos($msg, 'success') !== false && $amount === 0) { $possibleReasons[] = '接口返回成功但余额确实为0(正常情况)'; } Log::warning('[checkAmount] 返回金额为0,可能原因如下', [ 'user' => $user, 'params' => $data, 'response' => $response, 'token' => $token, 'possible_reasons' => $possibleReasons ]); } return $response; // return self::request('POST', '/v1/api/third/in/in30', $data); } /** * 获取TOKEN * @return mixed|string * @author php迷途小书童 * @created 2021/1/14 14:38 */ public static function getTokenFromServer() { $timestamp = (int)(microtime(true) * 1000); $appid = env('GZC.APP_ID'); $data = [ 'appid' => $appid, 'sign' => self::getSignContent($timestamp, $appid), 'timestamp' => $timestamp ]; return self::request('POST', '/v1/api/third/auth/token', $data); } /** * 获取签名 * @return string * @author php迷途小书童 * @created 2020/10/29 9:35 */ public static function getSignContent(int $timestamp, string $appid) { $appsecret = md5(env('GZC.APP_SECRET')); $stringToBeSigned = "appid={$appid}&secret={$appsecret}×tamp={$timestamp}"; return md5($stringToBeSigned); } }