完成了基本调整调整

This commit is contained in:
2026-09-18 20:55:21 +08:00
parent 864187e105
commit 57e0854a0e
56 changed files with 3122 additions and 105 deletions
+21 -2
View File
@@ -108,8 +108,27 @@ class Qyt
$params['sign'] = $this->md5Sha1RsaSign($params);
// 文档示例形如 https://paytaskpage.worknoya.vip/#/?appId=..&mobile=..&timestamp=..&sign=..#/
return $base . '/?' . http_build_query($params) . '#/';
// 最终形如 https://paytaskpage.worknoya.vip/#/?appId=..&mobile=..&timestamp=..&sign=iwxE****g==
//
// ⚠️ 两个坑,都是实测踩出来的,改动前务必看完:
//
// 1) 不能用 http_build_query:它会把 base64 签名里的 + / = 编码成 %2B %2F %3D。
// 参数挂在 # 之后的 fragment 里,浏览器不会自动解码,落地页若不做
// decodeURIComponent,拿到的签名串就和我们签的不一致 -> 验签失败。
// 文档示例里末尾是裸的 ==,对方期望的就是未编码的原始值。
// appId / mobile / timestamp / creditcode 都是字母数字,本来也无需编码。
// 若对接人日后确认页面会解码,把 h5_sign_urlencode 配成 true 即可切回。
//
// 2) 末尾【不能】再拼 '#/'。文档示例末尾是有 #/ 的,但实测:带上之后
// 桌面浏览器能打开,微信里打开 / 扫码一律提示验签失败 —— 落地页会把
// 这个 #/ 一起算进最后一个参数 sign 的值里。去掉后微信正常。
// ⚠️ 别照着文档示例把 '#/' 加回来。
$encode = !empty($this->conf['h5_sign_urlencode']);
$pairs = [];
foreach ($params as $k => $v) {
$pairs[] = $k . '=' . ($encode ? rawurlencode((string) $v) : (string) $v);
}
return $base . '/?' . implode('&', $pairs);
}
// ================================================================