Tianjin college, USTB 学生财务系统 HTTP 客户端(PHP)。
为TJUSTB学生财务收费系统提供面向对象的接口封装:SSO 登录、缴费信息查询、订单记录、学分学费、缓交申请、补助发放、发票申请与查询等。
airmole/tjustb-finasysAirmole\TjustbFinasys\Finasys 聚合常用能力Airmole\TjustbFinasys\Exception\Exception通过 Composer 安装:
composer require airmole/tjustb-finasys
建议通过门面类 Finasys 使用,大部分接口只需要完成一次 SSO 登录(获取 Cookie)后调用。
<?php
use Airmole\TjustbFinasys\Finasys;
// 1) 可选:通过环境变量或 .env 配置财务系统地址与超时(见下方“配置”)
// putenv('FINASYS_URL=http://221.238.213.131:8809');
// putenv('FINASYS_TIMEOUT=8');
// 2) SSO 免密登录(需要上游系统颁发的 ticket)
$client = new Finasys();
$login = $client->ssoLogin($ticket); // $ticket 由外部系统提供
if ($login['code'] !== 200) {
// 登录异常,$login['data'] 为错误消息或响应内容
throw new RuntimeException('登录失败:' . ($login['data'] ?? '未知错误'));
}
// 3) 检查登录态
if (!$client->isLogined()) {
throw new RuntimeException('登录态失效');
}
// 4) 获取个人信息
$profile = $client->profile();
// $profile['code'] === 200 且 $profile['data'] 为数组
// 5) 查询待缴/已缴费业务
$list = $client->queryFeeInfo(showPaid: true, pageIndex: 0, pageSize: 10);
// 6) 更多能力见下文 API 概览
也可在已有 Cookie 的场景直连(跳过 ssoLogin),例如:
<?php
use Airmole\TjustbFinasys\Finasys;
// 从字符串解析 Cookie
$client = new Finasys();
$cookieArray = $client->parseCookieString('ASP.NET_SessionId=xxxxxx');
$client->cookie = $cookieArray;
// 或直接赋值
// $client->cookie = ['ASP.NET_SessionId' => 'xxxxxx'];
$ok = $client->isLogined();
Base 类支持以下配置项,优先级:环境变量 > .env 文件(默认路径见下) > 内置默认值。
http://221.238.213.131:8809dirname(__DIR__) . '/.env')配置方式举例:
export FINASYS_URL="http://example.com"
export FINASYS_TIMEOUT=8
FINASYS_URL=http://example.com FINASYS_TIMEOUT=8
$base = new \Airmole\TjustbFinasys\Base();
$base->setConfigPath('/path/to/.env');
$base->setFinasysUrl('http://example.com');
所有方法返回统一结构:
['code' => int, 'data' => mixed]异常:当必要前置条件缺失或流程错误(如缺少 Cookie、登录失败)时,抛出 Airmole\TjustbFinasys\Exception\Exception。
门面类 Airmole\TjustbFinasys\Finasys:
ssoLogin(string $ticket): array SSO 免密登录,成功时内部保存 CookieisLogined(): bool 判断登录态profile(): array 获取个人信息parseCookieString(string $cookieString): array 将 Cookie: 或 cookie 字符串解析为数组getBillingProbjects(string $year = '', int $stuType = 0, int $pageIndex = 0, int $pageSize = 10, string $sortField = '', string $sortOrder = ''): arraygetOpenBillAppliedData(int $stuType = 0, int $pageIndex = 0, int $pageSize = 10, string $sortField = '', string $sortOrder = ''): arraygetOpenBillAppliedDetails(string $cfid): arraycredittuitionQuery(bool $showPaid = true, int $pageIndex = 0, int $pageSize = 10, string $sortField = '', string $sortOrder = ''): arrayqueryPersonDeferFeeInfo(bool $record = false, int $pageIndex = 0, int $pageSize = 10, string $sortField = '', string $sortOrder = ''): arraygetDeferRecords(int $pageIndex = 0, int $pageSize = 10, string $sortField = '', string $sortOrder = ''): arrayqueryFeeInfo(bool $showPaid = true, int $pageIndex = 0, int $pageSize = 10, string $sortField = '', string $sortOrder = ''): arraygetPaidRecordSearchConditions(): arrayqueryTreePaidRecords(int $pageIndex = 0, int $pageSize = 10, array $conditions = [], string $sortField = '', string $sortOrder = ''): arraygetOrderRecord(int $pageIndex = 0, int $pageSize = 10): arrayquerySelfChargeRecords(int $pageIndex = 0, int $pageSize = 10, string $sortField = '', string $sortOrder = ''): arraygetSubidyListInfo(int $pageIndex = 0, int $pageSize = 10, bool $showUnreleased = true): array底层类说明(可直接使用,需先设置 $cookie):
Login:ssoLogin、isLogined、profileBill:发票相关Credittuition:学分学费Defer:缓交申请与记录FeeInfo:缴费业务与记录Order:订单记录SelfCharge:自助缴费Subidy:补助信息Base:HTTP、Cookie、配置等通用能力Cookie 使用要点:
ASP.NET_SessionId 注入 CookieparseCookieString/parseCookieArray 转换getCookieString()、insertCookie()、parseCookieString()、parseCookieArray() 等工具httpRequest 遇到 cURL 错误时返回 ['code' => 0, 'data' => 'cURL Error: ...']Airmole\TjustbFinasys\Exception\Exceptioncode 通常为 200,data 为字符串或已 JSON 解码的数组(库内已尝试自动解码). ├── composer.json └── src ├── Base.php ├── Bill.php ├── Credittuition.php ├── Defer.php ├── FeeInfo.php ├── Finasys.php ├── Login.php ├── Order.php ├── SelfCharge.php ├── Subidy.php └── Exception └── Exception.php
.env 或环境变量中设置 FINASYS_URL 指向测试/仿真环境FINASYS_TIMEOUT 调整接口超时FINASYS_ENV=/path/to/.env本库未内置测试命令;如需贡献测试,请提交 PR 并附加最小可复现的伪造响应或录制桩。
Login::ssoLogin 期望 Location: /PayList.html,ticket值获取可使用 airmole/tjustb-authsys->visitOtherSystem('http://10.2.254.80:8809/Login/JinZhi_Login')方法获取isLogined() 返回 false
ASP.NET_SessionId 是否存在/未过期)GPL-3.0-or-later