2012-02-23 13 views
-1

したがって、APIがJSON形式でサーバーにPOSTリクエストを発行するREST APIを使用しています。以下は、送信する情報である:PHPとSHA1を使用したJSON POSTリクエストの処理

info: { 
id: "9890dsds8", 
number: 5, 
amount: 33 
}, 
sig: "8jhjbhb78979899h" 

SIGは情報のSHA1の署名である、これはポストを検証するために使用されるべきです。たとえば、私たちは(彼らの例で与えられたような)とRubyで情報を検証することができます

require 'json' 
require 'cgi' 
require 'digest/sha1' 

key = "some_key" 
params = CGI::parse(post_body) 
digest = Digest::SHA1.hexdigest(params["info"]+key) 

if digest == params["sig"] 
# Valid signature 
info = JSON.parse(params["info"]) 
# Respond with status code 200 and some unique_id 
else 
# Invalid signature. You should response with a non-200 response code. 
end 

UNIQUE_IDは、UTF8文字の文字列の長さで50文字以下でなければならず、身体の内容のみでなければなりませんあなたの応答の。

私は何が起こっているかをかなり理解することができますが、私は完全にすべてを理解することはできません。主に、それがRubyの中にあるからかもしれません。

PHPでこれを行う方法を教えてもらえますか? PHPでこのJSON POSTリクエストを処理できません。スニペットのPHP変換バージョンは非常に高く評価されます。私はまた、PHPのSHA1の側面、どのような特別な知識を必要とするのかをどう対処するかわからないのですか?

ありがとうございます!

+0

あなたのPHPコードは、これまで何ですか? – hakre

答えて

2

私は、APIがあなたのPOST配列の "response"変数を設定すると仮定します。その後

//Get the JSON string 
$json_string = $_POST['response']; 

//Decode JSON string to array 
$decoded = json_decode($json_string); 

//Calculate SHA1 (I am not sure how ruby is concatenating a string with an array, so I will just convert the array to string using implode). 
$key = 'somekey'; 
$hash = sha1(implode("",$decoded['info']) . $key); 

if($hash == $decoded['sig']){ 
//OK! 
}else{ 
//Not OK! 
} 
関連する問題