业务逻辑如下:
1 云函数A获取客户名称列表;
2 云函数B通过调用腾讯地图WebService API实现地址解析(地址转坐标),试图实现输入“客户名称”,返回客户名称所在地的经纬度坐标(X,Y)。
https://lbs.qq.com/webservice_v1/guide-geocoder.html
// 云函数入口文件const cloud = require('wx-server-sdk')//const request = require('request')const rp = require('request-promise')//const soap = require('soap')cloud.init()// 云函数入口函数exports.main = async (event, context) => { const wxContext = cloud.getWXContext() var latitudeAndLongitude = null //request.get() var options = { uri: 'https://apis.map.qq.com/ws/geocoder/v1/?address=' + event.address + '&key=' + event.developerKey, method: 'GET', json: true } latitudeAndLongitude = await rp(options).then(function (res) { return res }).catch(function (err) { return err }) return { event, openid: wxContext.OPENID, appid: wxContext.APPID, unionid: wxContext.UNIONID, latitudeAndLongitude: latitudeAndLongitude }} |
报错情况:
云函数B代码如下:
// 云函数入口文件
const cloud = require('wx-server-sdk')
const rp = require('request-promise')
//const soap = require('soap')
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
var latitudeAndLongitude = null
//request.get()
var options = {
uri: 'https://apis.map.qq.com/ws/geocoder/v1/?address=' + event.address + '&key=' + event.developerKey,
method: 'GET',
json: true
}
latitudeAndLongitude = await rp(options).then(function (res) {
return res
}).catch(function (err) {
return err
})
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
latitudeAndLongitude: latitudeAndLongitude
}
}

可以使用 encodeURI() 函数可把字符串作为 URI 进行编码,传递中文到第三方接口不会将中文乱码
var options = {
uri:encodeURI('https://apis.map.qq.com/ws/geocoder/v1/?address=' + address +'&key=' + keys.tencentkey),
method:'GET',
json:true
}
此问题目前并未根本解决,只是采取了一种变通实现的方式实现:
1 调用云函数,获取“公司简称”列表;
2 本地处理此列表,将已有地理坐标信息的数据筛除;
3 本地通过腾讯地图的“qqmap-wx-jssdk”,循环列表,根据“公司名称”,查询对应的纬经度信息,并将成功查询到纬经度信息的“_id”、“lat”和“lng”装入列表中返回;
4 调用云函数,将含“_id”、“lat”和“lng”数据(原地理坐标为[0,0],后成功查询到纬经度信息的“公司名称”)的列表更新到云数据库companies数据集的对应记录。
1、建议先拼装URI后,LOG出来看结果;
2、如果URI字符串没问题,去在线测试看结果。
然后再来讨论你以上的代码问题。
{"status": 0,"message": "query ok","result": {"title": "攀枝花市正源科技有限责任公司","location": {"lng": 102.050583,"lat": 26.80743},"ad_info": {"adcode": "510421"},"address_components": {"province": "四川省","city": "攀枝花市","district": "米易县","street": "","street_number": ""},"similarity": 0.8,"deviation": 1000,"reliability": 3,"level": 11}}