微信公众号打开微信内置地图(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&timestamp=$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;
    }
经验分享 程序员 微信小程序 职场和发展