21,893
社区成员




// 1、初始化appid、appsecret、timestamp、nonce
$appid = 10000;
$appsecret = md5('10000ju_zhong_secret');
$timestamp = time();
$nonce = rand(10000,99999);
// 2、对所有请求参数进行自定义排序
$params = array('id' => 1314, 'msg' => 'happy', 'zval' => 'php');
$keys = array_keys($params);
rsort($keys, SORT_STRING); // 参数名按照字典序降序
sort($params, SORT_STRING); // 参数值按照字典序升序
$hex = '';
foreach ($keys as $k => $v) {
$hex .= $v . $params[$k]; // 把参数名和参数值连接起来(参数名1参数值1参数名2参数值2...)
}
// 3、把参数列表连接上时间戳、随机数、appsecret,
// 再进行bin2hex(sha1(..))加密,生成signature的一段子字符串
$hex .= $timestamp . $nonce . $appsecret;
$hex = bin2hex(sha1($hex));
// 4、signature的子字符串再连接上时间戳、随机数、appid,
// 再strrev(..)生成signature参数
$signature = $hex . $timestamp . $nonce . $appid;
$signature = strrev($signature);
// 5、 signature参数需要作为get请求的参数传递
// 例子:aticles.php/signature/xxxxxxx
// 6、 接口中,验证签名参数的代码如下:
/**
$ApiValidator = new ApiValidator();
if (! $ApiValidator->checkSignature()) {
// 签名参数验证失败,
}
**/