微信js-sdk开发获取签名和获取地理位置接口示例

###微信js-sdk开发获取签名和获取地理位置接口示例

前言:在做微信公众号开发时需要获取用户的地理位置信息,之前通过高德或者百度、腾讯等地图的api时发现经常获取不到,毕竟第三方的东西,后来改为采用微信内置的js-sdk中的获取地理位置接口,在这主要记录下签名的获取(麻烦点)和一个获取地理位置的例子。

准备工作:
  1. 微信测试号appid和appsecret
    获取地址:微信测试账号获取
  2. 在测试账号里先填写接口配置信息和js接口安全域名(这个是必须的)
  3. 示例:页面中需要点击图标获取地理位置信息
    流程如下:
    点击按钮->触发事件去获取->ajax异步获取签名->拿签名去获取地理位置->得到经纬度->高德api再去逆地理编码获取真实地址信息
前端代码如下:(主要是使用js-sdk,直接拿来用就行,换下ajax请求地址)
<!--引入js-sdk-->
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>

<!--点击图标触发事件-->
<img onclick="getCurrentLocation()" src="__PUBLIC__/img/gap.png">

//根据微信js-sdk内置接口 getCurrentLocation
function getCurrentLocation(){
    //这个是获取签名时的url,动态变化,所以在前段获取,后端传入直接使用
    var url = location.href.split('#')[0];
    var ajaxUrl = '/*****/getWxsdkSign';   //ajax异步获取微信签名sign
    $.get(ajaxUrl, {url : url}, function(json){
        if(json.code == 0){
            let sdkSign = json.data; // 后台返回的值
            wx.config({
                debug: false, // ture会alert全部信息,上线时改为false
                appId: sdkSign.appId, // 必填,公众号唯一标识
                timestamp: sdkSign.timestamp, // 必填,生成签名的时间戳
                nonceStr: sdkSign.nonceStr, // 必填,生成签名的随机串
                signature: sdkSign.signature,// 必填,签名
                jsApiList: ['getLocation',] // 必填,需要调用的接口列表,本需求里只是获取位置信息,具体的接口名称查阅js-sdk文档
            });
            //获取地理位置(经纬度)
            wx.getLocation({
                type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
                success: function (res) {
                    var latitude = res.latitude;   //纬度,浮点数
                    var longitude = res.longitude; //经度,浮点数
                    //以下这部分内容就是再通过异步操作逆地理编码获取真实的地址信息
                    getLocationBylatlng(latitude, longitude);
                }
            });
        }else{
            //TODO 获取签名失败的处理,未获取到地理位置
            *****************
            *****************
        }
    },'json');
}
后端代码如下:(主要是用来获取js-sdk的签名,非常重要)
/*---------------------------------获取js-sdk签名   start--------------------------------*/
    /**
     * 获取js-sdk调用权限,获取签名
     */
    public function getWxsdkSign(){
        $appId = $this->appid; //这里填appid
        $appsecret = $this->appsecret; //这里填appsecret
        //一般$url是固定的,可以写死,但是我的项目中地址是动态的,所以由前段传入
        $url = I('get.url');   //获取签名的页面的url地址,由于是动态地址,所以由前段传入
        // 获取accesstoken
        $accessToken = $this->getAccessToken();
        if(empty($accessToken)){
            $this->ajaxReturn(['code'=>-1, 'msg'=>'accessToken未获取到']);
        }
        // 获取jsapi_ticket
        $jsapi_ticket = $this->_getJsapiTicket($accessToken);
        if(empty($jsapi_ticket)){
            $this->ajaxReturn(['code'=>-1, 'msg'=>'jsapi_ticket未获取到']);
        }
        $nonceStr = $this->make_nonceStr();        //获取随机字符串
        $timestamp = time();
        $signature = $this->make_signature($nonceStr,$timestamp,$jsapi_ticket,$url);
        $sdkSign = array(
            'appId'     => $this->appid,      //appid
            'signature' => $signature,        //签名
            'timestamp' => $timestamp,        //时间戳
            'nonceStr'  => $nonceStr,         //随机字符串
        );
        $this->ajaxReturn(['code'=>0, 'data'=>$sdkSign]);
    }
    
    /**
     * 此AccessToken   与 getUserAccessToken不一样,注意一下定要全局缓存,否则每日次数限制很快就GG了
     * 获得AccessToken
     */
    private function getAccessToken()
    {
        //获取缓存(我用的是自己封装的Memcached类,Vender引入的直接使用)
        Vendor('Memcacheds.Memcacheds');
        $memcached = new \Memcacheds();
        $access = $memcached->get_cache('access_token');
        // 缓存不存在-重新创建
        if (empty($access)) {
            // 获取 access token
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this -> appid}&secret={$this->appsecret}";
            $accessToken = file_get_contents($url);
            $accessToken = json_decode($accessToken);
            // 保存至缓存
            $access = $accessToken->access_token;
            $memcached->set_cache('access_token', $access, 7000);
        }
        return $access;
    }
    
    /**
     * 获取JS证明 注意一下定要全局缓存,否则每日次数限制很快就GG了
     * @param $accessToken
     */
    private function _getJsapiTicket($accessToken)
    {
        Vendor('Memcacheds.Memcacheds');
        $memcached = new \Memcacheds();
        //获取缓存
        $ticket = $memcached->get_cache('jsapi_ticket');
        //缓存不存在-重新创建
        if (empty($ticket)) {
            // 获取js_ticket
            $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" . $accessToken . "&type=jsapi";
            $jsTicket = file_get_contents($url);
            $jsTicket = json_decode($jsTicket);
            //保存至缓存
            $ticket = $jsTicket->ticket;
            $memcached->set_cache('jsapi_ticket', $ticket, 7000);
        }
        return $ticket;
    }

    //获取随机字符串
    public function make_nonceStr(){
        $codeSet = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        for ($i = 0; $i<16; $i++) {
            $codes[$i] = $codeSet[mt_rand(0, strlen($codeSet)-1)];
        }
        $nonceStr = implode($codes);
        return $nonceStr;
    }

    /**
     * 获取签名
     * @param string $nonceStr  随机字符串
     * @param int    $timestamp 时间戳
     * @param string $jsapi_ticket 获取的ticket凭据
     * @param string $url       获取签名的页面的url 'http://*****' eg:'http://wx.alisleept.top/index.php'
     */
    function make_signature($nonceStr,$timestamp,$jsapi_ticket,$url){
        $tmpArr = array(
            'noncestr' => $nonceStr,
            'timestamp' => $timestamp,
            'jsapi_ticket' => $jsapi_ticket,
            'url' => $url
        );
        ksort($tmpArr, SORT_STRING);
        $string1 = http_build_query( $tmpArr );
        $string1 = urldecode( $string1 );
        $signature = sha1( $string1 );
        return $signature;
    }
    /*---------------------------------获取js-sdk签名   end--------------------------------*/

以上php部分就是完全的异步获取签名的代码,里边只需要注意

  1. appid 和 appsecret 修改为自己的
  2. 注意access_token和jsapi_ticket的缓存
  3. 注意$url换成自己的,我这个是动态的,所以前段传回的

转载于:https://www.cnblogs.com/alisleepy/p/10610303.html

Vue通过微信定位+百度地图获取详细地理位置信息 项目中需要使用到定位功能,定位用户所在的省市,并自动填充到省市的选择列表中,微信开发中,定位功能直接使用微信提供的接口,方便并且简单,兼容性相对好处理 因为微信定位或者百度地图的定位都是先通过定位获取到用户的经纬度,然后需要再通过经纬度获取用户的详细地理位置信息。 一、在vue中需要安装jssdk 配置安全域名(参考官方文档) 引入微信的js文件,vue中可以直接npm安装也可以 np... 阅读详情

相关推荐

微信JS接口- 企业号开发者接口文档

目录 1 概述 1.1 使用说明 1.1.1 步骤一:引入JS文件 1.1.2 步骤二:通过config接口注入权限验证配置 1.1.3 步骤三:通过ready接口处理成功验证 1.1.4 步骤四:通过error接口处理失败验证 1.2 接口调用说明 2 基础接口 2.1 判断当前客户端版本是否支持指定JS接口 3 分享接口 3.1 获取“分...

YiFeng_888的博客 6079

微信JSSDK获取用户地理位置(经纬度)

最近一直在做公众号开发,这两天公司让我做一个类似钉钉打卡的功能,这时候我需要获取到用户的经纬度, 但是在这之前我只知道在关注微信公众号的时候获取用户地理位置:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140841 但是这时候在我这里无法使用,我需要在微信公众号的网页中获取用户的地理位置(经纬度) 最后发现,原...

huaweichenai的博客 1万+

微信小程序获取地理位置和地名的方法

背景:本人最近在开发一款天气预报的微信小程序,在调用腾讯地图API进行逆地址解析获取详细地名时,发现其官方文档的描述模棱两可、网络上也没有搜到确实可行的方法。在经过对官方文档的逐句翻译和数次尝试之后,终于成功的获取到了地理位置和地名。特做此记录,以备不时之需。 一、微信小程序获取地理位置和详细地名的思路 1、使用微信小程序wx.getLocationAPI方法获取用户当前位置的经纬度,这个步骤...

weixin_44668162的博客 2241

微信接入js-sdk-获取地理位置,打开微信内置地图

1.第一步当然是已经正确接入了微信并且配置好了回调安全域名。不会的朋友可以看看《微信开发-初级接入微信公众平台MP》 2.   引用微信js-sdk, http://res.wx.qq.com/open/js/jweixin-1.0.0.js,然后通过config接口注入权限验证配置。先在自己的服务器上写个获取数据的接口: /** * 获取页面需要的配置信息的参数 *

陈袁的博客 7万+

微信JS-SDK说明文档

微信JS-SDK说明文档

盐碘 3万+

企业微信自建应用 获取用户地理位置 wx.getLocation

企业微信自建应用 获取用户地理位置 wx.getLocation

weixin_44265726的博客 5125

微信公众号获取用户地址

JS-SDK获取用户地区经纬度 getArea() { this.doConfig(); let that = this; //创建百度地图控件 wx.getLocation({ type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02' success: function (res) { ...

guanguan0_0的博客 1828

保姆级教程:手把手带你复现APFNet论文的RGBT目标跟踪模型(附完整代码与数据集配置)

本文提供了一份详细的APFNet论文复现指南,涵盖从环境搭建到模型测试的全流程。通过解析多模态融合模块和渐进式训练流程,帮助读者高效完成RGBT目标跟踪模型的复现工作,特别针对训练和测试中的常见问题提供实用解决方案。

weixin_29056781的博客 343

微信公众号JS-SDK获取当前经纬度及地址信息

微信公众号开发的项目中,我们经常会遇到关于定位这样的功能, 当然我就遇到了这样的事情,大概翻阅了一下资料,基本思路如下: 首先H5开发本身不具备这样的功能,所以肯定要借助三方接口来实现。 选择性就很多啦!比如:腾讯地图、百度地图、淘宝IP等很多。 其次,我们要考虑的就是前端应用还是后端应用,这里就有明显的区别啦! **前端应用:**页面在打开以后执行后传给后端; **后端应用:**在页面打开前后端执行获取后连同页面渲染给前端。 这个就要根据你的应用场景进行选择啦,这里我们主要说一下前端的应用,至于后端应用大

cocosinu的博客 3883

AI驱动视频剪辑自动化:cutcli命令行工具重塑工作流

视频剪辑自动化是提升内容生产效率的关键技术,其核心原理在于通过程序化指令替代手动操作,将创意执行过程代码化。这项技术的价值在于能够将创作者从重复性劳动中解放,实现批量化、标准化的视频内容生产,尤其适用于社交媒体运营、产品宣传等高频产出场景。通过封装专业软件(如剪映/CapCut)的底层草稿格式,自动化工具在保证工业级渲染质量的同时,提供了可编辑的中间态,为AI智能体(Agent)与生产工具的结合提供了清晰接口。本文以cutcli为例,深入探讨了如何通过命令行工具和AI助手,构建从自然语言指令到可编辑视频草稿

weixin_27210125的博客 1064

vs2017配置liblas库+测试代码

之前已经配置好pcl(vs2017配置pcl),可以单独配置liblas,也可以在原有pcl属性表的基础上继续配置

孙悟空 4023

微信公众号js-sdk定位 获取经纬度和详细位置

使用步骤请参考微信开放文档JS-SDK说明文档中的JSSDK使用步骤 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script src="../../js/jquery-1.7.2.min.js" type="text/javascript" charset="utf-8"></script> <script src="ht

琨羽的博客 4638

VMware Horizon 8 2111 部署系列(十一)准备RDS主机

RDS (Remote Desktop Service),即远程桌面服务。我们可以使用 Microsoft 远程桌面服务 (RDS) 提供 RDS 主机上的桌面会话并将应用程序传送给多个用户。

白昼的技术专栏 3471

微信 JS-SDK 实现自定义分享、手机选图拍照、图片音频处理、地理位置、摇一摇等功能

学习微信网页开发工具包,高效利用微信生态能力

国内某知名游戏公司小菜鸡工程师 3748

[RK-Linux] 移植Linux-5.10到RK3399(十)| 配置AP6256模组使能WIFI、BT功能

[RK-Linux] 移植Linux-5.10到RK3399(十)| 配置AP6256模组使能WIFI、BT功能

Systemcall名屋 2980

把复杂计算推到数据库里:ABAP CDS View Table Function 从原理到落地实践

摘要:本文深入解析ABAP CDS Table Function技术,重点探讨其在复杂业务场景下的应用价值。当CDS View无法满足窗口函数、递归计算等高级需求时,Table Function通过结合CDS类型系统与AMDP的数据库原生计算能力,成为关键解决方案。文章详细介绍了Table Function的架构设计(CDS实体声明+AMDP实现)、客户端处理机制、开发传输流程中的注意事项,并通过航班数据示例展示最小实现闭环。这项技术特别适用于需要将复杂计算下推到数据库层的场景,能显著提升RAP和OData

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2298

微信公众平台开发(106) 网页获取用户地理位置

关键字:微信公众平台 JSSDK 获取地理位置接口 网页获取用户地理位置 getLocation作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/p/weixin-web-location.html     在这篇微信公众平台开发教程中,我们将介绍如何在网页中获取用户的地理位置信息。 本文分为以下二个部分: 生成JS-SDK权限验证签名 使用地理位

BOTOAI 7893

ROS从入门到精通6-2:gmapping激光建图与自定义建图功能包

本文用Turtlebot3实例直观介绍激光建图概念,并实现自定义建图功能包(自动建图与键盘手动控制建图)

FRIGIDWINTER的博客 2662

微信公众号H5页面开发--微信JS-SDK引用

微信公众号H5页面开发–微信JS-SDK引用 微信提供了微信公众号开发者手册,官方地址:https://mp.weixin.qq.com/ 公众号内许多复杂的业务场景,都是通过网页形式来提供服务,这时需要用到: 微信JS-SDK。以地理位置接口为例进行阐述。 写在前面 非常重要! 微信公众号接口必须以http://或https://开头,分别支持80端口和443端口。 由于微信7.0版本升级了...

tango的博客 5776

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Vue调用微信sdk,实现获取地理位置经纬度,支付等

在vue项目中引入jssdk,微信为了方便用户使用,将官方的jssdk发布到了npm上,有一个叫weixin-js-sdk的,但我们需要使用的不是这个,网上很多在vue中引用的是这个,但是这个是为commonjs发布的版本,只能通过require引入,很多人发现在vue中引入import wx from ‘weixin-js-sdk’,console.log(wx)会出现undefined,实际为...

qq_21692693的博客 4731

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java 微信获取用户地理位置_Java微信公众平台之获取地理位置

本部分需要用到微信的JS-SDK,微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。一、JS-SDK引入1.先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名...

weixin_29655587的博客 857

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

终极微信JS开发工具:wechat.js核心功能详解与实战案例

在微信生态开发中,处理分享、网络检测和菜单控制是常见需求。wechat.js是一个轻量级JavaScript库,专门为微信内网页开发提供简洁API,让开发者能够轻松实现微信分享、网络状态检测、菜单控制等功能。这个终极微信JS开发工具简化了复杂的微信JS-SDK调用流程,让开发者专注于业务逻辑而非API兼容性问题。 ## 🚀 为什么选择wechat.js? 微信JS-SDK虽然功能强大,但AP

gitblog_00166的博客 918

微信JS-SDK接口

https://qydev.weixin.qq.com/wiki/index.php?title=%E5%BE%AE%E4%BF%A1JS-SDK%E6%8E%A5%E5%8F%A3#.E6.AD.A5.E9.AA.A4.E4.BA.8C.EF.BC.9A.E9.80.9A.E8.BF.87config.E6.8E.A5.E5.8F.A3.E6.B3.A8.E5.85.A5.E6.9D.83.E9.99.90.E9.AA.8C.E8.AF.81.E9.85.8D.E7.BD.AE 微信JS-SDK说明文档

飞翔的熊blabla 1690

微信JS接口开发指南

  目录 概述 使用说明 接口调用说明 基础接口 判断当前客户端版本是否支持指定JS接口 分享接口 获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 获取“分享给朋友”按钮点击状态及自定义分享内容接口 获取“分享到QQ”按钮点击状态及自定义分享内容接口 获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 图像...

开发猫 1529
上一篇: php去掉字符串的最后一个字符
下一篇: php操作Memcache的一个类库
djb8317
博客等级 码龄12年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值