PHP开发API接口签名及验证
<?php // 设置一个密钥(secret),只有发送方,和接收方知道 /*----发送方和接收方- start ----*/ $secret = "28c8edde3d61a0411511d3b1866f0636"; /*----发送方和接收方- end ----*/ /*----发送方待发送数据- start ----*/ // 待发送的数据包 $data = array( 'username' => '123@qq.com', 'sex' => '1', 'age' => '16', 'addr' => 'zhongguo', 'timestamp' => time(), ); // 获取sign function getSign($secret, $data) { // 对数组的值按key排序 ksort($data); // 生成url的形式 $params = http_build_query($data); // 生成sign $sign = md5($params . $secret); return $sign; } // 发送的数据加上sign $data['sign'] = getSign($secret, $data); /*----发送方待发送数据- end ----*/ /*----接收方待处理验证数据- start ----*/ /** * 后台验证sign是否合法 * @param [type] $secret [description] * @param [type] $data [description] * @return [type] [description] */ function verifySign($secret, $data) { // 验证参数中是否有签名 if (!isset($data['sign']) || !$data['sign']) { return '发送的数据签名不存在'; } if (!isset($data['timestamp']) || !$data['timestamp']) { return '发送的数据参数不合法'; } // 验证请求, 10分钟失效 if (time() - $data['timestamp'] > 600) { return '验证失效, 请重新发送请求'; } $sign = $data['sign']; unset($data['sign']); ksort($data); $params = http_build_query($data); // $secret是通过key在api的数据库中查询得到 $sign2 = md5($params . $secret); if ($sign == $sign2) { return '验证通过'; } else { return '请求不合法'; } } /*----接收方待处理验证数据- end ----*/ ?>
原文地址:https://www.jianshu.com/p/c43bed6f8bec
相关推荐
-
Redis 实现分页排序功能–文件系统业务核心功能 php基础
2020-6-26
-
一文搞懂MySQL的join php基础
2019-9-9
-
利用最优停止理论,寻找你的真爱 php基础
2019-9-6
-
MySQL 是如何处理死锁的 php基础
2019-10-5
-
php 7.1 新特性解析 php基础
2019-10-5
-
PHP单元测试使用 php基础
2019-9-6
-
Docker+TP5+RabbitMQ+入消息队列+自动消费队列 php基础
2019-9-9
-
lumen接口访问频率throttle php基础
2019-9-9
-
PHP配上MySQL实现批量更新插入 php基础
2019-3-17
-
php将文件转换成二进制输出[转] php基础
2019-9-15