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'], ]; return self::request('POST', '/v1/api/third/in/in30', $data); } public function getAmountFromGzc() { $uid = $this->request->uid(); $userInfo = Db::name('UserCertification')->where('uid', $uid)->field('user_name,user_card')->find(); if (empty($userInfo['user_name']) || empty($userInfo['user_card'])) { Log::error('[getAmountFromGzc] 用户实名信息缺失', ['uid' => $uid, 'userInfo' => $userInfo]); return app('json')->fail('未找到用户实名信息'); } try { $res = GzcApiRequest::checkAmount($userInfo); } catch (\Throwable $e) { Log::error('[getAmountFromGzc] 调用异常', ['uid' => $uid, 'error' => $e->getMessage()]); return app('json')->fail('查询失败(第三方异常)'); } // 提取 amount(兼容多种字段位置) $amountCents = $res['extendData']['amount'] ?? $res['data']['amount'] ?? $res['amount'] ?? null; $amount = $amountCents === null ? 0.0 : floatval($amountCents) * 0.01; $formatted = sprintf('%.2f', $amount); // 从 checkAmount 返回的 debug(若存在) $debug = $res['debug'] ?? null; // 返回 amount 与 debug 给调用方(前端 / 调试) return app('json')->success([ 'amount' => $formatted, 'debug' => $debug ]); } /** * 获取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); } }