微信公众号获取经纬度好几个坑,很大,不注意搞,老惨了。相关文档
这一部分,强烈建议使用官方配置好的demo,至少不会死得惨。网上好多自己封装的,理解起来头疼,demo位置在完档最下方
官方demo示例代码
下载好之后,解压里面的结构大概长这个样子,像我是php开发,选择相应demo
这里面的四个文件都有点用,最后一个我自己换成了一个html,方便前端联调使用,放入框架结构大概就是这个样,一个最基本的类放在\extend文件夹下。其他的两个文件放在public下,因为公众号里面的
access_token 每天有查询限制,所以不建议用一次查一次,最好是设置一个时间,在时间内直接读取文件,不用来老是请求公众号,具体位置如下:
最后的一个被我变成html,放在你自己的视图层就行。这三个里面的内容如下:
access_token.php
<?php exit();?>
{
"expire_time":1621336235,
"access_token":"45_M7bldvfOAiq5***********WGcUBLFEdABABVU"//这里很长。请求接口后返回的值,存起来就行
}
jsapi_ticket.php
<?php exit();?>{
"expire_time":1621336235,
"jsapi_ticket":"kgt8O*********mJ_w1w"//这里很长。请求接口后返回的值,存起来就行
}
最关键的类:jssdk.php
这里有个大坑,很坑 这里的 $url 使用的是你调用的界面的地址,=也就是说我写这个html代码的位置就是我要用的url,他原先是写在php文件里,所以用它原有的获取没问题,会找到他自己的方法,写出html时候就不行了,需要改成html的访问地址才行
<?php
namespace jssdk_php;
class jssdk {
private $appId;
private $appSecret;
public function __construct() {
$this->appId = "你自己的appid";
$this->appSecret = "你自己的appSecret ";
}
public function getSignPackage() {
$jsapiTicket = $this->getJsApiTicket();
// 注意 URL 一定要动态获取,不能 hardcode.(原本的写法)
//$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
// $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
// 注意 URL 一定要动态获取,不能 hardcode.(我的写法)
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
**这里很重要html的访问地址才行
$url = "http://************/¥%%%%%/sand.html";**
$timestamp = time();
$nonceStr = $this->createNonceStr();
// 这里参数的顺序要按照 key 值 ASCII 码升序排序
$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
$signature = sha1($string);
$signPackage = array(
"appId" => $this->appId,
"nonceStr" =>