Обработка JSON POST-запроса с использованием PHP и SHA1 - PullRequest
0 голосов
/ 24 февраля 2012

Поэтому я использую REST API, где API выдает запрос POST на мой сервер в формате JSON.Ниже приведена информация, которую он отправляет:

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?Я не могу обработать этот запрос JSON POST в PHP.PHP-версия фрагмента будет чрезвычайно полезна.Я также не уверен, как обращаться с аспектами SHA1 в PHP, требуются ли какие-либо специальные знания?

Спасибо большое !!

1 Ответ

2 голосов
/ 24 февраля 2012

Я предполагаю, что API заполнит переменную "response" в вашем массиве 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!
}
...