完成了基本调整调整
This commit is contained in:
@@ -108,8 +108,27 @@ class Qyt
|
||||
|
||||
$params['sign'] = $this->md5Sha1RsaSign($params);
|
||||
|
||||
// 文档示例形如 https://paytaskpage.worknoya.vip/#/?appId=..&mobile=..×tamp=..&sign=..#/
|
||||
return $base . '/?' . http_build_query($params) . '#/';
|
||||
// 最终形如 https://paytaskpage.worknoya.vip/#/?appId=..&mobile=..×tamp=..&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);
|
||||
}
|
||||
|
||||
// ================================================================
|
||||
|
||||
Reference in New Issue
Block a user