h5或微信公众号打开微信内置地图,选择高德,百度等导航
第一步,去后台请求签名数据
this.$http
.get(
后端地址:获取下面所需要的的数据
)
.then(data => {
// 记录token
if (data.body.returnCode == "000000") {
wx.config({
// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
debug: false,
// 必填,公众号的唯一标识
appId: data.body.doc.appid,
// 必填,生成签名的时间戳
timestamp: "" + data.body.doc.timestamp,
// 必填,生成签名的随机串
nonceStr: data.body.doc.nonce,
// 必填,签名,见附录1
signature: data.body.doc.signature,
// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
jsApiList: ["checkJsApi", "openLocation"],
success(res){
console.log('sdddd',res)
}
});
} else {
this.$vux.toast.text(data.body.msg);
}
});
第二步,调用微信内置地图
wx.ready(function() {
wx.checkJsApi({
jsApiList: ["openLocation"],
success: function(res) {
wx.openLocation({
latitude: latitude, // 纬度,浮点数,范围为90 ~ -90
longitude: longitude, // 经度,浮点数,范围为180 ~ -180。
name: , // 位置名
address: , // 地址详情说明
scale: 15, // 地图缩放级别,整形值,范围从1~28。默认为最大
success(res){
console.log('成功了吗',res)
},
});
}
});
});
后端代码:
public function getSignPackage($url = '')
{
$ticket = $this->getTicket();
if ($ticket === false) {
return false;
}
// 注意 URL 一定要动态获取,不能 hardcode.
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$url = $url ?: $protocol.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$timestamp = time();
$nonceStr = $this->createNonceStr();
// 这里参数的顺序要按照 key 值 ASCII 码升序排序
$string = "jsapi_ticket=$ticket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
$signature = sha1($string);
$signPackage = [
"appId" => $this->config['appid'],
"nonceStr" => $nonceStr,
"timestamp" => $timestamp,
"url" => $url,
"rawString" => $string,
"signature" => $signature
];
return $signPackage;
}
private function createNonceStr($length = 16)
{
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$str = "";
for ($i = 0; $i < $length; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}