PHP开发API接口签名生成及验证操作示例

PHP开发API接口签名生成及验证操作示例

API接口签名是一种通过对 API 请求参数进行签名来确保 API 请求合法性的技术。在 API 请求参数中添加签名并发送至服务端后,服务端可以验证此签名是否合法。

什么是API接口签名

API接口签名是对请求数据进行MD5或SHA1加密的过程,并将加密结果作为请求参数之一提交到服务器端,服务器端对请求的签名进行验证以判定请求的合法性。

如何生成和验证API接口签名

生成API接口签名

在请求API接口时,需要往请求参数中添加签名,以下为签名生成的步骤:

  1. 将请求参数按照ASCII码值排序;
  2. 将排序后的参数名和参数值拼接成一个字符串(key1=value1&key2=value2...);
  3. 在字符串末尾添加上API密钥;
  4. 对拼接好的字符串进行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请求时,需要对请求参数中的签名进行验证。以下为验证签名的步骤:

  1. 将请求参数按照ASCII码值排序;
  2. 将排序后的参数名和参数值拼接成一个字符串(key1=value1&key2=value2...);
  3. 在字符串末尾添加上API密钥;
  4. 对拼接好的字符串进行MD5或SHA1加密;
  5. 将加密结果与请求参数中的签名参数进行比较。

以下为示例:

<?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接口,需要传递两个参数:nameage,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技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • php编程实现追加内容到txt文件中的方法

    那我就按照题目要求,为你详细讲解一下 PHP 编程实现追加内容到 txt 文件中的方法,步骤如下: 1. 准备 我们需要先准备一个待写入的文件,可以在项目跟目录新建一个名为 test.txt 的文本文件,用于保存写入内容。 2. 执行追加操作 使用 PHP 的 file_put_contents 函数可以实现对文本文件进行写入操作,其中若设置 $flags …

    PHP 2023年5月26日
    00
  • ArcGIS 10.7怎么安装?ArcGIS Desktop 10.7安装激活+中文汉化图文教程

    ArcGIS是地理信息系统软件的行业标准,为GIS的工作提供可视化、数据管理、空间分析等强大的功能。下面我将详细讲解ArcGIS Desktop 10.7的安装、激活和中文汉化过程。 安装 首先,要从Esri官网下载ArcGIS Desktop 10.7的安装包。下载地址:https://www.esri.com/en-us/arcgis/products/…

    PHP 2023年5月26日
    00
  • PHP实现LRU算法的原理详解

    PHP实现LRU算法的原理详解 什么是LRU算法 LRU(Least Recently Used)是一种缓存算法,它的过期规则是:缓存空间满时,优先淘汰最近最少使用的缓存数据。即在一段时间内,如果某个数据没有被访问到,那么接下来它被访问到的几率也很小,就可以被淘汰掉。可以理解为”长时间不用的东西,就扔掉”。 LRU算法原理 LRU算法可以通过哈希表和双向链表…

    PHP 2023年5月27日
    00
  • PHP中文URL编解码(urlencode()rawurlencode()

    对中文URL进行编解码是Web开发中的一个常见需求。在PHP中,提供了两个函数来完成这个任务:urlencode和rawurlencode。下面详细讲解这两个函数的用法和区别。 urlencode urlencode函数是PHP内置函数,用于将URL中的非字母数字字符以及一些保留字符进行编码,以便于在URL传递时能够正确地传递参数。 语法:string ur…

    PHP 2023年5月23日
    00
  • php实现mysql连接池效果实现代码

    以下是详细讲解如何实现 PHP 实现 MySQL 连接池效果的攻略。 什么是连接池? 连接池是将多个数据库连接预先创建并保存在内存中,需要使用数据库连接时,从连接池中获取,使用结束后,不关闭连接,而是将数据库连接放回到连接池中,以供下一次使用。连接池可以降低创建和关闭数据库连接的开销,提高SQL执行效率,整体提升web应用性能。 实现步骤 Step 1:初始…

    PHP 2023年5月27日
    00
  • 第四章 php数学运算

    第四章 PHP数学运算完整攻略 1. 基本数学运算 PHP中的基本数学运算包括加减乘除、取余数、求幂等操作,这些操作都使用了常见的数学符号。例如:+是加号,-是减号,*是乘号,/是除号,%是取余符号,**是求幂符号。下面是这些操作的具体示例: // 加减乘除 $a = 10; $b = 5; $c = $a + $b; // 15 $c = $a – $b;…

    PHP 2023年5月23日
    00
  • PHP开启gzip页面压缩实例代码

    下面是详细的“PHP开启gzip页面压缩实例代码”的攻略。 什么是gzip压缩? GZip是GNU zip格式(GNU程序的一部分)。例如,Firefox发出一个HTTP请求以请求HTML,CSS和JavaScript文件。发送服务器的响应是类似的,其中包含HTML,CSS和JavaScript文件。当gzip被启用时,服务器将压缩响应的内容并将其发送回浏览…

    PHP 2023年5月26日
    00
  • PHP回调函数概念与用法实例分析

    首先,回调函数是一种特殊的函数,它可以作为参数传递给另一个函数,在另一个函数执行完特定操作后,回调函数会被自动调用,从而完成特定的任务。 在 PHP 中,回调函数经常被用在事件驱动编程、异步编程、模板渲染等场景中。下面我们来介绍一下 PHP 回调函数的概念和用法,并结合示例进行分析。 概念 在 PHP 中,回调函数是一种特殊的函数,它可以作为参数传递给另一个…

    PHP 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部