所以我使用REST API,API以JSON格式向我的服务器发出POST请求。以下是它发送的信息:
info: {
id: "9890dsds8",
number: 5,
amount: 33
},
sig: "8jhjbhb78979899h"
sig是info的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必须是长度不超过50个字符的UTF8字符串,并且应该是响应正文的唯一内容。
虽然我完全能够理解正在发生的事情,但我并不能完全弄清楚一切。大多数情况下,可能是因为它在Ruby中。
有人可以帮我解决如何在PHP中执行此操作的问题吗?我无法在PHP中处理此JSON POST请求。 PHP片段的PHP转换版本将非常受欢迎。我也不确定,如何处理PHP中的SHA1方面,需要什么特殊知识?
非常感谢!!
答案 0 :(得分: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!
}