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执行系统命令函数实例讲解

    PHP执行系统命令函数实例讲解 介绍 PHP提供了一些函数,可以在PHP脚本中调用系统命令并执行它们。这对于需要调用其他程序或操作系统功能的任务非常有用,例如在PHP脚本中调用命令行工具或运行系统命令等。 在此教程中,我们将学习如何使用PHP内置函数来执行系统命令。 exec函数 exec函数用于执行系统命令,并返回最后一行输出。下面是exec函数的语法: …

    PHP 2023年5月23日
    00
  • php实现分页显示

    PHP实现分页显示攻略 1. 准备工作 在实现分页功能前,我们需要查询出满足条件的总记录数,根据总记录数及每页显示的记录数,计算出总页数,并确定当前页码。 2. 分页代码实现 在分页代码实现中,我们需要决定分页的样式和布局,常用的分页样式有页码导航和下拉框选择页码两种。 2.1 页码导航分页样式 页码导航分页样式通常在页面底部显示,如以下代码所示: <…

    PHP 2023年5月27日
    00
  • 一个简单安全的PHP验证码类 附调用方法

    让我来为您详细讲解一个简单安全的PHP验证码类,同时附上调用方法。 什么是验证码 验证码通常是一种用于验证用户身份的安全技术。主要应用在网络应用程序中,用于防止恶意的自动机器人的恶意攻击,以及保护网站用户的隐私。 简单安全的PHP验证码类 下面是一个简单安全的PHP验证码类的代码示例: <?php namespace App\Code; class C…

    PHP 2023年5月26日
    00
  • PHP配合微信小程序实现获取手机号码详解

    下面是PHP配合微信小程序实现获取手机号码的完整攻略: 一、背景知识 在使用微信小程序开发中,有时候需要获取用户授权后的手机号码信息。但是,仅仅使用微信小程序的API是不够的,需要服务端提供支持。本攻略将涉及到前端(微信小程序)、后端(PHP)、数据库等多个方面的知识。 二、前置条件 微信开发者工具 PHP环境 数据库 三、步骤 1. 前端代码编写 微信小程…

    PHP 2023年5月23日
    00
  • PHP实现的简单缓存类

    下面是PHP实现的简单缓存类的完整攻略。 什么是缓存? 缓存是一种提高应用性能和可扩展性的方式,它将计算结果或者设备响应存储在内存或磁盘中,然后重复使用,这样就避免了相同的计算或响应。缓存通常用于频繁读取数据或计算的场景,例如数据库查询或者API请求等。 为什么需要缓存? 相较于网络存储的读写速度,内存和磁盘存储读写速度快得多,需要读写的数据越大,这种差距也…

    PHP 2023年5月23日
    00
  • php实现scws中文分词搜索的方法

    下面是“php实现scws中文分词搜索的方法”的完整攻略。 简介 中文分词是中文信息处理的基础,而Scws是一款常用的中文分词工具,它具有效率高、支持多种分词算法和词典等特点。本文介绍了如何在PHP中使用Scws实现中文分词搜索。 环境要求 在开始使用Scws前,必须确保满足以下环境要求: PHP版本需要在5.2.0以及以上; 安装了Scws扩展,可以通过执…

    PHP 2023年5月24日
    00
  • PHP实现的消息实时推送功能【基于反ajax推送】

    下面是详细讲解“PHP实现的消息实时推送功能【基于反ajax推送】”的完整攻略。 概述 反 Ajax 推送是指服务器不等待请求回应,而是在数据准备好后立刻将其推送给客户端的技术。本文主要介绍基于反 Ajax 推送的实时消息推送功能,通过 PHP 和 JavaScript 来实现。 技术实现 前置条件 为了实现实时消息推送,需要一个反 Ajax 的库。我们使用…

    PHP 2023年5月27日
    00
  • php的$_FILES的临时储存文件与回收机制实测过程

    什么是$_FILES的临时储存文件 在使用PHP上传文件时,文件会被临时储存在服务器上,保存的路径是在php.ini配置文件中定义的。在PHP脚本中,可以通过$_FILES这个全局变量来获取文件信息,并将文件从临时路径移动到目标位置。临时存储文件在上传后会自动删除,因此不需要手动清理。 $_FILES的临时储存文件回收机制 $_FILES的临时储存文件回收机…

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