【实战篇】微信公众号JS-SDK获取当前经纬度及地址信息

本文涉及的产品
.cn 域名,1个 12个月
简介: 【实战篇】微信公众号JS-SDK获取当前经纬度及地址信息


前言

这篇文章带大家掌握 从0到1掌握微信公众平台js-sdk调用

    • 微信公众平台js-sdk调用到底哪几步
    • 安全域名怎么配置
    • 代码怎么写
    • 出了问题怎么查找

    例如:随着微信生态的不断发展,基于微信平台的网页开发业务场景也越来越多,很多人都开启了学习微信网页开发,本文就介绍了微信网页开发的基础内容。

    一、微信 JS-SDK是什么?

    微信 JS-SDK 是微信公众平台 面向网页开发者提供的基于微信内的网页开发工具包。

    通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。

    二、使用步骤

    1.绑定域名

    先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

    备注:登录后可在“开发者中心”查看对应的接口权限

    测试号设置:

    微信公众平台

    image.gif编辑

    正式账号设置:

    image.gif编辑

    image.gif编辑

    测试账号和正式账号区别:

    测试账户可以设置本机ip方便调试,正式账户设置时需要填写备案过的域名地址,开发调试时候可以先用测试号,开发完成后再切换成正式环境

    2.引入 JS 文件

    在需要调用 JS 接口的页面引入如下 JS 文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.6.0.js

    如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/open/js/jweixin-1.6.0.js (支持https)。

    3.通过 config 接口注入权限验证配置

    此处只需要把当前域名传给后台,后台去调用JS-SDK使用权限签名算法校验通过后,将timestamp、 nonceStr、signature和当前微信公众号的appId返回给前端,前端在wx.config里面验证成功后在ready方法调用微信的wx.getLocation方法即可,其他api同理,这里以获取经纬度为例:

    代码如下(示例):

    getWxSign() {
            let scope = this;
            var surl = encodeURIComponent(window.location.href.split("#")[0]);
            wxSign(surl).then((res) => {
              if (res.success) {
                wx.config({
                  debug: false,
                  appId: res.data.appId,
                  timestamp: res.data.timestamp,
                  nonceStr: res.data.nonceStr,
                  signature: res.data.signature,
                  jsApiList: ["getLocation"],
                });
                wx.ready(() => {
                  wx.getLocation({
                    success: function(res) {
                      let param = {
                        latitude: res.latitude,
                        longitude: res.longitude,
                      };
                      getAddress(param).then((response) => {
                        if (response) {
                          let obj = {
                            latitude: res.latitude,
                            longitude: res.longitude,
                            address: response.result
                              .formatted_address,
                          };
                          scope.addressName = obj.address;
                          scope.formInfo.lat = obj.latitude;
                          scope.formInfo.lng = obj.longitude;
                          scope.formInfo.dz = JSON.stringify(obj);
                        }
                      });
                    },
                    cancel: function(res) {
                      alert("用户拒绝授权获取地理位置");
                    },
                  });
                });
              }
            });
          },

    image.gif

    这是我们获取的经纬度,再通过腾讯地图的API接口或者天地图的api接口,将经纬度信息转为具体的地址信息即可

    {latitude: 00.00000, longitude: 000.00000, errMsg: "getLocation:ok"}
      errMsg: "getLocation:ok"  //接口成功
      latitude: 00.00000      //纬度
      longitude: 000.00000    //经度
    __proto__: Object

    image.gif

    //编码逆解析
    const getAddress=(opt)=>{
      return http.get(`http://api.tianditu.gov.cn/geocoder?postStr={'lon':${opt.longitude},'lat':${opt.latitude},'ver':1}&type=geocode&tk=${indexConfig.tdtMapKey}`)
    }

    image.gif

    4、在这过程中我遇到的问题及解决方法(提示错误invalid signature)

    (1)在web 开发者工具 中进行调试,获取错误的提示信息(因为做的是h5移动端网页,开始在浏览器调试的时候没能获取到具体的报错信息,后面才知道有web开发者工具)

    image.gif编辑

    (2)根据官网上的JSSDK文档的附件5 进行错误排查(这部分我是让后端同事排查的,因为config信息是后端同事给的),发现我的失败是因为用来获取签名的URL不对,导致的invalid signature,因为我的在公众上访问时后端会在地址栏传参数给前端,但是后端在获取签名的时候没有把参数部分一起加上去,所以导致了这个错,我们解决这个问题的方法就是前端截取当前访问的URL(去掉hash部分),传给后端,后端再根据这个URL获取签名。

    image.gif编辑

    附录1:

    附录2 官方DEMO页面和示例代码

    微信JS-SDK Demo


    总结

    希望今天的文章对于和我一样的开发者能起到帮助。。

    ✨原创不易,还希望各位大佬支持一下 !
    👍 点赞,你的认可是我创作的动力!
    ⭐️收藏,你的青睐是我努力的方向!
    ✏️评论,你的意见是我进步的财富!

    目录
    相关文章
    |
    28天前
    |
    自然语言处理 JavaScript 前端开发
    深入理解JavaScript中的闭包:原理与实战
    【10月更文挑战第12天】深入理解JavaScript中的闭包:原理与实战
    |
    16天前
    |
    IDE 开发工具
    鸿蒙Flutter实战:11-使用 Flutter SDK 3.22.0
    本文介绍了如何使用 Flutter SDK 3.22.0 搭建鸿蒙开发环境。首先安装 Flutter SDK 3.22.0,并通过 FVM 管理多个版本。接着配置项目,使用 `fvm use custom_3.22.0` 设置自定义 SDK 版本。添加鸿蒙平台支持并进行项目签名,最后通过 `fvm flutter run` 运行项目。详细步骤包括安装、项目配置、签名和运行,确保开发环境顺利搭建。
    41 7
    鸿蒙Flutter实战:11-使用 Flutter SDK 3.22.0
    |
    19天前
    |
    JavaScript 前端开发 开发者
    探索JavaScript原型链:深入理解与实战应用
    【10月更文挑战第21天】探索JavaScript原型链:深入理解与实战应用
    26 1
    |
    1月前
    |
    SQL 前端开发 JavaScript
    Nest.js 实战 (十五):前后端分离项目部署的最佳实践
    这篇文章介绍了如何使用现代前端框架Vue3和后端Node.js框架Nest.js实现的前后端分离架构的应用,并将其部署到生产环境。文章涵盖了准备阶段,包括云服务器的设置、1Panel面板的安装、数据库的安装、域名的实名认证和备案、SSL证书的申请。在部署Node服务环节,包括了Node.js环境的创建、数据库的配置、用户名和密码的设置、网站信息的填写、静态网站的部署、反向代理的配置以及可能遇到的常见问题。最后,作者总结了部署经验,并希望对读者有所帮助。
    119 11
    |
    29天前
    |
    JSON 前端开发 API
    使用微信JS-SDK调用发票接口的完整开发指南
    本文介绍了如何使用微信JS-SDK的`chooseInvoiceTitle`接口来调用微信的发票功能。通过微信发票接口,用户可以选择开具个人或单位发票,并获取相关发票信息,如抬头、税号、公司地址等。在文中,详细描述了JS-SDK的初始化、发票接口的调用方式,并提供了完整的代码示例。文章还介绍了如何处理返回的发票信息,帮助开发者快速集成微信发票功能。
    70 2
    |
    29天前
    |
    移动开发 安全 API
    微信H5支付--微信JS-SDK支付--点金计划
    本文详细介绍了微信H5支付和JS-SDK支付的原理、配置和开发流程,涵盖了H5支付在移动端浏览器外唤起微信支付的细节,以及JS-SDK支付在微信内置浏览器中完成支付的相关注意事项。文章还针对微信支付常见问题,提供了解决方案和代码示例。最后,文章深入解析了微信支付点金计划,包括商家小票的自定义开发、API接口以及支付成功后的页面展示逻辑,为开发者提供了完整的开发参考。
    29 0
    微信H5支付--微信JS-SDK支付--点金计划
    |
    1月前
    |
    存储 JavaScript 前端开发
    前端开发:Vue.js入门与实战
    【10月更文挑战第9天】前端开发:Vue.js入门与实战
    |
    11天前
    |
    前端开发 JavaScript
    JavaScript新纪元:ES6+特性深度解析与实战应用
    【10月更文挑战第29天】本文深入解析ES6+的核心特性,包括箭头函数、模板字符串、解构赋值、Promise、模块化和类等,结合实战应用,展示如何利用这些新特性编写更加高效和优雅的代码。
    26 0
    |
    1月前
    |
    数据采集 JSON 前端开发
    JavaScript逆向爬虫实战分析
    JavaScript逆向爬虫实战分析
    |
    1月前
    |
    前端开发 JavaScript API
    JavaScript逆向爬取实战——使用Python实现列表页内容爬取(二)
    JavaScript逆向爬取实战——使用Python实现列表页内容爬取(二)

    热门文章

    最新文章