75 lines
2.1 KiB
PHP
75 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace phpcommon;
|
|
|
|
function _internalSign($secret_key, $timestamp, $params) {
|
|
ksort($params);
|
|
$params_str = '';
|
|
foreach($params as $key => $val){
|
|
if ($key == '' ||
|
|
$key == 'a' ||
|
|
$key == 'c') {
|
|
continue;
|
|
}
|
|
if ($key[0] == '_') {
|
|
continue;
|
|
}
|
|
$params_str = $params_str . $key . '=' . $val . '&';
|
|
}
|
|
if($params_str != ''){
|
|
$params_str = substr($params_str, 0, -1);
|
|
}
|
|
return md5($params_str . $secret_key . $timestamp);
|
|
}
|
|
|
|
function ksVerify($service_name) {
|
|
if (!isset($_REQUEST['__timestamp']) ||
|
|
$_REQUEST['__timestamp'] < time() - 3600 * 1) {
|
|
return false;
|
|
}
|
|
if ($_REQUEST['__service_name'] != $service_name) {
|
|
return false;
|
|
}
|
|
$app_name = $_REQUEST['__project_name'];
|
|
$project_name = PROJECT_NAME;
|
|
$filename = "../keys/provider/$service_name@$project_name.provider.json.php";
|
|
if (!file_exists($filename)) {
|
|
die('not found ' . $filename);
|
|
}
|
|
$data = file_get_contents($filename);
|
|
if (!$data) {
|
|
die("open file error $filename");
|
|
}
|
|
$jsonobj = json_decode($data, true);
|
|
if (!isset($jsonobj[$app_name]) || !isset($jsonobj[$app_name]['secret_key'])) {
|
|
return false;
|
|
}
|
|
|
|
foreach ($jsonobj[$app_name]['secret_key'] as $secret_key) {
|
|
if (_internalSign($secret_key, $_REQUEST['__timestamp'], $_REQUEST) ==
|
|
$_REQUEST['__sign']) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function ksSign($app_name, $service_name, &$params) {
|
|
$filename = "../keys/consumer/$service_name@$app_name.consumer.json.php";
|
|
if (!file_exists($filename)) {
|
|
die('not found ' . $filename);
|
|
}
|
|
$data = file_get_contents($filename);
|
|
if (!$data) {
|
|
die("open file error $filename");
|
|
}
|
|
$jsonobj = json_decode($data, true);
|
|
$secret_key = $jsonobj['secret_key'];
|
|
|
|
$timestamp = time();
|
|
$params['__project_name'] = PROJECT_NAME;
|
|
$params['__service_name'] = $service_name;
|
|
$params['__timestamp'] = $timestamp;
|
|
$params['__sign'] = _internalSign($secret_key, $timestamp, $params);
|
|
}
|