【实战篇】微信公众号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


    总结

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

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

    目录
    相关文章
    |
    2月前
    |
    小程序 JavaScript 前端开发
    uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
    uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
    740 1
    |
    2月前
    |
    自然语言处理 JavaScript 前端开发
    深入理解JavaScript中的闭包:原理与实战
    【10月更文挑战第12天】深入理解JavaScript中的闭包:原理与实战
    |
    15天前
    Next.js 实战 (二):搭建 Layouts 基础排版布局
    本文介绍了作者在Next.js v15.x版本发布后,对一个旧项目的重构过程。文章详细说明了项目开发规范配置、UI组件库选择(最终选择了Ant-Design)、以及使用Ant Design的Layout组件实现中后台布局的方法。文末展示了布局的初步效果,并提供了GitHub仓库链接供读者参考学习。
    Next.js 实战 (二):搭建 Layouts 基础排版布局
    |
    9天前
    |
    存储 网络架构
    Next.js 实战 (四):i18n 国际化的最优方案实践
    这篇文章介绍了Next.js国际化方案,作者对比了网上常见的方案并提出了自己的需求:不破坏应用程序的目录结构和路由。文章推荐使用next-intl库来实现国际化,并提供了详细的安装步骤和代码示例。作者实现了国际化切换时不改变路由,并把当前语言的key存储到浏览器cookie中,使得刷新浏览器后语言不会失效。最后,文章总结了这种国际化方案的优势,并提供Github仓库链接供读者参考。
    |
    10天前
    Next.js 实战 (三):优雅的实现暗黑主题模式
    这篇文章介绍了在Next.js中实现暗黑模式的具体步骤。首先,需要安装next-themes库。然后,在/components/ThemeProvider/index.tsx文件中新增ThemeProvider组件,并在/app/layout.tsx文件中注入该组件。如果想要加入过渡动画,可以修改代码实现主题切换时的动画效果。最后,需要在需要的位置引入ThemeModeButton组件,实现暗黑模式的切换。
    |
    25天前
    |
    设计模式 前端开发 JavaScript
    JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
    本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
    29 2
    |
    2月前
    |
    机器学习/深度学习 自然语言处理 JavaScript
    信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
    在信息论、机器学习和统计学领域中,KL散度(Kullback-Leibler散度)是量化概率分布差异的关键概念。本文深入探讨了KL散度及其相关概念,包括Jensen-Shannon散度和Renyi散度。KL散度用于衡量两个概率分布之间的差异,而Jensen-Shannon散度则提供了一种对称的度量方式。Renyi散度通过可调参数α,提供了更灵活的散度度量。这些概念不仅在理论研究中至关重要,在实际应用中也广泛用于数据压缩、变分自编码器、强化学习等领域。通过分析电子商务中的数据漂移实例,展示了这些散度指标在捕捉数据分布变化方面的独特优势,为企业提供了数据驱动的决策支持。
    123 2
    信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
    |
    2月前
    |
    JavaScript 前端开发 开发者
    探索JavaScript原型链:深入理解与实战应用
    【10月更文挑战第21天】探索JavaScript原型链:深入理解与实战应用
    33 1
    |
    2月前
    |
    SQL 前端开发 JavaScript
    Nest.js 实战 (十五):前后端分离项目部署的最佳实践
    这篇文章介绍了如何使用现代前端框架Vue3和后端Node.js框架Nest.js实现的前后端分离架构的应用,并将其部署到生产环境。文章涵盖了准备阶段,包括云服务器的设置、1Panel面板的安装、数据库的安装、域名的实名认证和备案、SSL证书的申请。在部署Node服务环节,包括了Node.js环境的创建、数据库的配置、用户名和密码的设置、网站信息的填写、静态网站的部署、反向代理的配置以及可能遇到的常见问题。最后,作者总结了部署经验,并希望对读者有所帮助。
    203 11
    |
    2月前
    |
    JSON 前端开发 API
    使用微信JS-SDK调用发票接口的完整开发指南
    本文介绍了如何使用微信JS-SDK的`chooseInvoiceTitle`接口来调用微信的发票功能。通过微信发票接口,用户可以选择开具个人或单位发票,并获取相关发票信息,如抬头、税号、公司地址等。在文中,详细描述了JS-SDK的初始化、发票接口的调用方式,并提供了完整的代码示例。文章还介绍了如何处理返回的发票信息,帮助开发者快速集成微信发票功能。
    93 2