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实现网页文件上传功能的完整攻略如下: 1. HTML表单 文件上传功能需要通过一个HTML表单向服务器传递数据。 <form enctype="multipart/form-data" action="upload.php" method="POST"> <input typ…

    PHP 2023年5月26日
    00
  • 微信小程序 Windows2008 R2服务器配置TLS1.2方法

    微信小程序 Windows2008 R2服务器配置TLS1.2方法 说明 微信小程序从2021年6月1日起强制要求服务器只能使用TLS1.2及以上版本的加密协议进行通信,并禁用TLS1.0和TLS1.1。本文将详细讲解在Windows2008 R2服务器上如何配置TLS1.2的方法。 步骤 以下步骤将带你逐步完成TLS1.2的配置。 步骤1 – 确认服务器当…

    PHP 2023年5月23日
    00
  • WordPress中注册菜单与调用菜单的方法详解

    WordPress中注册菜单与调用菜单的方法详解 WordPress是一款流行的内容管理系统,它提供了丰富的自定义功能,其中之一就是自定义菜单。本文将介绍WordPress中注册菜单与调用菜单的方法,从而帮助您更好地管理自己的网站。 注册菜单 注册菜单是指在WordPress后台中定义一个新的菜单,目的是让您能够将它添加到网站的不同部分,并为它添加自定义链接…

    PHP 2023年5月26日
    00
  • 解析PHP中如何将数组变量写入文件

    将PHP数组写入文件的过程需要将数组序列化为字符串,然后写入文件中。之后读取文件,将字符串反序列化为数组即可。下面是详细步骤: 序列化数组 使用PHP的serialize()方法将数组序列化为字符串,示例如下: $myArray = array(‘apple’, ‘banana’, ‘orange’); $serializedArray = serializ…

    PHP 2023年5月26日
    00
  • PHP5.3与5.5废弃与过期函数整理汇总

    PHP5.3与5.5废弃与过期函数整理汇总 介绍 PHP5.3与5.5版本中,有一些函数被废弃(deprecated)或过期(deprecated),这些函数在未来版本中可能会被删除,所以建议在编写PHP代码时避免使用这些函数。 本文列举了PHP5.3与5.5版本中废弃与过期的函数,同时提供了一些替代方案。 废弃函数 以下是PHP5.3与5.5版本中废弃的函…

    PHP 2023年5月27日
    00
  • PHP基于工厂模式实现的计算器实例

    让我来详细讲解一下“PHP基于工厂模式实现的计算器实例”的完整攻略。 1. 工厂模式简介 工厂模式是一种非常常用的设计模式,它可以根据不同的条件来创建不同的对象,从而实现对对象的管理和抽象化。在实际开发中,我们经常会使用工厂模式来创建对象,从而降低系统耦合度,提高代码的可复用性。 2. 计算器实例 基于工厂模式的计算器实例,是一种非常经典的应用场景。在计算器…

    PHP 2023年5月27日
    00
  • PHP7 echo和print语句实例用法

    当我们在使用 PHP7 编写代码时,经常需要将结果输出到页面上让用户看到。在 PHP7 中,一些常见的方法是使用 echo 和 print 语句。在本攻略中,将详细讲解 echo 和 print 语句的用法,以及它们的区别和相似点。 echo语句 echo 语句是 PHP7 中最常用的输出方法之一。它允许我们在页面上输出任何值,包括字符串、变量值和数组。 示…

    PHP 2023年5月26日
    00
  • php遍历文件夹下的所有文件和子文件夹示例

    下面是关于PHP遍历文件夹的攻略。 标准的遍历文件夹代码块 使用PHP的opendir函数打开一个目录,操作完成后使用closedir关闭目录。在处理每一个文件或子目录时,使用PHP内置的递归函数执行相应的操作。 同样需要注意的是,在操作完每个文件或子目录后,要检查其是否为.,..,以及文件是否被隐藏。 普通遍历代码如下: $dir = ‘./’; //待遍…

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