PHP开发API接口签名生成及验证操作示例
API接口签名是一种通过对 API 请求参数进行签名来确保 API 请求合法性的技术。在 API 请求参数中添加签名并发送至服务端后,服务端可以验证此签名是否合法。
什么是API接口签名
API接口签名是对请求数据进行MD5或SHA1加密的过程,并将加密结果作为请求参数之一提交到服务器端,服务器端对请求的签名进行验证以判定请求的合法性。
如何生成和验证API接口签名
生成API接口签名
在请求API接口时,需要往请求参数中添加签名,以下为签名生成的步骤:
- 将请求参数按照ASCII码值排序;
- 将排序后的参数名和参数值拼接成一个字符串(key1=value1&key2=value2...);
- 在字符串末尾添加上API密钥;
- 对拼接好的字符串进行MD5或SHA1加密。
以下为示例:
<?php
function createApiSign($params, $secretKey) {
//按参数名排序
ksort($params);
//格式化参数成key=value形式拼接
$str = '';
foreach ($params as $key => $value) {
$str .= $key . '=' . $value . '&';
}
//去掉末尾的&
$str = rtrim($str, '&');
//拼接API密钥
$str .= $secretKey;
//MD5加密
return md5($str);
}
?>
验证API接口签名
在接收到API请求时,需要对请求参数中的签名进行验证。以下为验证签名的步骤:
- 将请求参数按照ASCII码值排序;
- 将排序后的参数名和参数值拼接成一个字符串(key1=value1&key2=value2...);
- 在字符串末尾添加上API密钥;
- 对拼接好的字符串进行MD5或SHA1加密;
- 将加密结果与请求参数中的签名参数进行比较。
以下为示例:
<?php
function verifyApiSign($params, $secretKey, $apiSign) {
//按参数名排序
ksort($params);
//格式化参数成key=value形式拼接
$str = '';
foreach ($params as $key => $value) {
$str .= $key . '=' . $value . '&';
}
//去掉末尾的&
$str = rtrim($str, '&');
//拼接API密钥
$str .= $secretKey;
//MD5加密
$sign = md5($str);
//比较签名
return $sign == $apiSign;
}
?>
示例说明
假设有一个API接口,需要传递两个参数:name
和age
,API密钥为123456
。以下为示例:
生成签名
请求参数为:
name=张三&age=20
代码示例:
<?php
$params = [
'name' => '张三',
'age' => '20',
];
$secretKey = '123456';
$apiSign = createApiSign($params, $secretKey);
?>
生成的签名为:
bb10ee4feaca3ce6198f1c29c3c3d6e2
验证签名
请求参数为:
name=张三&age=20&sign=bb10ee4feaca3ce6198f1c29c3c3d6e2
代码示例:
<?php
$params = [
'name' => '张三',
'age' => '20',
'sign' => 'bb10ee4feaca3ce6198f1c29c3c3d6e2',
];
$secretKey = '123456';
$isVerify = verifyApiSign($params, $secretKey, $params['sign']);
?>
验证结果为:
true(验证通过)
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP开发API接口签名生成及验证操作示例 - Python技术站