googleサービスアクセス時に使用するシグネチャー付きURLを生成

シェアする

googleの新しいマップAPIを使用する場合、googleから提供されたキー値を用いて生成したシグネチャーをリクエストURLの最後に付与する必要がありその生成サンプルはgoogleサイトに在るのですが・・・・

でも何故かそのサンプルにPHPが無くて(^_^.)

必要になったので作ってみました。

一応、生成サンプル内の生成結果の様には出力されますのでOKかな(^_^.)

ご使用はあくまでも自己責任で。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
// =======================================
// 検証用URLとKEY
// ---------------------------------------
// googleサイト:
// から取得
// =======================================
$URL = "http://maps.google.com/maps/api/geocode/json?address=New+York&amp;amp;sensor=false&amp;amp;client=clientID";
$PrivateKey = "vNIXE0xscrmjlyV-12Nj_BvUPaw=";
 
// =======================================
// 実際にクラス作成してSignature文字列を取得
// =======================================
$Utility= new Utility();
$newurl = $Utility->CreateSignature($URL, $PrivateKey );
 
// 結果を表示してみる。
print( $newurl."\n" );
 
 
// =======================================
// とりあえずクラス
// =======================================
class Utility {
     
    // =======================================
    // URLとキー値からシグネチャー文字列を付与したURLを生成する。
    // ---------------------------------------
    // $URL :googleリクエストURL
    // $key :貰ったキー(googleさんから貰ってね)
    // ---------------------------------------
    // return:URL + シグネチャー 文字列
    // =======================================
    static function CreateSignature( $url, $key )
    {
        try
        {
            // =======================================
            // urlからパスとクエリ文字列を求める
            // =======================================
            $parseUrl = parse_url( $url );
            $pathQuery = $parseUrl["path"]."?".$parseUrl["query"];
 
            // =======================================
            // Base64デコード前にキー文字列内の特定文字置き換え
            // ---------------------------------------
            // "-" → "+"
            // "_" → "/"
            // =======================================
            $keyStringTmp = str_replace( "-" , "+" , $key );
            $keyStringTmp = str_replace( "_" , "/" , $keyStringTmp );
             
            // =======================================
            // Base64デコード実行
            // =======================================
            $decodedKey = base64_decode( $keyStringTmp );
             
            // =======================================
            // URLをMAC-SHA1アルゴリズムで暗号化
            // =======================================
            $signature = hash_hmac( "sha1", $pathQuery$decodedKey, true );
             
            // =======================================
            // Base64でエンコード
            // =======================================
            $signature = base64_encode( $signature );
             
            // =======================================
            // Base64エンコード後にデコード前に置き換えた文字を戻す。
            // ---------------------------------------
            // "+" → "-"
            // "/" → "_"
            // =======================================
            $signature = str_replace( "+" , "-" , $signature );
            $signature = str_replace( "/" , "_" , $signature );
             
            // =======================================
            // URL生成
            // =======================================
            $requestUrl = $url."&amp;signature=".$signature;
             
            return $requestUrl;
        }
        catch( Exception $e )
        {
            throw $e;
        }
    }
}
?>

シェアする

フォローする