天气查询提供两个方法:weather 查询国内天气,weatherAbroad 查询海外天气。两者参数与返回结构完全一致,均可返回实况天气与未来 7 天预报。不传 location 时按当前定位点查询。
weather 与 weatherAbroad 共用以下参数:
其余参数与百度天气服务请求参数一致,会原样透传。
success 回调入参:
weatherData 字段:
forecast 数组元素字段:
失败时走 fail 回调,入参统一为 { errMsg, message, statusCode, rawMessage },字段含义见"服务介绍 → 统一的回调约定"。
若返回 statusCode 为 240,说明该 AK 未开通天气服务,请到控制台为应用勾选"天气"服务。
查询当前定位点的实况天气与 7 天预报:
// pages/index/index.js// 引用百度地图微信小程序 JSAPI 模块const { BMapWX } = require('../../libs/bmap-wx.min.js');const bmap = new BMapWX({ ak: '您的ak' });// updatedAt 是接口原始紧凑格式 "20260903171500",展示前需自行格式化function formatUptime(uptime) {const m = String(uptime || '').match(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/);return m ? m[1] + '-' + m[2] + '-' + m[3] + ' ' + m[4] + ':' + m[5] : uptime;}Page({data: {city: '',now: null,forecast: [],error: '',},onLoad() {// 不传 location 时查询当前定位点所在城市bmap.weather({data_type: 'all', // all 实况 + 7 天预报;now 仅实况success: (res) => {const w = res.weatherData;this.setData({city: [w.province, w.currentCity, w.district].filter(Boolean).join(' '),now: {desc: w.weatherDesc,temperature: w.temperature,feelsLike: w.feelsLike,humidity: w.humidity, // 数值,不含 % 后缀wind: w.windDir + w.windClass,aqi: w.aqi,updatedAt: formatUptime(w.updatedAt),},forecast: (w.forecast || []).map((f, i) => ({week: i === 0 ? '今天' : String(f.week || '').replace('星期', '周'),textDay: f.textDay,high: f.high,low: f.low,})),});},fail: err => this.setData({ error: '天气查询失败:' + (err.message || err.errMsg) }),});},});
<!-- pages/index/index.wxml --><view wx:if="{{now}}"><view>{{city}}</view><view>{{now.temperature}}℃</view><view>{{now.desc}} · 体感 {{now.feelsLike}}℃</view><view>湿度 {{now.humidity}}% · {{now.wind}} · AQI {{now.aqi}}</view><view>更新于 {{now.updatedAt}}</view></view><view wx:for="{{forecast}}" wx:key="index"><text>{{item.week}}</text><text>{{item.textDay}}</text><text>{{item.low}}° / {{item.high}}°</text></view><view wx:if="{{error}}">{{error}}</view>
查询海外城市改用 weatherAbroad,参数与返回结构不变:
// pages/index/index.js// 海外天气:只接受"经度,纬度",不支持城市名bmap.weatherAbroad({location: '139.7671,35.6812', // 东京success: res => console.log(res.weatherData.currentCity, res.weatherData.temperature),fail: err => console.log(err.message || err.errMsg),});
下图为官方 Demo"天气查询"的运行界面,扫描下方小程序码即可直接体验。Demo 是产品化示例,界面比上面的示例代码精致,但调用方式与返回数据完全一致。



updatedAt 是接口原始紧凑格式,SDK 原样透传不做加工,展示前请自行格式化,示例中的 formatUptime 可直接复用。
humidity 是不带百分号的数值,展示时需自行拼接 %。
只需要实况数据时传 data_type: 'now' 可减小响应体积,此时 forecast 为空数组。
aqi 与 vis 并非所有城市都返回,渲染前需做空值判断。
查询海外城市必须用 weatherAbroad 并传经纬度;weather 仅覆盖国内。
未显式传 location 时会调用 wx.getLocation,请先在 app.json 中声明 getLocation 隐私接口,见配置环境。
上一篇
下一篇