收藏
回答

小程序有关于引入第三方JS问题;(老板的刀已经摁住.问题已经解决参考请有序入场)

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 需求 qqmap-wx-jssdk.js 客户端 6.5.3 2.0.0

当第三方接入 第三方接口调度了wx.request的时候. 请注意 一定要添加域名白名单;

在调试中;不需要任何白名单即可调试成功;

-----------------------------------------------------------老板的刀块摁不住了.. T.T!!!!

- 需求的场景描述(希望解决的问题)

小程序 因为没有业务接口可以直接获取定位地址的.都要选填.我们要实现自动定位的功能.

也就是一进主页就可以完成自动定位.也就实现这个效果. 以下为配图   但是在测试中出现问题了



在测试中. 我们小程序上传了体验版  在正常访问的时候 好像调不出来. 授权之后.. 就再也没了反应..

如果开启了调试模式 又一切正常.. 关闭调试模式又调不到方法;...

场景如下:

打开调试.正常访问..一切正常....


关闭调试.

仿佛调不到接口似得... 我这都不知道出了什么问题..调试都调不出来..


在此. 把地图反馈那个接口反馈放上来. 该地图接口为腾讯地图.;

我担心如果上传上去正式 地图调不起来.我本地测试没问题; 在体验版打开小程序调试

/**
 * 微信小程序JavaScriptSDK
 *
 * @version 1.0
 * @date 2017-01-10
 * @author jaysonzhou@tencent.com
 */
 
var ERROR_CONF = {
    KEY_ERR: 311,
    KEY_ERR_MSG: 'key格式错误',
    PARAM_ERR: 310,
    PARAM_ERR_MSG: '请求参数信息有误',
    SYSTEM_ERR: 600,
    SYSTEM_ERR_MSG: '系统错误',
    WX_ERR_CODE: 1000,
    WX_OK_CODE: 200
};
var BASE_URL = 'https://apis.map.qq.com/ws/';
var URL_SEARCH = BASE_URL + 'place/v1/search';
var URL_SUGGESTION = BASE_URL + 'place/v1/suggestion';
var URL_GET_GEOCODER = BASE_URL + 'geocoder/v1/';
var URL_CITY_LIST = BASE_URL + 'district/v1/list';
var URL_AREA_LIST = BASE_URL + 'district/v1/getchildren';
var URL_DISTANCE = BASE_URL + 'distance/v1/';
var Utils = {
    /**
     * 得到终点query字符串
     * @param {Array|String} 检索数据
     */
    location2query(data) {
        if (typeof data == 'string') {
            return data;
        }
        var query = '';
        for (var i = 0; i < data.length; i++) {
            var d = data[i];
            if (!!query) {
                query += ';';
            }
            if (d.location) {
                query = query + d.location.lat + ',' + d.location.lng;
            }
            if (d.latitude && d.longitude) {
                query = query + d.latitude + ',' + d.longitude;
            }
        }
        return query;
    },
 
    /**
     * 使用微信接口进行定位
     */
    getWXLocation(success, fail, complete) {
        wx.getLocation({
            type: 'gcj02',
            success: success,
            fail: fail,
            complete: complete
        });
    },
 
    /**
     * 获取location参数
     */
    getLocationParam(location) {
        if (typeof location == 'string') {
            var locationArr = location.split(',');
            if (locationArr.length === 2) {
                location = {
                    latitude: location.split(',')[0],
                    longitude: location.split(',')[1]
                };
            } else {
                location = {};
            }
        }
        return location;
    },
 
    /**
     * 回调函数默认处理
     */
    polyfillParam(param) {
        param.success = param.success || function () { };
        param.fail = param.fail || function () { };
        param.complete = param.complete || function () { };
    },
 
    /**
     * 验证param对应的key值是否为空
     *
     * @param {Object} param 接口参数
     * @param {String} key 对应参数的key
     */
    checkParamKeyEmpty(param, key) {
        if (!param[key]) {
            var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + key +'参数格式有误');
            param.fail(errconf);
            param.complete(errconf);
            return true;
        }
        return false;
    },
 
    /**
     * 验证参数中是否存在检索词keyword
     *
     * @param {Object} param 接口参数
     */
    checkKeyword(param){
        return !this.checkParamKeyEmpty(param, 'keyword');
    },
 
    /**
     * 验证location值
     *
     * @param {Object} param 接口参数
     */
    checkLocation(param) {
        var location = this.getLocationParam(param.location);
        if (!location || !location.latitude || !location.longitude) {
            var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + ' location参数格式有误')
            param.fail(errconf);
            param.complete(errconf);
            return false;
        }
        return true;
    },
 
    /**
     * 构造错误数据结构
     * @param {Number} errCode 错误码
     * @param {Number} errMsg 错误描述
     */
    buildErrorConfig(errCode, errMsg) {
        return {
            status: errCode,
            message: errMsg
        };
    },
 
    /**
     * 构造微信请求参数,公共属性处理
     *
     * @param {Object} param 接口参数
     * @param {Object} param 配置项
     */
    buildWxRequestConfig(param, options) {
        var that = this;
        options.header = { "content-type": "application/json" };
        options.method = 'GET';
        options.success = function (res) {
            var data = res.data;
            if (data.status === 0) {
                param.success(data);
            } else {
                param.fail(data);
            }
        };
        options.fail = function (res) {
            res.statusCode = ERROR_CONF.WX_ERR_CODE;
            param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, result.errMsg));
        };
        options.complete = function (res) {
            var statusCode = +res.statusCode;
            switch(statusCode) {
                case ERROR_CONF.WX_ERR_CODE: {
                    param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
                    break;
                }
                case ERROR_CONF.WX_OK_CODE: {
                    var data = res.data;
                    if (data.status === 0) {
                        param.complete(data);
                    } else {
                        param.complete(that.buildErrorConfig(data.status, data.message));
                    }
                    break;
                }
                default:{
                    param.complete(that.buildErrorConfig(ERROR_CONF.SYSTEM_ERR, ERROR_CONF.SYSTEM_ERR_MSG));
                }
 
            }
        }
        return options;
    },
 
    /**
     * 处理用户参数是否传入坐标进行不同的处理
     */
    locationProcess(param, locationsuccess, locationfail, locationcomplete) {
        var that = this;
        locationfail = locationfail || function (res) {
            res.statusCode = ERROR_CONF.WX_ERR_CODE;
            param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
        };
        locationcomplete = locationcomplete || function (res) {
            if (res.statusCode == ERROR_CONF.WX_ERR_CODE) {
                param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
            }
        };
        if (!param.location) {
            that.getWXLocation(locationsuccess, locationfail, locationcomplete);
        } else if (that.checkLocation(param)) {
            var location = Utils.getLocationParam(param.location);
            locationsuccess(location);
        }
    }
}
 
 
class QQMapWX {
 
    /**
     * 构造函数
     *
     * @param {Object} options 接口参数,key 为必选参数
     */
    constructor(options) {
        if (!options.key) {
            throw Error('key值不能为空');
        }
        this.key = options.key;
    }
 
    /**
     * POI周边检索
     *
     * @param {Object} options 接口参数对象
     *
     * 参数对象结构可以参考
     * @see http://lbs.qq.com/webservice_v1/guide-search.html
     */
    search(options) {
        var that = this;
        options = options || {};
 
        Utils.polyfillParam(options);
 
        if (!Utils.checkKeyword(options)) {
            return;
        }
 
        var requestParam = {
            keyword: options.keyword,
            orderby: options.orderby || '_distance',
            page_size: options.page_size || 10,
            page_index: options.page_index || 1,
            output: 'json',
            key: that.key
        };
 
        if (options.address_format) {
            requestParam.address_format = options.address_format;
        }
 
        if (options.filter) {
            requestParam.filter = options.filter;
        }
 
        var distance = options.distance || "1000";
        var auto_extend = options.auto_extend || 1;
 
        var locationsuccess = function (result) {
            requestParam.boundary = "nearby(" + result.latitude + "," + result.longitude + "," + distance + "," + auto_extend +")";
            wx.request(Utils.buildWxRequestConfig(options, {
                url: URL_SEARCH,
                data: requestParam
            }));
        }
        Utils.locationProcess(options, locationsuccess);
    }
 
    /**
     * sug模糊检索
     *
     * @param {Object} options 接口参数对象
     *
     * 参数对象结构可以参考
     * http://lbs.qq.com/webservice_v1/guide-suggestion.html
     */
    getSuggestion(options) {
        var that = this;
        options = options || {};
        Utils.polyfillParam(options);
 
        if (!Utils.checkKeyword(options)) {
            return;
        }
 
        var requestParam = {
            keyword: options.keyword,
            region: options.region || '全国',
            region_fix: options.region_fix || 0,
            policy: options.policy || 0,
            output: 'json',
            key: that.key
        };
        wx.request(Utils.buildWxRequestConfig(options, {
            url: URL_SUGGESTION,
            data: requestParam
        }));
    }
 
    /**
     * 逆地址解析
     *
     * @param {Object} options 接口参数对象
     *
     * 请求参数结构可以参考
     * http://lbs.qq.com/webservice_v1/guide-gcoder.html
     */
    reverseGeocoder(options) {
        var that = this;
        options = options || {};
        Utils.polyfillParam(options);
        var requestParam = {
            coord_type: options.coord_type || 5,
            get_poi: options.get_poi || 0,
            output: 'json',
            key: that.key
        };
        if (options.poi_options) {
            requestParam.poi_options = options.poi_options
        }
 
        var locationsuccess = function (result) {
            requestParam.location = result.latitude + ',' + result.longitude;
            wx.request(Utils.buildWxRequestConfig(options, {
                url: URL_GET_GEOCODER,
                data: requestParam
            }));
        };
        Utils.locationProcess(options, locationsuccess);
    }
 
    /**
     * 地址解析
     *
     * @param {Object} options 接口参数对象
     *
     * 请求参数结构可以参考
     * http://lbs.qq.com/webservice_v1/guide-geocoder.html
     */
    geocoder(options) {
        var that = this;
        options = options || {};
        Utils.polyfillParam(options);
 
        if (Utils.checkParamKeyEmpty(options, 'address')) {
            return;
        }
 
        var requestParam = {
            address: options.address,
            output: 'json',
            key: that.key
        };
 
        wx.request(Utils.buildWxRequestConfig(options, {
            url: URL_GET_GEOCODER,
            data: requestParam
        }));
    }
 
 
    /**
     * 获取城市列表
     *
     * @param {Object} options 接口参数对象
     *
     * 请求参数结构可以参考
     * http://lbs.qq.com/webservice_v1/guide-region.html
     */
    getCityList(options) {
        var that = this;
        options = options || {};
        Utils.polyfillParam(options);
        var requestParam = {
            output: 'json',
            key: that.key
        };
 
        wx.request(Utils.buildWxRequestConfig(options, {
            url: URL_CITY_LIST,
            data: requestParam
        }));
    }
 
    /**
     * 获取对应城市ID的区县列表
     *
     * @param {Object} options 接口参数对象
     *
     * 请求参数结构可以参考
     * http://lbs.qq.com/webservice_v1/guide-region.html
     */
    getDistrictByCityId(options) {
        var that = this;
        options = options || {};
        Utils.polyfillParam(options);
 
        if (Utils.checkParamKeyEmpty(options, 'id')) {
            return;
        }
 
        var requestParam = {
            id: options.id || '',
            output: 'json',
            key: that.key
        };
 
        wx.request(Utils.buildWxRequestConfig(options, {
            url: URL_AREA_LIST,
            data: requestParam
        }));
    }
 
    /**
     * 用于单起点到多终点的路线距离(非直线距离)计算:
     * 支持两种距离计算方式:步行和驾车。
     * 起点到终点最大限制直线距离10公里。
     *
     * @param {Object} options 接口参数对象
     *
     * 请求参数结构可以参考
     * http://lbs.qq.com/webservice_v1/guide-distance.html
     */
    calculateDistance(options) {
        var that = this;
        options = options || {};
        Utils.polyfillParam(options);
 
        if (Utils.checkParamKeyEmpty(options, 'to')) {
            return;
        }
 
        var requestParam = {
            mode: options.mode || 'walking',
            to: Utils.location2query(options.to),
            output: 'json',
            key: that.key
        };
 
        var locationsuccess = function (result) {
            requestParam.from = result.latitude + ',' + result.longitude;
            wx.request(Utils.buildWxRequestConfig(options, {
                url: URL_DISTANCE,
                data: requestParam
            }));
        }
        if (options.from) {
            options.location = options.from;
        }
         
        Utils.locationProcess(options, locationsuccess);
    }
}
 
module.exports = QQMapWX;



- 希望提供的能力

出现这情况 .不知道怎么解决了!

最后一次编辑于  2018-09-12  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

36 个回答

  • 阿Q
    阿Q
    2018-09-10

    域名!!!!!!开启调试默认不检测域名啊 !!!!!

    2018-09-10
    赞同 44
    回复 22
    • 陈yob
      陈yob
      2018-09-10

      1、效果 

      不明白他为啥直接返回 php 文件里面的代码?? 而不是返回 php 返回的 json 数据呢? 还望大神赐教,我是后端小白



      2、php文件


      2018-09-10
      赞同
      回复
    • 阿Q
      阿Q
      2018-09-11回复陈yob

      我不知啊,我是前端小白

      2018-09-11
      赞同
      回复
    • f番茄花园
      f番茄花园
      2018-09-11回复陈yob

      说明你没起php的服务器 只起了一个静态资源服务器(类似于nginx这样的东西) php文件没送到解析器做解析 直接当成静态资源往外丢了

      2018-09-11
      赞同
      回复
    • 陈yob
      陈yob
      2018-09-11回复f番茄花园

      可是我已经在服务器下载了 php  程序,怎么怎能让服务器遇到 .php 结尾的文件当做 php 来解析呢?有没有比较详细的文档、教程呀? 因为我服务器才接触几天,毕竟才大学生

      2018-09-11
      赞同
      回复
    • f番茄花园
      f番茄花园
      2018-09-11回复陈yob

      好好看一遍php环境配置教程吧……只言片语我很难教你

      2018-09-11
      赞同
      回复
    查看更多(17)
  • 天道酬勤
    天道酬勤
    2018-09-07

    求各位老大帮助. 老板的刀我摁不住了

    2018-09-07
    赞同 11
    回复 1
    • 小林子
      小林子
      2018-09-07

      试着放手

      2018-09-07
      赞同 88
      回复
  • 卢霄霄
    卢霄霄
    2018-09-07

    首先问下,你加了白名单的吧

    2018-09-07
    赞同 11
    回复 4
    • 天道酬勤
      天道酬勤
      2018-09-07

      白名单?

      2018-09-07
      赞同 11
      回复
    • 卢霄霄
      卢霄霄
      2018-09-07回复天道酬勤


      2018-09-07
      赞同
      回复
    • 天道酬勤
      天道酬勤
      2018-09-07回复卢霄霄

      大哥 是不是地图白名单要加地址?

      2018-09-07
      赞同 11
      回复
    • 卢霄霄
      卢霄霄
      2018-09-07回复天道酬勤

      你wx.request 的地址都要加

      2018-09-07
      赞同
      回复
  • 是柿子啊
    是柿子啊
    2018-09-07

    你好,麻烦检查下你的相关域名是否已经配置好了

    2018-09-07
    赞同 11
    回复 1
    • 天道酬勤
      天道酬勤
      2018-09-07

      大哥 是不是地图白名单要加地址?

      2018-09-07
      赞同
      回复
  • 十
    2018-09-10

    https://apis.map.qq.com

    你这个域名配置到合法域名中了吗?

    高德地图的API中使用的域名就需要配置到合法域名中,腾讯地图应该也是一样需要的。

    把这个配置一下应该就可以了

    2018-09-10
    赞同 11
    回复
  • 小川
    小川
    2018-09-11

    服务器域名,业务域名添加了吗

    2018-09-11
    赞同 11
    回复
  • 海阔天空
    海阔天空
    2018-09-11

    夺刀反杀

    2018-09-11
    赞同 11
    回复
  • Yrobot
    Yrobot
    02-15

    这明显请求没加白名单啊,所以真机上只有打开调试才能正常请求。

    02-15
    赞同
    回复