返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP接口签名校验
  • 640
分享到

PHP接口签名校验

php前端javascript 2023-09-09 06:09:13 640人浏览 八月长安
摘要

项目中常用的api接口签名验证方法: 给app分配对应的appId、appKey 2. Sign签名,调用API 时需要对请求参数进行签名验证,签名方式如下: a. 按照请求参数名称将所有请求参数按照

项目中常用的api接口签名验证方法:

给app分配对应的appId、appKey
2. Sign签名,调用API 时需要对请求参数进行签名验证,签名方式如下:

a. 按照请求参数名称将所有请求参数按照键名进行升序排序,如:将arong=1,mrong=2,crong=3 排序为:arong=1, crong=3,mrong=2 然后将参数名和参数值进行拼接得到参数字符串:arong=1&crong=3&mrong=2

b. 将appKey加在参数字符串的尾部&key=appKey后进行MD5加密 ,加密后的字符串需转小写。即得到签名Sign;

PHP签名类

phpnamespace utils;class Sign{    private $appId = "2jOlqkesGGeJJwMx";    private $appKey = "wfEj1kXLdKjCV6rla6Rfasd";    //创建sign    public function makeSign($data)    {        ksort($data);        $string = $this->toUrlParams($data);        $string = $string . "&key=" . $this->appKey;        $string = md5($string);        $result = strtolower($string);        return $result;    }    //检验sign是否正确    public function verifySign($data)    {        //check sign        if (!isset($data['sign']) || !$data['sign']) {            return ['code' => 1, 'msg' => '发送的数据签名sign不存在'];        }        //check sign        if (!isset($data['appid']) || !$data['appid']) {            return ['code' => 1, 'msg' => '发送的应用参数appid不存在'];        }        if ($data['appid'] != $this->appId) {            return ['code' => 1, 'msg' => '发送的应用参数appid错误'];        }        //check sign        if (!isset($data['nonce']) || !$data['nonce']) {            return ['code' => 1, 'msg' => '发送的应用参数nonce不存在'];        }        //check timestamp        if (!isset($data['timestamp']) || !$data['timestamp']) {            return ['code' => 1, 'msg' => '发送的数据参数timestamp不合法'];        }        // 验证请求, 10分钟失效        if (time() - $data['timestamp'] > 600) {            return ['code' => 1, 'msg' => '验证超时timestamp请重新发送请求'];        }        $clientSign = $data['sign'];        unset($data['sign']);        $serverSign = $this->makeSign($data);        if ($clientSign == $serverSign) {            return ['code' => 0, 'msg' => '验证通过'];        } else {            return ['code' => 1, 'msg' => '签名校验失败'];        }    }    //生成url字符串    private function toUrlParams($values)    {        $buff = "";        foreach ($values as $k => $v) {            if ($k != "sign" && !is_array($v)) {                $buff .= $k . "=" . $v . "&";            }        }        $buff = trim($buff, "&");        return $buff;    }}

使用实例,签名校验可以写在中间件拦截

namespace app\api\controller;use think\facade\Request;use utils\Sign;class Test{    public function sign(Request $request)    {        //接口签名校验        $appid     = $request->header('appid', '');        $nonce     = $request->header('nonce', '');        $timestamp = $request->header('timestamp', '');        $sign      = $request->header('sign', '');                $Sign       = app(Sign::class);        $verifySign = $Sign->verifySign(compact('appid', 'nonce', 'timestamp', 'sign'));        if (isset($verifySign['code']) && $verifySign['code']) {            throw new IllegalException();        }    }}

前端Vue代码

<div id="app"></div><script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script><script src="Https://unpkg.com/axiOS/dist/axios.min.js"></script><script src="https://cdn.bootCSS.com/blueimp-md5/2.10.0/js/md5.min.js"></script><script type="text/javascript">    new Vue({        el: '#app',        data() {            return {                info: null            }        },        create(){        },        methods: {            getSign: function(param,key) {                let str = "";                for(var idx in param) {                    let one = idx+"="+param[idx];                    if (str == "") {                        str = one;                    } else {                        str = str+"&"+one;                    }                }                str = str+"&key="+key;                //console.log("before md5:"+str);                let md5str = md5(str);                return md5str;            }        },        mounted() {            let appid = "2jOlqkesGGeJJwMx";            let appkey = "wfEj1kXLdKjCV6rla6Rfasd";            let timestamp = parseInt((new Date()).getTime()/1000);            let nonce = Math.floor(Math.random()*8999)+1000;            let param = {                appid:appid,                nonce:nonce,                timestamp:timestamp,            }            let sign = this.getSign(param,appkey);            param.sign = sign;            console.log(param);            const config = {                headers: {                    appid: param.appid,                    nonce: param.nonce,                    timestamp: param.timestamp,                    sign:param.sign,                }            };            axios                .post('https://www.baidu.com/api/Test/sign',[],config)                .then(response => (this.info = response))                .catch(function (error) { // 请求失败处理                    console.log(error);                });        }    })</script>

来源地址:https://blog.csdn.net/qqq13500169/article/details/128573157

--结束END--

本文标题: PHP接口签名校验

本文链接: https://lsjlt.com/news/401013.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PHP接口签名校验
    项目中常用的API接口签名验证方法: 给app分配对应的appId、appKey 2. Sign签名,调用API 时需要对请求参数进行签名验证,签名方式如下: a. 按照请求参数名称将所有请求参数按照...
    99+
    2023-09-09
    php 前端 javascript
  • 详解PHP接口签名验证
    目录概览常用验证单向散列加密对称加密非对称加密密钥安全管理接口调试工具在线接口文档扩展小结概览 在设计签名验证的时候,一定要满足以下几点: 可变性:每次的签名必须是不一样的...
    99+
    2024-04-02
  • 微信JS接口签名校验工具的示例分析
    这篇文章给大家分享的是有关微信JS接口签名校验工具的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、微信 JS 接口签名校验工具2、具体开发2.1 获取access_t...
    99+
    2024-04-02
  • 平安银行esa接口对接 php生成sm2国密签名验签失败
    难点 本次开发中主要的难点在于使用php生成sm2国密签名, 银行方面并没有专门的文档, 只给到一个java代码示例, 后续跟银行方开发要了一组数据和使用这组数据生成的sign (正是这组数据使开发过...
    99+
    2023-08-30
    php 开发语言 sm2 国密
  • PHP中的签名和验签
    随着互联网技术的发展,安全性成为了一个越来越重要的问题,特别是互联网应用中传输数据的安全性。签名和验签技术已成为保障数据安全性的一种重要手段,PHP作为一种流行的互联网编程语言,也提供了签名和验签的相关函数,本文将介绍PHP中的签名和验签。...
    99+
    2023-05-23
    PHP 签名 验签
  • android签名校验功能怎么实现
    要实现Android签名校验功能,可以按照以下步骤进行:1. 获取应用的签名信息:首先,获取应用的签名信息。可以通过以下代码获取应用...
    99+
    2023-08-23
    android
  • java签名校验功能怎么实现
    要实现Java签名校验功能,你可以按照以下步骤进行: 获取签名证书:首先,你需要获取要校验的文件的签名证书。可以使用Java的Ke...
    99+
    2023-10-26
    java
  • GoFrame框架数据校验之校验结果Error接口对象
    目录基本介绍方法示例注意问题方法详解进阶注意问题总结上一篇文章介绍了 GoFrame数据校验之校验对象 | 校验结构体 ,得到了大家积极的反馈。 再接再厉,这篇总结分享:GoFram...
    99+
    2024-04-02
  • php、go、python后端接口签名实现
    php实现 function makeSignature($args, $key){ if(isset($args['sign'])) { $oldSign = $args['sign']; unset(...
    99+
    2023-09-01
    linux 签名 接口安全
  • Java实现APIsign签名校验的方法详解
    目录1. 前言2. 签名生成策略3. API 签名算法 Java 实现4. 测试一下1. 前言 目的:为防止中间人攻击。 场景: 项目内部前后端调用,这种场景只需要做普通参数的签名校...
    99+
    2024-04-02
  • springboot接口参数校验JSR303的实现
    目录一、在controller接口处理校验异常二、统一异常处理三、错误码枚举类四、自定义参数校验注解在 javax.validation.constraints包中定义了非常多的校验...
    99+
    2022-11-13
    springboot接口参数校验JSR303 springboot JSR303
  • php对参数校验(名称、地址、掩码、日期、时间、端口)
    文章目录 1、 使用一个例子介绍1》 html页面显示test_1.html页面代码 2》html页面提交的数据3》php校验函数test_1.php校验代码 4》校验结果 2...
    99+
    2023-10-21
    php
  • gateway网关接口请求的校验方式
    gateway网关token的校验 再加入gateway网关之后,我们在后台服务的许多校验操作都可以移动到gateway网关, 今天我就来说一下怎么校验请求携带的token。 首先我...
    99+
    2024-04-02
  • Java中怎么实现接口数据校验
    今天就跟大家聊聊有关Java中怎么实现接口数据校验,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Controller接口层数据绑定校验实际上在Java开发中目前普通使用的Bean数据...
    99+
    2023-06-15
  • SpringBoot接口怎么对参数进行校验
    今天小编给大家分享一下SpringBoot接口怎么对参数进行校验的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是不优雅的...
    99+
    2023-07-02
  • SpringBoot接口如何对参数进行校验
    目录前言什么是不优雅的参数校验实现案例POM请求参数封装Controller中获取参数绑定结果校验结果进一步理解Validation分组校验?@Validate和@Valid什么区别...
    99+
    2024-04-02
  • Java接口签名如何实现
    这篇文章给大家分享的是有关Java接口签名如何实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、要求下图为具体要求二、流程线下分配appid和appsecret,针对不同的调用方分配不同的appid和apps...
    99+
    2023-06-28
  • java SM2签名和验签
    SM2签名也是通过私钥签名,公钥验签,这里的私钥格式可以是pkcs#1,pkcs#8,公钥格式可以是pkcs1和X509格式,这里只介绍标准的格式,公钥X509格式,私钥是pkcs#8格式,其他格式的需要进一步转换 这里需要借助Bouncy...
    99+
    2024-04-02
  • 如何通过ECharts和php接口实现统计图的数据验证和校验
    如何通过ECharts和PHP接口实现统计图的数据验证和校验随着数据可视化的需求增加,ECharts成为了一个非常流行的数据可视化工具。而PHP作为一种常见的后端脚本语言,也广泛应用于Web开发中。本文将介绍如何通过ECharts和PHP接...
    99+
    2023-12-18
    echarts 数据校验 PHP接口
  • 浅谈Java 三种方式实现接口校验
    本文介绍了Java 三种方式实现接口校验,主要包括AOP,MVC拦截器,分享给大家,具体如下:方法一:AOP代码如下定义一个权限注解package com.thinkgem.jeesite.common.annotation; impor...
    99+
    2023-05-30
    java 接口 校验
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作