我有一个需要在PHP中实现的Java方法。它是创建一个身份验证字符串以获取对API的访问权限。它由公司提供的代码和API密钥组成,也由公司提供,并且根据下面的Java示例,它还包括自纪元以来几分钟内的GMT时间戳。
根据文档,它说“时间戳计算为自纪元以来经过的分钟数。必须使用GMT时区计算时间戳。如果请求服务器的系统时间超过一分钟实际当前时间,服务器将拒绝该呼叫,其中包含400个错误请求代码“。
我必须提供代码以及我创建的SHA-256加密令牌作为参数。
这是Java:
String createToken() {
String token = "";
MessageDigest lclMD = null;
try {
lclMD = MessageDigest.getInstance("SHA-256"); }
catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
lclMD.update((EnvConstants.code + EnvConstants.api_key + Long.toString(getEpochMinutes())).getBytes());
byte[] lclResult = lclMD.digest();
sig = new String(Hex.encodeHex(lclResult));
return token;
}
long getEpochMinutes () {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
long now = System.currentTimeMillis();
cal.setTimeInMillis(now);
return (cal.getTimeInMillis() / 60000L);
}
这是我在PHP中尝试过的:
$time = (string)time()/60; // to get the minutes since epoch, I have also tried it not casting it to a string
$code = 'thisisthecode';
$api_key = 'XXXXXXX';
$hash = hash('sha256', $code . $api_key . $time);
$curl = curl_init();
$url = "http://api.url/user/XXXX?code=thisisthecode&token=$hash";
curl_setopt($curl, CURLOPT_URL, $url);
$result = curl_exec($curl);
return $result;
当我运行此代码时,我总是收到400 Bad Request错误。
要清楚,我不知道Java,现在我猜我是否认识PHP,因为我无法使用它。
任何人都可以帮我解决这个问题吗?我正在撞击混凝土。
感谢您的帮助。
答案 0 :(得分:0)
$ key = openssl_digest($ stringSHA,'sha512',true);