"status":110,"message":"请求来源未被授权,此次请求无来源信息"}

本文介绍了使用腾讯地图API时遇到的请求来源未被授权问题,并给出了通过配置IP地址来解决该问题的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/***
 * 腾讯地图地址解析
 * @param $address
 * @return mixed
 */
public function getAddress($address='四川省成都市新都区****')
{
    $ak='替换成你自己的KEY';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://apis.map.qq.com/ws/geocoder/v1/?address=$address&key=$ak");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($ch);
    $map = json_decode($data);
    $location = $map->result->location;
    return $location;
}

今天遇到个特别神经质的问题,我在这里配置了域名,请求后,一直显示

{"status":110,"message":"请求来源未被授权,此次请求无来源信息"}

域名和子域名都试了,还是一直报这个错!神经病,真的是神经病,没有哪一次用腾讯的东西让我感觉很清爽的。。。。。

 

废话不多说,直接说解决办法吧

答案就是配置ip

反正配成了主机ip之后,一下子就成功了

<think>我们正在解决Uniapp H5使用map组件调用getLocation失败,错误提示为“来源域名授权”(status:110)的问题。根据引用内容,我们得知这个问题通常与地图服务提供商的域名授权配置有关。以下是详细的解决方案: ### 1. 配置地图服务商的域名白名单 - **腾讯地图**:登录[腾讯位置服务控制台](https://lbs.qq.com/),进入“应用管理”找到对应的Key,在“设置”中配置“WebServiceAPI域名白名单”和“Web端(JavaScript API)域名白名单”。添加你H5页面的域名(例如:`www.yourdomain.com`),注意不要带端口号。如果是本地调试,可以临时添加`localhost`(但正式环境必须使用已备案的域名)[^1]。 - **高德地图**:登录[高德开放平台控制台](https://console.amap.com/),进入“应用管理”找到对应的Key,在“安全设置”中添加“Web服务调用白名单”和“Web端(JS API)调用白名单”。同样添加你的H5域名或本地调试使用`localhost`(正式环境需使用备案域名)[^2]。 ### 2. 在Uniapp中正确配置地图Key 在`manifest.json`的H5配置中指定地图服务商并填写Key: ```json "h5": { "map": { "provider": "qqmap", // 或"amap" "qqmap": { "key": "你的腾讯地图Key" }, // 或使用高德地图 "amap": { "key": "你的高德地图Key" } } } ``` ### 3. 确保使用HTTPS协议 浏览器要求地理位置服务必须通过HTTPS访问。若本地开发,可使用`nginx`配置HTTPS代理或使用Uniapp内置的HTTPS调试功能(需在HBuilderX中配置)。生产环境必须部署HTTPS证书。 ### 4. 用户交互触发定位请求 在按钮点击事件中调用`uni.getLocation`: ```html <button @click="getLocation">获取位置</button> ``` ```javascript methods: { getLocation() { uni.getLocation({ type: 'wgs84', success: (res) => { console.log('经度:' + res.longitude, '纬度:' + res.latitude); }, fail: (err) => { console.error('定位失败:', err); } }); } } ``` ### 5. 处理跨域问题(仅限H5) 如果使用地图服务API(如逆地理编码),需确保API支持跨域。若接口不支持,可通过Uniapp的云函数代理请求或配置服务器端转发。 ### 6. 校准定位偏移(附加建议) 若定位成功但位置偏移,参考引用[1]进行坐标校准: ```javascript // 示例:腾讯地图坐标转换接口(需在腾讯地图控制台开启此服务) uni.request({ url: 'https://apis.map.qq.com/ws/coord/v1/translate', data: { key: '你的腾讯地图Key', locations: `${res.latitude},${res.longitude}`, type: 1 // 1:GPS坐标转腾讯坐标 }, success: (coordRes) => { const fixedLoc = coordRes.data.locations[0]; console.log('校准后坐标:', fixedLoc.lat, fixedLoc.lng); } }); ``` > **注意**:校准接口同样受域名授权限制,需在腾讯地图控制台配置白名单。 ### 调试技巧 - 本地开发时,在`localhost`下测试需在控制台配置白名单(如腾讯地图允许`localhost`)。 - 使用Chrome开发者工具,查看Network请求失败详情,确认请求域名是否被拦截[^3]。 通过以上步骤,即可解决来源域名授权”错误。如果问题依旧,请检查Key是否有效、网络请求是否正常发出。 ### §§相关问题§§ 1. 如何在Uniapp中配置高德地图的Key? 2. UniApp H5端如何启用HTTPS进行本地调试? 3. 腾讯地图坐标转换接口的使用方法? 4. 如何解决UniApp H5定位偏移几十米的问题?</think>针对 UniApp H5 使用 map 组件调用 `getLocation` 失败并提示 **"来源域名授权" (status:110)** 的问题,以下是完整的解决方案: --- ### 一、核心解决方案:配置地图服务商域名白名单 #### 1. **腾讯地图配置** 1. 访问 [腾讯位置服务控制台](https://lbs.qq.com/) 2. 找到使用的 Key → 进入 "设置" 3. 在 **"WebServiceAPI域名白名单"** 中添加你的 H5 域名: ``` https://your-domain.com // 正式环境 http://localhost // 本地开发环境 ``` 4. 确保勾选 **"启用域名白名单"** #### 2. **高德地图配置** 1. 登录 [高德开放平台控制台](https://console.amap.com/) 2. 进入 Key 管理 → 安全设置 3. 在 **"Web服务调用白名单"** 中添加: ``` https://your-domain.com/* // 支持通配符 http://127.0.0.1:8080 // 本地调试地址 ``` > ⚠️ **重要提示**: > - 域名需包含协议头(`http://` 或 `https://`) > - 生产环境必须使用备案域名 > - 修改后需 **5-10 分钟** 生效 --- ### 二、UniApp 项目配置 #### 1. 在 `manifest.json` 中配置地图 Key ```json "h5": { "map": { "provider": "qqmap", // 或 "amap" "qqmap": { "key": "YOUR_TENCENT_MAP_KEY" }, "amap": { "key": "YOUR_AMAP_KEY" } } } ``` #### 2. 检查页面权限声明 在页面或组件的 `.json` 文件中添加: ```json { "permission": { "scope.userLocation": { "desc": "需要获取您的位置信息" } } } ``` --- ### 三、代码层解决方案 #### 1. 用户交互触发定位 ```html <button @click="requestLocation">获取位置</button> ``` ```javascript methods: { requestLocation() { uni.getLocation({ type: 'wgs84', success: (res) => { console.log('定位成功:', res); // 调用地图服务时需要传递Key this.reverseGeocode(res.longitude, res.latitude); }, fail: (err) => { console.error('定位失败:', err); } }); }, // 调用地图API示例(高德) reverseGeocode(lng, lat) { uni.request({ url: `https://restapi.amap.com/v3/geocode/regeo`, data: { key: 'YOUR_AMAP_KEY', // 必须传递Key location: `${lng},${lat}` }, success: (res) => { console.log('逆地理编码结果:', res.data); } }); } } ``` --- ### 四、HTTPS 强制要求 1. **生产环境必须使用 HTTPS** 浏览器会阻止 HTTP 页面的定位请求 2. **本地开发启用 HTTPS**: - 在 HBuilderX 中:`运行 → 运行到浏览器 → 勾选 "启用 HTTPS"` - 或使用 `mkcert` 生成本地证书: ```bash npm install -g mkcert mkcert create-ca mkcert create-cert --domain localhost ``` --- ### 五、调试与验证 1. **检查网络请求**: - 在 Chrome DevTools 的 Network 面板查看地图 API 请求 - 确认请求 URL 包含正确的 Key 2. **域名白名单验证**: ```javascript // 临时输出当前域名用于白名单配置 mounted() { console.log('当前域名:', window.location.origin); } ``` 3. **错误处理增强**: ```javascript uni.getLocation({ fail: (err) => { if (err.errMsg.includes("110")) { uni.showToast({ title: "请配置域名白名单: " + location.host, icon: 'none' }); } } }); ``` --- ### 六、常问题排查 | 问题现象 | 解决方案 | |---------|---------| | 本地开发正常,生产环境失败 | 1. 检查生产域名是否加入白名单<br>2. 确认生产环境使用 HTTPS | | 安卓正常,iOS 失败 | 1. iOS 强制要求 HTTPS<br>2. 检查 WKWebView 配置 | | 真机调试失败,模拟器正常 | 1. 确保手机 GPS 已开启<br>2. 检查手机系统定位权限 | | 报错 `network error` | 1. 检查跨域配置<br>2. 使用 uni.request 代替 $jsonp[^3] | > 📌 **关键点**:所有地图 API 请求(包括逆地理编码)都需传递 Key 且域名必须在白名单中[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值