laravel 5.x 支付宝 异步通知签名验证失败 openssl_verify()错误
来源:互联网 发布:windows 8.1 下载 编辑:程序博客网 时间:2024/05/26 02:19
使用支付宝服务端PHP sdk,经常会遇到各种奇葩问题,这里记录了一些。
环境:
lavavel 5.5
支付宝服务端sdk下载的最新压缩包(2017-10)
1.错误
openssl_verify(): supplied key param cannot be coerced into a public key
解决这个错误主要是确认 AopClient的参数 alipayrsaPublicKey 传入了参数 且是支付宝的公钥而不是商户公钥。
if($this->checkEmpty($this->alipayPublicKey)){$pubKey= $this->alipayrsaPublicKey;$res = "-----BEGIN PUBLIC KEY-----\n" .wordwrap($pubKey, 64, "\n", true) ."\n-----END PUBLIC KEY-----";}else {//读取公钥文件$pubKey = file_get_contents($rsaPublicKeyFilePath);//转换为openssl格式密钥$res = openssl_get_publickey($pubKey);}
在上面的代码中,如果没有给 alipayPublicKey 赋值,则是不需要传 rsaPublicKeyFilePath 这个参数的,pubkey仍然是读取的字符串形式。所以是不需要保存rsa密钥文件的。
$this->aopClient = new \AopClient(); $this->aopClient->gatewayUrl = $this->gatewayUrl; $this->aopClient->appId = $this->appId; $this->aopClient->rsaPrivateKey = $this->rsaPrivateKey; $this->aopClient->alipayrsaPublicKey = $this->alipayRsaPublicKey; $this->aopClient->signType = $this->signType;初始化时,只需要保证上面几个参数就可以了,另外沙箱系统的gatewayUrl 、appID和 rsakey 都不一样,注意区分就行了,key的值都是字符串,可以直接用文档给的签名生成工具生成,选择pkcs1非java适用就行,长度我的是2048位,生成的商户公钥去支付宝上传获得支付宝公钥,这里代码只会用到支付宝公钥和商户私钥。
2. 签名验证失败
rsaCheckV1() 验证签名返回 false
laravel 处理异步通知时,第一步需要接受post参数,直接用$_POST即可,不要使用$request->post()方法。
csrf验证必须关闭,Middleware\VerifyCsrfToken 修改 $except ,添加异步通知的列外,如添加一行 ‘alipay/*’。
3.函数冲突
AopClient 开头引入了AopEncrypt.php,里面的函数名称与 laravel helper函数冲突,可以修改个名字,AopClient中也使用了这些函数,一并修改了之。
阅读全文
1 0
- laravel 5.x 支付宝 异步通知签名验证失败 openssl_verify()错误
- PHP 支付宝 异步 MD5 签名验证失败
- 使用OpenSSL做RSA签名验证 支付宝移动快捷支付 的服务器异步通知
- 使用OpenSSL做RSA签名验证 支付宝移动快捷支付 的服务器异步通知
- 支付宝回调验证签名失败
- 支付宝电脑网站支付,回调时签名验证失败
- 微信支付 支付验证签名失败
- 支付宝即时到账接口调用签名验证失败
- 微信jsapi支付验证签名失败
- 支付宝异步通知 asp
- 支付宝异步通知处理
- 支付宝异步通知原理
- ##iOS中的微信支付 支付验证签名失败
- 关于微信APP支付,提示支付验证签名失败
- 微信支付报错“支付签名验证失败”
- 微信支付提示支付验证签名失败
- 支付宝支付成功,没有异步通知
- 支付宝签名验证机制
- Java的注解机制——Spring自动装配的实现原理
- 长假期间,技术人员如何保障系统稳定?
- 清理缓存
- POJ-1195 Mobile phones 二維樹組+二維數組
- 编程能力七段论
- laravel 5.x 支付宝 异步通知签名验证失败 openssl_verify()错误
- PHP RC4 加解密类
- Python的hasattr() getattr() setattr() 函数使用方法详解
- Java中的包装类
- 【Struts】文件的上传和下载
- 使用命令行打开mysql
- the 'access-control-allow-origin' header has a value 'http://localhost' but origin is null
- python实现栈和队列--1(面向对象实现)
- css 知识总结