フロントインターフェイスを呼び出したい、あなたは署名を生成するためにいくつかのパラメータを使用する必要があります。
タイムスタンプ:現在時刻
乱数:ランダムに生成された乱数
パスワード:台湾の発展の前と後に、両側がロゴを知って、同等の信号
ルールアルゴリズム:上記の3つのパラメータの操作の-agreedルールが署名アルゴリズムルールを生成するために利用することができます。
必要性はURLによって背景に渡されたインタフェース、タイムスタンプ、乱数、署名にアクセスする際にレセプションには、署名を生成します。背景は、データを返すために、同一の、署名アルゴリズムのルールによって計算されたタイムスタンプ、乱数を取得し、その後、署名比較上を通過します。
アルゴリズムのルール
楽屋インタラクティブ最初に、アルゴリズムのルールは非常に重要であり、アルゴリズムによって計算前面と背面には、ルールを開発する方法のように、あなたはどのように来てどのように幸せな参照、署名を排除する必要があります。
私のルールは、このアルゴリズムであります
タイムスタンプ、乱数は、最初のパスワードは、注文総額をソート
図2は、文字列内にスプライシングされます
3 SHA1の暗号化
4その後、暗号化されたMD5
大文字に5。
レセプション
ここで私は、直接使用するのは本当の見通しPHPファイルの代わりに、フォアグラウンドを持っていないし、その後CURL GETリクエストによってシミュレート。私はTPフレームワークを使用しています、URLの形式は形式パス情報です。
ソース
<?PHP / ** * PhpStormによって作成されます。 *ユーザー:管理者 *日:2019年3月16日 *時間:15時56分 * / コントローラ\名前空間のクライアント; を使用することは、コントローラの\考える; クラスClientControllerは、コントローラーが{拡張 '= TOKENをCONST API「; //サーバ要求受信アナログインタフェースAPI パブリックgetDataFromServer関数(){ //タイムスタンプ $ = timeStampに時間(); //乱数 $ $ = randomStrこの- > createNonceStr(); //は、署名生成 $署名を=この$ - >算数(タイムスタンプ$、$ randomStr); // URLアドレス $のURL =「http://www.apitest.com/Server/Server/respond/t/{$timeStamp}/r/{$randomStr} / S /署名} {$「; $この結果= $ - > HTTPGET(URLの$)。 ダンプ($結果); } //カールシミュレーションを要求します。 機能HTTPGETプライベート(URLの$){ $カール= curl_init(); //必要なアドレス要求 ;ますcurl_setopt($カール、CURLOPT_URL、 $のURL) 出力が//要求されたデータファイルを示しますが、変数にストリーミングされています ますcurl_setopt($カール、CURLOPT_RETURNTRANSFER ,. 1); $結果= curl_exec($カール); curl_close($カール); 戻り$結果は; } ランダムに生成//ストリング プライベート関数createNonceStr(長さ= $ 8){ $ =の文字" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "; $ STR =は"「; のために{($ I = 0; $ I ++; $ Iは$長<) $ STR =のSUBSTR( - 1),. 1 $文字、strlenをmt_rand(0、($文字を))。 ; } 。 "Z" STR $を返す; } / ** * @Param $タイムスタンプスタンプ * @Param $ randomStrランダムな文字列 * @return列戻り署名 * / プライベート算術関数(タイムスタンプ$、$ randomStr){ $ ARR [ 'timeStampに'] = $ timeStampに; $ ARR [ 'randomStr'] = $ randomStr; $ ARR [ 'トークン']自己:: =トークン; //最初の総額は順番を並べ替え ($ ARR、SORT_STRING)ソート; //文字列の中にスプライス $ = STR破($のARR); //暗号化 $署名SHA1 =($のSTR); $署名= MD5($シグネチャ); //大文字 $ strtoupper署名=($シグネチャー); 戻り$シグネチャー; } }
サーバー側
検証のためのフォアグラウンドデータを受け入れます
ソース
<?phpの / ** * PhpStormによって作成されます。 *ユーザー:管理者 *発売日:2019年3月16日0016 *時間:16時01分 * / 名前空間サーバー\コントローラ。 \コントローラを考えて使用します。 クラスServerControllerコントローラー{延び CONST TOKEN = 'APIを'; //响应前台的请求 パブリック関数応答(){ //验证身份 $ timeStampに= $ _GET [ 'T']。 $ randomStr = $ _GET [R '']。 $署名= $ _GET [ 'S']。 $ STR = $この- >演算($タイムスタンプ、$ randomStr)。 もし(!$ strの= $署名){ エコー"-1"; 出口; } //模拟数据 $ arrが[ '名前'] = 'API'; $ [ '年齢'のARR $ [ 'アドレス'をARR $ ARR [ 'IP'] = "192.168.0.1"; エコーjson_encode($のARR); } / ** * @paramタイムスタンプの$ timeStampに * @param $ randomStrランダム文字列 * @return列戻り署名 * / パブリック関数演算(タイムスタンプ$、$ randomStr){ $ ARR [ 'timeStampに'] = $ timeStampに; $ ARR [ 'randomStr'] = $ randomStr; $ ARR [ 'トークン']セルフ:: TOKEN =; //最初の総額ソート順 の並べ替え($ ARR、SORT_STRING); //文字列の中にスプライス $ = STR破($のARR); 暗号化する// $署名= SHA1($ strの) ; $ = MD5署名($シグネチャー); //大文字に変換 ; $署名= strtoupper($シグネチャー) リターン$署名を。 } }
結果
ストリング(57) "{" 名前 ":" API " "年齢":15、 "アドレス": "ZZ"、 "IP": "192.168.0.1"}"