微信公众号打开微信内置地图(thinkphp5+jq)
第一步,去后台请求签名数据
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; }