接口提供方通过约定的算法来判断来源是否是开放平台。
验证算法:
{stringToSign} = {key} + ';' + base64_encode(md5({rawBody}) + ';' + {params}
{signStr} = base64_encode(hash_hmac('sha256', {stringToSign}, {secret}, true))
验证参数说明:
a=a1&b=b1&c=c1,如果 post 和 query 有相同名称的参数, body 中的参数会覆盖掉 query 的参数。 php 示例代码如下:
```
$key = 'key';
$secret = 'secret';
$rawBody = 'rawBody';if (!empty($rawBody)) {
$signStr .= ';' . base64_encode(md5($rawBody, true));
}
$sortParams = ['query1' => 'query1', 'query2' => 'query2', 'form1' => 'form1', 'form2' => 'form2'];
$paramStr = '';
ksort($sortParams);
foreach ($sortParams as $key => $value) {
if (!empty($paramStr)) {
$paramStr .= '&';
}
if (!empty($key)) {
$paramStr .= $key . '=';
}
if (!empty($value)) {
$paramStr .= $value;
}
}
$signStr = $key;
if (!empty($rawBody)) {
$signStr .= ';' . base64_encode(md5($rawBody));
}
if (!empty($paramStr)) {
$signStr .= ';' . $paramStr;
}
return base64_encode(hash_hmac('sha256', $signStr, $this->secret, true));
```