2012-02-23 3 views
-1

그래서 API가 내 서버에 JSON 형식으로 POST 요청을 보내는 REST API를 사용하고 있습니다. 이 보내는 정보는 다음과 같은 :PHP 및 SHA1을 사용하여 JSON POST 요청 처리

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

SIG가있는 정보의 SHA1 서명이이 게시물을 확인하는 데 사용되어야한다.

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 길이 이하에서 50 자 UTF8 문자의 문자열이어야하며 신체의 유일한 내용이어야한다 : 예를 들어, 우리는 (자신의 예에 주어진)와 루비의 정보를 확인할 수 있습니다 귀하의 응답.

나는 무슨 일이 일어나고 있는지 꽤 이해할 수 있지만, 모든 것을 알아낼 수는 없습니다. 대부분 루비에 있기 때문일 수 있습니다.

누군가 PHP로 이것을 수행하는 방법을 알려주십시오. PHP에서이 JSON POST 요청을 처리 할 수 ​​없습니다. 스 니펫의 PHP 변환 버전은 극명하게 평가 될 것입니다. 나는 또한 확실하지 않다, PHP의 SHA1 측면을 다루는 방법, 특별한 지식이 필요합니까?

감사합니다.

+0

당신이 PHP 코드는 지금까지 무엇입니까? – hakre

답변

2

API가 POST 배열의 "응답"변수를 채우는 것으로 가정합니다. 그런 다음

:

//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! 
}