geo:移除地址联想代理接口(端上改用鸿蒙自带 Map Kit)laoyang/FamilyBook#33
用户指示「端侧不用高德,用鸿蒙自带的接口」。 端上已改用 @kit.MapKit 的 site.queryAutoComplete(),这个服务端代理随之无用: - ApiHandler:删 case 'geo' 与 geo() 方法 - Geo:删 TIPS_URL 常量与 tips() 方法 网页端不受影响:它走浏览器端 JS API(AMap.AutoComplete), 从来不经过 /api/v1/geo/tips(已确认 addr_suggest.js 零引用)。 验证:接口返回 404(已删),calendar/books 等其它接口仍 401(正常鉴权)。
This commit is contained in:
@@ -112,13 +112,6 @@ final class ApiHandler
|
||||
case 'resources': $this->resources($id, $sub, $method); return;
|
||||
case 'books': $this->books($id, $sub, $method); return;
|
||||
case 'notes': $this->notes($id, $sub, $method); return;
|
||||
/* 🔴 2026-10-30(工单 #36):高德**地址联想**代理。
|
||||
端上地点输入框要"输入简单地址 → 下拉带详细地址",
|
||||
但高德 Web 服务 key 不能进客户端(反编译即泄漏、配额被跑光)。
|
||||
⇒ 走服务端代理,与网页端 `assets/js/addr_suggest.js` 同一个上游。
|
||||
⚠️ 与 `geo` 平级,不能做成 `calendar/tips` —— 它是站点级工具,
|
||||
不属于某个业务模块(影院/行程也用得上)。 */
|
||||
case 'geo': $this->geo($sub, $method); return;
|
||||
// 🔴 v45:登录(手机号 + 密码 → API 令牌)。
|
||||
// 为什么必须走 API 而不是网页登录后复制 Cookie:
|
||||
// App 是 Bearer 令牌那套,没有会话;而原先前端只能让人
|
||||
@@ -1416,49 +1409,6 @@ final class ApiHandler
|
||||
Api::ok($rows);
|
||||
}
|
||||
|
||||
/**
|
||||
* `GET /api/v1/geo/tips?kw=星巴克&limit=10` —— 地址联想(高德输入提示代理)。
|
||||
*
|
||||
* 🔴 2026-10-30(工单 #36):网页端地址联想早就有,"地名后面必须带详细地址"
|
||||
* 是用户同一天的诉求(#32);鸿蒙端原本**连联想都没有**(纯文本框),
|
||||
* 这里给端上补上,字段口径与网页端 `result.tips` 对齐:
|
||||
* 每条都给 `name` + `detail`(省市区 + 门牌),端上把 detail 画在名字下面,
|
||||
* 同名地点才分得开 —— 这正是用户要的"作为参考,让用户更好地选择"。
|
||||
*
|
||||
* 为什么要**服务端代理**而不是端上直连高德:
|
||||
* 高德 Web 服务 key 是服务端密钥,打进安装包等于公开(反编译/抓包即可拿到),
|
||||
* 配额会被跑光、key 还可能被高德封。网页端那套 JS API key + 安全密钥
|
||||
* 是给浏览器域名白名单用的,原生端没有等价机制。
|
||||
*
|
||||
* @param string $sub 只认 `tips`(留出扩展余地,将来要 `regeo` 也能挂这里)
|
||||
* @param string $method 只允许 GET
|
||||
*/
|
||||
private function geo(string $sub, string $method): void
|
||||
{
|
||||
/* ⚠️ 要登录:这是**要花配额**的接口,不开放匿名调用
|
||||
(否则别人拿本站在跑自己的地址联想,配额算我们的)。 */
|
||||
Api::me();
|
||||
|
||||
if ($method !== 'GET') {
|
||||
Api::fail('地址联想只支持 GET', 'method_not_allowed', 405);
|
||||
}
|
||||
if ($sub !== 'tips') {
|
||||
Api::fail('未知的地理接口:' . $sub, 'not_found', 404);
|
||||
}
|
||||
|
||||
$kw = Api::str('kw', '', 60);
|
||||
/* 少于 2 个字直接返回空数组(而不是报错):
|
||||
端上照常手敲,不该因为"字太少"弹一个错误框。
|
||||
阈值与网页端 addr_suggest.js 一致,两边体验才对得上。 */
|
||||
if (mb_strlen($kw, 'UTF-8') < 2) {
|
||||
Api::ok([]);
|
||||
}
|
||||
$limit = (int)Api::str('limit', '10');
|
||||
if ($limit <= 0) { $limit = 10; }
|
||||
|
||||
Api::ok(Geo::tips($kw, $limit));
|
||||
}
|
||||
|
||||
private function events(int $id, string $sub, string $method): void
|
||||
{
|
||||
[$fam, $pid] = Api::me();
|
||||
|
||||
Reference in New Issue
Block a user