PHP通过pem文件校验签名异常问题解决

 更新时间:2023年09月16日 10:10:42   作者:whynogome  
在对接第三方支付过程中,支付成功异步回调时,校验签名,一直无法通过,最后经过排查,是引用秘钥文件时,报错了,本文给大家分享PHP通过pem文件校验签名异常问题解决方法,需要的朋友可以参考下

问题描述:

在对接第三方支付过程中,支付成功异步回调时,校验签名,一直无法通过。但是在支付成功时有一个同步返回也需要校验签名,用的是同样的校验方法,都没有问题。当把回调时传递的参数放在postman中,手动发起回调,也可以通过签名校验

最后经过排查,是引用秘钥文件时,报错了,错误代码如下

public static function verify(array $data, $sign)
    {
        if (empty($data) || empty($sign)) {
            return "";
        }
        //code+msg+date+result,
        $code   = $data['code'] ?? '';
        $msg    = $data['msg'] ?? '';
        $date   = $data['date'] ?? '';
        $result = $data['result'] ?? '';
        $signString = $code . $msg . $date . $result;
		$mallbook_key_file = __DIR__.'rsa_public.pem';
        $pubKey = file_get_contents($mallbook_key_file);
        /** 此处可能会返回false **/
        $res = openssl_get_publickey($pubKey);
        $result =  openssl_verify($signString , base64_decode($sign), $res) === 1;
        openssl_free_key($res);
        return $result; 
    }

上面代码其实是没有问题的,问题出在rsa_public.pem文件的内容,秘钥内容都写在同一行了,没有按照标准的秘钥格式书写,如下

在这里插入图片描述

解决方法

第一种

按标准的秘钥书写格式修改秘钥文件每行只能有64个字符,如下

在这里插入图片描述

第二种

直接在代码中拼接秘钥字符串

$pubKey ='MIGfMA0GCSqGSIb3DQE***************************************
********************************************************************
***************1mwyu7RTDC8Wp7LGddnlkJsmL8masgMxA6cc9NwIDAQAB';
    $str= chunk_split($pubKey, 64, "\n");
    $key = "-----BEGIN PUBLIC KEY-----\n$str-----END PUBLIC KEY-----\n";
    $signature = base64_decode($sign);
    return openssl_verify($signString, $signature, $key, OPENSSL_ALGO_SHA1) === 1;

到此这篇关于PHP通过pem文件校验签名异常的文章就介绍到这了,更多相关php em文件校验签名内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • WordPress上传图片错误:不是合法的JSON响应解决办法

    WordPress上传图片错误:不是合法的JSON响应解决办法

    这篇文章主要给大家介绍了关于WordPress上传图片错误:不是合法的JSON响应的解决办法,WordPress提示JSON错误通常是由于服务器配置或插件冲突引起的,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-08-08
  • set_exception_handler函数在ThinkPHP中的用法

    set_exception_handler函数在ThinkPHP中的用法

    这篇文章主要介绍了set_exception_handler函数在ThinkPHP中的用法,分析了官方给出了set_exception_handler函数用法说明及示例,并讲述了在ThinkPHP中的应用实例,需要的朋友可以参考下
    2014-10-10
  • Laravel中注册Facades的步骤详解

    Laravel中注册Facades的步骤详解

    这篇文章主要介绍了Laravel中注册Facades的步骤,详细分析了Laravel中注册Facades的原理,实现方法与相关注意事项,需要的朋友可以参考下
    2016-03-03
  • php实现网站插件机制的方法

    php实现网站插件机制的方法

    这些天想作一个在网站中实现插件的功能,谷歌了一下,发现一篇文章感觉对我帮助很大,帖出来和大家分享,废话不多说,直接帖出代码供大家分析.
    2009-11-11
  • php教程之phpize使用方法

    php教程之phpize使用方法

    phpize是用来扩展php扩展模块的,通过phpize可以建立php的模块,下面介绍一个他的使用方法,需要的朋友可以参考下
    2014-02-02
  • PHP中Closure类的使用方法及详解

    PHP中Closure类的使用方法及详解

    Closure类又被大家称之为匿名函数,在php5.3的时候引入的。顾名思义匿名函数就是没有定义名字的函数。本篇文章给大家介绍php中Closure类的使用及详解,需要的朋友可以参考下
    2015-10-10
  • PHP设计模式(观察者模式)

    PHP设计模式(观察者模式)

    这篇文章主要介绍了PHP设计模式(观察者模式),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • destoon文章模块调用企业会员资料的方法

    destoon文章模块调用企业会员资料的方法

    这篇文章主要介绍了destoon文章模块调用企业会员资料的方法,非常实用的一个技巧,需要的朋友可以参考下
    2014-08-08
  • php中用unset销毁变量并释放内存

    php中用unset销毁变量并释放内存

    在本篇文章里小编给大家分享的是关于php中用unset销毁变量并释放内存的实例分享内容,需要的朋友们可以参考下。
    2020-05-05
  • Twig模板引擎用法入门教程

    Twig模板引擎用法入门教程

    这篇文章主要介绍了Twig模板引擎用法,分析了Twig模板引擎的基本功能、安装与简单使用方法,需要的朋友可以参考下
    2016-01-01

最新评论