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

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


    总结

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

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

    目录
    相关文章
    |
    小程序 JavaScript 前端开发
    uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
    uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
    5320 1
    |
    机器学习/深度学习 自然语言处理 JavaScript
    信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
    在信息论、机器学习和统计学领域中,KL散度(Kullback-Leibler散度)是量化概率分布差异的关键概念。本文深入探讨了KL散度及其相关概念,包括Jensen-Shannon散度和Renyi散度。KL散度用于衡量两个概率分布之间的差异,而Jensen-Shannon散度则提供了一种对称的度量方式。Renyi散度通过可调参数α,提供了更灵活的散度度量。这些概念不仅在理论研究中至关重要,在实际应用中也广泛用于数据压缩、变分自编码器、强化学习等领域。通过分析电子商务中的数据漂移实例,展示了这些散度指标在捕捉数据分布变化方面的独特优势,为企业提供了数据驱动的决策支持。
    2674 2
    信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
    |
    JSON 前端开发 API
    使用微信JS-SDK调用发票接口的完整开发指南
    本文介绍了如何使用微信JS-SDK的`chooseInvoiceTitle`接口来调用微信的发票功能。通过微信发票接口,用户可以选择开具个人或单位发票,并获取相关发票信息,如抬头、税号、公司地址等。在文中,详细描述了JS-SDK的初始化、发票接口的调用方式,并提供了完整的代码示例。文章还介绍了如何处理返回的发票信息,帮助开发者快速集成微信发票功能。
    1101 2
    |
    移动开发 安全 API
    微信H5支付--微信JS-SDK支付--点金计划
    本文详细介绍了微信H5支付和JS-SDK支付的原理、配置和开发流程,涵盖了H5支付在移动端浏览器外唤起微信支付的细节,以及JS-SDK支付在微信内置浏览器中完成支付的相关注意事项。文章还针对微信支付常见问题,提供了解决方案和代码示例。最后,文章深入解析了微信支付点金计划,包括商家小票的自定义开发、API接口以及支付成功后的页面展示逻辑,为开发者提供了完整的开发参考。
    1960 0
    微信H5支付--微信JS-SDK支付--点金计划
    |
    JavaScript 前端开发 UED
    JavaScript 地址信息与页面跳转
    JavaScript 地址信息与页面跳转
    335 2
    |
    小程序 JavaScript
    微信小程序之input组件及其获取用户输入信息
    微信小程序之input组件及其获取用户输入信息
    508 2
    |
    前端开发 JavaScript Go
    JS基础:输出信息的5种方式详解
    JS基础:输出信息的5种方式详解
    582 1
    |
    JavaScript 前端开发 UED
    JavaScript 地址信息与页面跳转
    JavaScript 地址信息与页面跳转
    302 0
    |
    自然语言处理 JavaScript 前端开发
    【走向世界】Vue.js国际化:打造无国界应用,让爱与信息跨越语言的边界!
    【8月更文挑战第30天】本文详细介绍了Vue.js中实现国际化的多种方法及最佳实践。通过使用`vue-i18n`等第三方库,开发者能够轻松地为应用添加多语言支持,优化用户体验并扩大市场覆盖范围。文章涵盖从基本配置、动态加载语言包到考虑文化差异等方面的内容,帮助读者构建真正全球化且无缝多语言体验的应用程序。
    608 0