Commit Graph
8 Commits
Author SHA1 Message Date
ypsdf1 efcc0be26a fix(pay): 尝试在签名中包含sign_type字段\n\n- 彩虹易支付签名规则可能要求包含sign_type字段\n- 修改buildSign函数:只跳过sign字段,保留sign_type\n- 此为诊断性修改,若仍失败需改回排除sign_type 2026-07-15 00:17:44 +08:00
ypsdf1 8ae0fe9b7d revert(pay): 恢复SHA256签名算法(彩虹易支付V2标准)\n\n- 测试SHA1算法后仍失败,改回SHA256(文档明确V2使用SHA256WithRSA)\n- 诊断脚本证实:商户私钥与商户公钥不是一对,导致所有签名方式验签失败\n- 根本问题:密钥不匹配,需用户核对支付平台后台公钥 2026-07-15 00:11:38 +08:00
ypsdf1 af5f31c87e fix(pay): 尝试将RSA签名算法从SHA256改为SHA1以匹配彩虹易支付平台\n\n- 彩虹易支付V2接口可能使用SHA1而非SHA256签名算法\n- 用户反馈:用Unix时间戳RSA签名校验失败,用ISO 8601格式报时间戳错误\n- 此为诊断性修改,若仍失败需改回SHA256并检查其他参数 2026-07-15 00:02:38 +08:00
ypsdf1 7878c07a22 fix(pay): 修正 timestamp 为10位Unix时间戳(秒)以符合平台接口要求\n\n- 平台要求 timestamp 为10位数Unix时间戳(单位秒),而非ISO 8601格式\n- 改回 (string)time() 生成10位秒级时间戳\n- 签名规则不变:参数按ASCII升序、排除sign/sign_type/空值,RSA-SHA256签名\n- 此前ISO 8601格式导致平台报'时间戳字段不正确,请检查服务器时间' 2026-07-14 23:51:06 +08:00
ypsdf1 2a6c6edad2 fix(pay): 修正 timestamp 为 ISO 8601 格式以符合彩虹易支付 V2 接口签名规范\n\n- 原 Unix 时间戳字符串改为 date('c') 生成的 ISO 8601 格式(如 2026-07-14T23:27:54+08:00),与平台文档示例一致\n- 签名规则未变:参数按 ASCII 升序、排除 sign/sign_type/空值,RSA-SHA256 签名\n- 若平台仍校验失败,需核对商户私钥与平台后台公钥是否匹配 2026-07-14 23:33:00 +08:00
ypsdf1 cb2f68cfd8 fix(pay): 修复商户私钥 PKCS#1/PKCS#8 头不匹配导致的 RSA 签名失败
- wrapPem 对私钥按 DER 结构(version 之后紧跟 INTEGER 0x02 为 PKCS#1,SEQUENCE 0x30 为 PKCS#8)自动选择 PEM 头,不再一概用 PKCS#8 头
- 新增 opensslLoadKey 容错加载器:首次加载失败后自动在 RSA PRIVATE KEY 与 PRIVATE KEY 头之间切换重试,彻底规避头格式不匹配引发的签名/验签失败
- 该路径为支付关键链路,签名失败会导致 create_order 直接 500,必须健壮
2026-07-14 23:17:34 +08:00
ypsdf1 57124cab5c fix(pay): 修复 create_order 返回 HTML 导致前端 JSON 解析失败
根因:PHP 8.0+ 中 openssl_free_key() 已弃用,调用会触发弃用警告。
服务端若 html_errors=On,该警告以 <br> 等 HTML 形式输出,污染 JSON 响应,
前端 res.json() 报 'Unexpected token <'。

修复:
- buildSign / verifyNotifySign 中仅在 PHP < 8.0 时调用 openssl_free_key
- 文件顶部设置 display_errors=0 / html_errors=0 / error_reporting=E_ALL,
  确保 API 错误只进日志,不污染响应
2026-07-14 22:07:17 +08:00
ypsdf1 8ec89ef841 feat: 债券在线充值联控(彩虹易支付RSA版) — pay.php + player.php
- api/pay.php: 下单/回调/查询 + RSA(SHA256)签名验签 + pay_orders表
- player.php: 在线充值UI + ?paid=1回跳 + 3s轮询补单
- 密钥仅从 git-ignored 的 pay_secrets.php / 密钥文件_git拉黑.txt 读取,不入库
- fix: 去除 open_basedir 限制的 /pay_keys 候选路径 + @抑制文件访问警告,避免污染响应
2026-07-14 21:12:56 +08:00