aozhiwei ea36ad4705 1
2020-03-06 13:00:52 +08:00

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);
}