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


    总结

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

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

    目录
    相关文章
    |
    3月前
    |
    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` 运行项目。详细步骤包括安装、项目配置、签名和运行,确保开发环境顺利搭建。
    239 7
    鸿蒙Flutter实战:11-使用 Flutter SDK 3.22.0
    |
    4月前
    |
    小程序 JavaScript 前端开发
    uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
    uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
    930 1
    |
    4月前
    |
    JavaScript 小程序 开发者
    uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
    uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
    756 0
    |
    4月前
    |
    JSON 前端开发 API
    使用微信JS-SDK调用发票接口的完整开发指南
    本文介绍了如何使用微信JS-SDK的`chooseInvoiceTitle`接口来调用微信的发票功能。通过微信发票接口,用户可以选择开具个人或单位发票,并获取相关发票信息,如抬头、税号、公司地址等。在文中,详细描述了JS-SDK的初始化、发票接口的调用方式,并提供了完整的代码示例。文章还介绍了如何处理返回的发票信息,帮助开发者快速集成微信发票功能。
    138 2
    |
    4月前
    |
    移动开发 安全 API
    微信H5支付--微信JS-SDK支付--点金计划
    本文详细介绍了微信H5支付和JS-SDK支付的原理、配置和开发流程,涵盖了H5支付在移动端浏览器外唤起微信支付的细节,以及JS-SDK支付在微信内置浏览器中完成支付的相关注意事项。文章还针对微信支付常见问题,提供了解决方案和代码示例。最后,文章深入解析了微信支付点金计划,包括商家小票的自定义开发、API接口以及支付成功后的页面展示逻辑,为开发者提供了完整的开发参考。
    256 0
    微信H5支付--微信JS-SDK支付--点金计划
    |
    4月前
    |
    小程序 JavaScript
    微信小程序之input组件及其获取用户输入信息
    微信小程序之input组件及其获取用户输入信息
    95 1
    |
    6月前
    |
    运维 分布式计算 DataWorks
    DataWorks产品使用合集之sdk的下载地址在哪里
    DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
    |
    6月前
    |
    小程序 JavaScript
    |
    6月前
    |
    缓存 JavaScript 前端开发
    微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)
    微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)更新时间(2020-10-29)
    |
    9天前
    |
    人工智能 开发框架 机器人
    AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
    AstrBot 是一个开源的多平台聊天机器人及开发框架,支持多种大语言模型和消息平台,具备多轮对话、语音转文字等功能。
    2185 13
    AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程

    热门文章

    最新文章

  • 1
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 2
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    【01】完整开发即构美颜sdk的uni官方uts插件—让所有开发者可以直接使用即构美颜sdk的能力-优雅草卓伊凡
  • 4
    JavaScript闭包深入剖析:性能剖析与优化技巧
  • 5
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
  • 6
    JavaWeb JavaScript ③ JS的流程控制和函数
  • 7
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
  • 8
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
  • 9
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
  • 10
    【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子