← 返回个人财务

iPhone 快捷指令接入

第一版使用原生快捷指令动作在手机解析,再发送结构化 JSON。下面是搭建步骤和规则配置,不是已签名、可一键安装的快捷指令。未在你的 iPhone 上完成实测前,不应视为自动采集已启用。

先完成两件事

  1. 将网站部署到自己的 HTTPS 域名,确保 iPhone 可访问。使用独立、强密码的网站账户,财务数据只属于该登录账户。
  2. 在“个人财务 → 查询与密钥”生成采集密钥,只放在你自己手机的快捷指令请求头中。不要发送到聊天、URL、公开分享的快捷指令或日志。

短信自动化动作清单

  1. 在“iPhone 采集”页测试实际收到的银行短信。测试完全本地;先保留默认待核对模式。下载规则配置 JSON 到手机,只包含规则,不包含短信。
  2. 快捷指令 → 自动化 → 信息,发件人选银行实际发送号码,并设置银行名称关键词。选择可用的“立即运行”(不同 iOS 版本界面可能不同)。将触发的信息正文作为输入;每次只处理一条,不遍历历史短信。
  3. 使用“匹配文本”动作,按照配置的 rejectPattern 检查安全词和失败交易,匹配则“停止此快捷指令”。再验证 bankPattern,不匹配也停止。
  4. 分别运行 cardPattern、timePattern、amountPattern。三个结果都必须恰好一个;否则仅在手机提醒人工核对,停止发送。不要用余额或接收时间代替交易数据。
  5. 卡号只取 cardPattern 的第 1 组(尾四位)。timePattern 第 1–6 组依次为年月日时分秒;缺少秒用 00,其余不足两位补零,组成 yyyy-MM-ddTHH:mm:ss+08:00。先验证日期有效,禁止猜测缺失的年月日。
  6. amountPattern 第 1 组是交易关键词,第 2 组是金额。按 labelRules 查方向和状态。金额先去千分位,将整数部分乘 100、将小数部分右补零到两位,再相加得到整数分。最多两位小数,不直接用浮点数乘 100;零、负数和超过 1000000000000 分时停止。
  7. 给原始正文执行 Unicode NFKC 规范化、CRLF 换 LF、去首尾空白,在前面加固定 psbc-sms-v1 和换行,再用手机可用的 SHA-256 哈希动作,取小写十六进制作为 eventId。若系统无规范化动作,可直接按固定前缀加未经改动的原始正文哈希,并始终使用同一种方式;不要混用本地网页生成的标识。没有可用的哈希动作时,保存一次生成的 UUID 到本机待发送记录,所有重试复用它;不要每次重试重新生成。仅保存结构化字段,不保存短信原文。
  8. “字典”动作创建下列字段。merchant 可留空;category 留空让服务器分类。不要把整个“快捷指令输入”直接当请求体。若有稳定来源交易 ID,先在本机哈希再填 transactionId;没有就不填。
  9. “获取 URL 内容” → POST → JSON → 选择该字典。URL 为 https://你的域名/api/finance-external/transactions。请求头 Authorization: Bearer 采集密钥,Content-Type: application/json。
  10. 网络错误保留同一 eventId 和同一结构化请求在本机重试。400 表示字段无法校验,409 表示标识内容冲突,停止重试并核对;401 则检查密钥。成功响应 duplicate=true 表示重试已去重,不新增交易。
{
  "source": "psbc_sms",
  "eventId": "手机对原始事件生成的稳定哈希或本机持久化UUID",
  "transactionTime": "从短信完整交易时间提取的ISO8601",
  "amountCents": "替换为金额整数分(JSON数字,不是字符串)",
  "direction": "从规则读取expense/income/transfer/refund",
  "merchant": "",
  "category": "",
  "accountAlias": "短信中明确的卡尾四位",
  "captureMethod": "sms",
  "status": "provisional"
}

以上是字段说明,不是可直接发送的真实交易。系统不会预装任何示例账目。createdAt 由服务器生成,客户端不得提交。

Wallet 和其他来源

Wallet 交易触发器可以按所选卡片轻触触发。具体可用字段取决于设备、卡片和系统;如果没有明确金额、交易时间或稳定标识,不自动提交。Wallet 记录始终先待核对,不能把刷卡触发当成结算成功。

微信和支付宝只能使用你主动导出或输入的数据,第一版不抓取 App 数据库或全部通知,不提供银行账号密码登录。CSV 可由你在本机转换为同样的结构化接口数据,captureMethod 填 csv;本版未提供直接上传原始账单的入口。

去重与核对

同来源、同 eventId 或来源交易 ID 的重试只保留一笔;相同标识内容不同返回 409。相同卡尾号、金额、方向且时间在五分钟内的其他记录先标待核对。系统不会仅按金额自动合并。

确定重复的记录点“排除 / 标记重复”;确定两笔都是真实独立交易才点“确认为独立交易”。被排除的事件保留去重凭据,重试不会复活旧消费。没有明确识别出来的短信不上传,也不入待核对表;请在手机人工处理。

ChatGPT 查询与私有部署

部署后在支持请求头密钥的 MCP 客户端中配置 https://你的域名/api/finance-external/mcp,Streamable HTTP,使用本站生成的只读 Bearer 密钥。也可使用 OpenAPI 文件配置只读接口。MCP 工具只有 finance_summary 与 finance_transactions,没有采集、修改或删除权限。

插件平台的身份验证能力不同,需要在该平台的秘密设置中配置查询密钥;这里不代表插件已经安装或连接。数据库、服务器及备份在你自己的环境,查询时选定的账目会发送给所用模型服务。请使用 HTTPS、保护数据库访问、开启磁盘与备份加密,并在恢复后核对账本和撤销不再使用的密钥。

能力来源

接入方式依据 Apple 官方说明:信息自动化触发条件、允许自动运行、Wallet 交易触发。在网页运行 JavaScript需要 Safari 网页输入,不能直接当后台短信脚本使用。规则为本系统保守匹配规则,未经邮储官方认证,不保证覆盖银行所有短信格式。