4.0.10.1にてGoogleMapsが動作しない
dotnetxp > 4.0.10.1にてGoogleMapsが動作しない @ 2018/2/14 21:35 |
---|
4.0.10.1にアップデートしたところ、GoogleMapsの表示部分に以下のメッセージが表示され動作しなくなりました。
APIは設定しています。 「Google Maps を読み込めません。管理画面で正しい住所が設定されているか確認してください。」 対応方法があればご教授ください。 ■BaserCMSのバージョン:4.0.10.1 |
seto > Re: 4.0.10.1にてGoogleMapsが動作しない @ 2018/2/15 10:19 |
---|
sdish > Re: 4.0.10.1にてGoogleMapsが動作しない @ 2018/4/13 9:53 |
---|
私も同様の現象になり、2ヵ所の環境で一応解決しております。
明確な解決方法ではないうえ、少し環境が異なるかもしれませんが、解決の糸口になれば幸いです。 サーバは、さくらインターネットのスタンダードとさくらVPSのCentOS7です。 また、両方ともSSLにて運用しています。(環境の詳細は後述) 1.下記ファイルを編集 # vi /var/www/html/lib/Baser/Lib/BcGmaps.php ### 定数宣言部分 ### const GMAPS_API_BASE_URL = "https://maps.googleapis.com/maps/api/geocode/xml"; <--httpsに変更 ### コンストラクタ部分 ### public function __construct($apiKey) { /* $this->_gmapsApiUrl = self::GMAPS_API_BASE_URL . "?key=" . $apiKey; <--- コンストラクタ部を無効にする。 */ } ### メソッド部分 ### protected function _geocode($param) { /* $requestUrl = $this->_gmapsApiUrl . "&address=" . urlencode($param); <--- 元の処理を無効にする。 */ $this->_gmapsApiUrl = self::GMAPS_API_BASE_URL . "?address=" . urlencode($param); <--- ここから2行を追加 $requestUrl = $this->_gmapsApiUrl . "&key=" . $apiKey; <--- ここも追記 2.使っているテーマのBcGooglemapsHelper.phpのAPI呼び出しが古い場合がある(APIキーを指定しないバージョン) その場合は、ROOT/lib/Baser/View/Helper/BcGooglemapsHelper.phpと入れ替え等を行う。 また、下記の部分を編集。 $googleScript = '<script src="' . $apiUrl . '?key=' . h($apiKey) . '"></script>'; <-- ?key= を ?v=3.exp&key= に変更 3.GoogleMapsのAPIキー設定 HTTPリファラーの設定時、下記2パターンを登録 *.yourdomain.com/* https://yourdomain.com/shop (何故か、ワイルドカードのみだとリファラエラーが発生) 1.について補足 HTTPで取得しようとするとRequests to this API must be over SSL.と帰ってきたため。 また、?key=*****&address=*****で取得すると、addressがないとエラーが発生したので、公式通り?address=**&key=***とした。 2ヵ所とも上記の設定で修正可能でした。 ・BaserCMSのバージョン 4.1.0.1 ・レンタルサーバ名 さくらインターネットスタンダード ・スマートURL ON ・設置フォルダ ドキュメントルート ・利用しているデータベース SQLite ・PHPスキル E(C言語系およびサーバエンジニアです) ・OS FreeBSD 9.1 ・PHP 5.6.33 ・DB SQLite ・BaserCMSのバージョン 4.0.10.1 -> 4.1.0.1 ・レンタルサーバ名 さくらVPS ・スマートURL ON ・設置フォルダ ドキュメントルート ・利用しているデータベース SQLite ・PHPスキル E(C言語系およびサーバエンジニアです) ・OS CentOS 7 ・PHP 5.6.35 ・DB SQLite |
ryuring > Re: 4.0.10.1にてGoogleMapsが動作しない @ 2018/7/10 22:06 |
---|
こんばんは。
こちらの件、確認しました。 結論からお伝えすると、GMAPS_API_BASE_URL を https に変更する必要がありますが、 他の箇所についてコードの変更は不要でした。 (最新版ではすでに https に更新されています) baserCMSがインストールされたばかりの状態で表示されるGoogleMapは、 Javascript だけでなく、PHPからもリクエストを送っています。 1. ロケーション情報(経度、緯度)情報を取得 システム管理のGoogleMaps住所で設定した情報を元にPHPで取得 2. 地図を取得 1で取得した情報を元にJavascriptで地図を取得 どうやら、HTTPリファラーによる制限を行っている場合、PHPによるロケーション情報の取得に失敗するようです。 これは、HTTPリファラー制限がブラウザからのJavasciprtでの取得に対してのものであるからのようです。 つまり使えない。 ではどうやって制限するかというと、IPアドレスで制限するとうまくいくようです。 【参考】How do I resolve the error: "API keys with referer restrictions cannot be used with this API."? WebサーバのIPアドレスを調べて設定してみてください。 ちなみに、BcGmaps でのリクエスト時に、key を空でリクエストすると、HTTPリファラーを設定しても成功します。 sdish さんのコード修正は、$apiKey という変数の宣言がない状態で、結果、key を空にした状態でリクエストしている形になっていました。 つまり APIキーなしのリクエストの状態です。 おそらくこれは、移行時期である現在だけがうまくいっているだけで、将来的には利用できなくなる事が想定されます。 Twitter:@ryuring |
ryuring > Re: 4.0.10.1にてGoogleMapsが動作しない @ 2018/7/11 13:28 |
---|
こんにちは。
IPアドレスの制限だけではうまくいかない事が判明しましたので、根本的な処理を変更しました。 https://github.com/baserproject/basercms/commit/0587cf6f88286f00baeb67baeb9a2f88bc400dd8 こちらより、BcGooglemapsHelper.php をダウンロードし、上書きすると、HTTPリファラ制限でうまくいきます。 Twitter:@ryuring |