airmole/tjustb-finasys

Tianjin college,USTB Student Finance system HTTP client

Installs: 1

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/airmole/tjustb-finasys

v0.0.1 2025-10-09 14:10 UTC

This package is auto-updated.

Last update: 2025-10-10 08:20:39 UTC


README

Tianjin college, USTB 学生财务系统 HTTP 客户端(PHP)。
为TJUSTB学生财务收费系统提供面向对象的接口封装:SSO 登录、缴费信息查询、订单记录、学分学费、缓交申请、补助发放、发票申请与查询等。

  • 包名:airmole/tjustb-finasys
  • 许可证:GPL-3.0-or-later
  • 运行环境:PHP 8.0+

特性

  • 基于 cURL 的轻量 HTTP 封装,统一超时、Header、Cookie 处理
  • 提供简洁门面类 Airmole\TjustbFinasys\Finasys 聚合常用能力
  • 标准 PSR-4 自动加载
  • 环境配置优先级明确:环境变量 > .env 文件 > 默认值
  • 统一异常类型 Airmole\TjustbFinasys\Exception\Exception

环境要求

  • PHP >= 8.0
  • 扩展:ext-curl、ext-json、ext-openssl

安装

通过 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 文件(默认路径见下) > 内置默认值。

  • FINASYS_URL:财务系统基地址
    • 默认:http://221.238.213.131:8809
  • FINASYS_TIMEOUT:请求超时时间(秒)
    • 默认:5
  • FINASYS_ENV:.env 文件路径
    • 默认:未设置时使用“项目根目录/.env”(即 dirname(__DIR__) . '/.env'

配置方式举例:

  1. 环境变量(优先):
export FINASYS_URL="http://example.com"
export FINASYS_TIMEOUT=8
  1. .env 文件(键值对,忽略空行和以 # 开头注释):
FINASYS_URL=http://example.com
FINASYS_TIMEOUT=8
  1. 代码中动态设置(可选):
$base = new \Airmole\TjustbFinasys\Base();
$base->setConfigPath('/path/to/.env');
$base->setFinasysUrl('http://example.com');

API 概览

所有方法返回统一结构:

  • ['code' => int, 'data' => mixed]
  • code 一般为 HTTP 状态码(成功 200);data 为字符串或解码后的数组(库内在可解析为 JSON 时已自动解码)

异常:当必要前置条件缺失或流程错误(如缺少 Cookie、登录失败)时,抛出 Airmole\TjustbFinasys\Exception\Exception

门面类 Airmole\TjustbFinasys\Finasys

  • 登录与用户
    • ssoLogin(string $ticket): array SSO 免密登录,成功时内部保存 Cookie
    • isLogined(): bool 判断登录态
    • profile(): array 获取个人信息
    • parseCookieString(string $cookieString): arrayCookie: 或 cookie 字符串解析为数组
  • 发票
    • getBillingProbjects(string $year = '', int $stuType = 0, int $pageIndex = 0, int $pageSize = 10, string $sortField = '', string $sortOrder = ''): array
    • getOpenBillAppliedData(int $stuType = 0, int $pageIndex = 0, int $pageSize = 10, string $sortField = '', string $sortOrder = ''): array
    • getOpenBillAppliedDetails(string $cfid): array
  • 学分学费
    • credittuitionQuery(bool $showPaid = true, int $pageIndex = 0, int $pageSize = 10, string $sortField = '', string $sortOrder = ''): array
  • 缓交
    • queryPersonDeferFeeInfo(bool $record = false, int $pageIndex = 0, int $pageSize = 10, string $sortField = '', string $sortOrder = ''): array
    • getDeferRecords(int $pageIndex = 0, int $pageSize = 10, string $sortField = '', string $sortOrder = ''): array
  • 缴费业务与记录
    • queryFeeInfo(bool $showPaid = true, int $pageIndex = 0, int $pageSize = 10, string $sortField = '', string $sortOrder = ''): array
    • getPaidRecordSearchConditions(): array
    • queryTreePaidRecords(int $pageIndex = 0, int $pageSize = 10, array $conditions = [], string $sortField = '', string $sortOrder = ''): array
  • 订单
    • getOrderRecord(int $pageIndex = 0, int $pageSize = 10): array
  • 自助缴费
    • querySelfChargeRecords(int $pageIndex = 0, int $pageSize = 10, string $sortField = '', string $sortOrder = ''): array
  • 补助
    • getSubidyListInfo(int $pageIndex = 0, int $pageSize = 10, bool $showUnreleased = true): array

底层类说明(可直接使用,需先设置 $cookie):

  • LoginssoLoginisLoginedprofile
  • Bill:发票相关
  • Credittuition:学分学费
  • Defer:缓交申请与记录
  • FeeInfo:缴费业务与记录
  • Order:订单记录
  • SelfCharge:自助缴费
  • Subidy:补助信息
  • Base:HTTP、Cookie、配置等通用能力

Cookie 使用要点:

  • 登录成功后内部将 ASP.NET_SessionId 注入 Cookie
  • 也可使用 parseCookieString/parseCookieArray 转换
  • Base 提供 getCookieString()insertCookie()parseCookieString()parseCookieArray() 等工具

返回值与错误处理

  • 网络/协议层:httpRequest 遇到 cURL 错误时返回 ['code' => 0, 'data' => 'cURL Error: ...']
  • 业务异常:如登录失败、缺少 Cookie 等,抛出 Airmole\TjustbFinasys\Exception\Exception
  • 成功:code 通常为 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 调整接口超时
  • 如果需自定义 .env 路径,设置 FINASYS_ENV=/path/to/.env
  • 避免在代码或日志中泄露 Cookie、ticket 等敏感信息

本库未内置测试命令;如需贡献测试,请提交 PR 并附加最小可复现的伪造响应或录制桩。

常见问题

  • 登录 302 未携带期望的 Location
  • 登录成功但 isLogined() 返回 false
    • 检查 Cookie 是否正确注入(ASP.NET_SessionId 是否存在/未过期)
  • data 未 JSON 解码
    • 目标接口可能返回纯文本;请按需手动解析

许可证

GPL-3.0-or-later

致谢

  • Author: Airmole admin@airmole.cn
  • 本项目仅用于与天津学院(北科大)学生财务系统进行集成开发与学习,请遵守相关使用与数据安全规范。