XML电子发票号码提取器
功能概述
从上传的 XML 电子发票文件中批量提取发票号码,并以 Excel 格式输出:
- 支持 .xml 格式的电子发票文件(增值税电子普通发票、增值税电子专用发票、全电发票等)
- 支持批量上传多个 XML 文件
- 自动识别多种发票号码 XML 标签字段
- 输出为 Excel 明细表(含序号、文件名、发票号码、XML标签、状态)
触发指令
- "提取XML电子发票"
- "XML电子发票提取"
- "提取XML"
- "提取XMLF电子发票"
- "XMLF电子发票提取"
- "XML发票号码提取"
- "提取XML发票号码"
工作流程
当用户触发本技能时,执行以下步骤:
步骤一:部署 HTML 工具到当前项目目录
将技能目录下的 scripts/extract_xml_invoice.html 复制到当前工作目录,文件名使用 XML发票号码提取器.html。
使用 Bash 工具执行复制命令:
cp "<技能目录>/scripts/extract_xml_invoice.html" "<当前工作目录>/XML发票号码提取器.html"
技能目录路径为:~/.workbuddy/skills/提取XMLF电子发票发票号码/scripts/extract_xml_invoice.html
步骤二:通过 present_files 展示工具
使用 present_files 工具将 XML发票号码提取器.html 展示给用户。HTML 文件会在内置浏览器预览面板中自动打开。
步骤三:告知用户操作方法
向用户说明:
1. 点击页面中的上传区域或「+ 添加文件」按钮,选择 XML 电子发票文件(支持多选)
2. 也可以直接将 XML 文件拖拽到上传区域
3. 点击「开始提取」按钮,系统自动解析 XML 并提取发票号码
4. 提取完成后点击「导出 Excel」按钮,下载结果文件
技术说明
XML 发票号码识别逻辑
HTML 工具内置的解析逻辑按以下优先级识别发票号码:
- 标签文本匹配:扫描所有 XML 元素,匹配包含
invoice、发票、fp、fapiao、no、number、编号、号码、fpdm、fphm、einvoice等关键词的标签名,且文本内容为 6-30 位的字母数字组合 - 标签属性匹配:检查匹配到的标签的属性(如
number、no、code、value、invNo、invoiceNo、发票号码、EInvoiceNumber等),属性值符合发票号码格式时优先采用 - XPath 路径回退:尝试常见 XPath 路径,如
//Invoice/InvoiceNo、//发票号码、//FP_NO、//fphm、//EInvoice//InvoiceNumber、//EInvoice//EInvoiceNumber等 - 通用属性回退:扫描所有 XML 元素的属性值,符合发票号码格式时采用
- 文件名回退:全电发票文件名通常包含 20 位发票号码,如仍无法识别则从文件名中提取 20 位数字(或 8-12 位数字)
- 通用文本回退:查找第一个符合发票号码格式的元素文本值
> 注意:导出的 Excel 中「发票号码」列强制保存为文本格式,避免 20 位全电发票号码被 Excel 转为科学计数法或丢失前导零。
导出格式
Excel 文件包含以下列:
| 序号 | 文件名 | 发票号码 | XML标签 | 状态 |
|------|--------|----------|---------|------|
文件名格式:XML发票号码提取结果_YYYY-MM-DD.xlsx
支付宝付费改造契约(PAYSKILL)
本技能为付费技能(PAYSKILL)。调用遵循支付宝 AI 生意画像契约,由平台调度层执行 probe → pay → complete → ack 流程:
- probe(探测):平台调用前先探测是否已持有本技能的支付宝有效订阅 / 付费凭证。已付费则直接放行。
- 402 Payment-Needed:未付费时,脚本向标准输出返回 HTTP 状态
402与Payment-Needed标记,提示用户通过支付宝完成付费(pay),平台据此唤起付费页。 - complete(扣费确认):用户在支付宝完成扣费后,平台下发
Payment-Proof(付费凭证)。 - ack(验签放行):平台携带
Payment-Proof重试本次调用;scripts/payment_gate.py验签该凭证,确认有效后放行主流程。
订阅持久化与幂等:
- 付费状态缓存在本地
.pay_cache/state.json,避免每次调用重复付费(订阅持久化)。 - 同一
Payment-Proof在 24h 幂等窗口内仅生效一次,避免重复扣费。
现金流改造后的调用套路:
用户调用 → 平台 probe →
未付费:下发 402 Payment-Needed → 支付宝 pay → complete → 下发 Payment-Proof
已付费/携带 Proof:脚本 ack 验签 → 放行主流程
> 本契约由 SkillHUB 平台调度层解析,脚本本地仅处理 402 / 验签 / 持久化 三环节;付费本体交给支付宝。
支付宝 AI 按量付费(Machine Pay / A2M)改造说明
本 Skill 已按支付宝官方 A2M 协议改造为 Pay Skill,付费闸口位于 scripts/payment_gate.py,统一调用云端计费服务 https://pay.pembroli.cn/api/resource。
付费流程
- 未付费调用时,服务端返回 HTTP 402 +
Payment-Needed头,携带金额、商户、订单号及 RSA2 签名。 - 买家侧
payment_gate.py收到 402 后引导用户完成支付,平台回传Payment-Proof。 - 客户端携带
Payment-Proof重试资源端点。
验付调用
服务端收到 Payment-Proof 后,调用支付宝验付接口(alipay.aipay.agent.payment.verify)核验凭证有效性(trade_no、out_trade_no、active 状态),验证失败返回 400,验证通过才进入资源发放。
履约确认
资源发放成功后,服务端异步调用履约确认接口(alipay.aipay.agent.fulfillment.confirm,trade_no)回执,标记本笔订单已履约;并按 out_trade_no 做幂等,重复请求直接返回已缓存结果,杜绝重复收费。
幂等与缓存
买家侧按 slug 本地缓存 Payment-Proof(24h TTL),有效期内免重复支付;服务端按订单号幂等,保证同一笔订单只履约一次。