有对接过微信支付的吗?微信支付回调验签怎么才能成功呢?
背景:微信支付成功回调通知,验证通知消息是否来自于微信,一直验证不过去。
代码:
<?php
$timeStamp = $request->header('Wechatpay-Timestamp');
$wechatNonce = $request->header('Wechatpay-Nonce');
$requestData = file_get_contents('php://input');
$requestData = json_encode(json_decode($requestData));
$signature = $request->header('Wechatpay-Signature'); //微信头部携带的签名值
//验证签名
openssl_verify(Formatter::joinedByLineFeed($timeStamp,$wechatNonce,$requestData),base64_decode($signature), $this->platformPublicKeyInstance, OPENSSL_ALGO_SHA256)
//上文的 $this->platformPublicKeyInstance 是微信平台的公钥
结果:
这个验证结果一直是0,搜了好多教程,也找不出问题,请问大家有成功的吗?可以指点一下吗?
解决了!!!!
困扰了许久的问题,因为保存了支付回调的信息,一直在本地测试都是false,感觉无望了,想着正式环境再测一下,结果就验签过了。
部分代码:
<?php
$timeStamp = $request->header('Wechatpay-Timestamp');
$wechatNonce = $request->header('Wechatpay-Nonce');
$requestData = file_get_contents('php://input');
$signature = $request->header('Wechatpay-Signature');
// 检查通知时间偏移量,允许5分钟之内的偏移
$timeOffsetStatus = 300 >= abs(Formatter::timestamp() - (int)$timeStamp);
$verifiedStatus = Rsa::verify(
// 构造验签名串
Formatter::joinedByLineFeed($timeStamp, $wechatNonce,$requestData),
$signature,
$this->platformPublicKeyInstance
);
//重点是这句 $requestData = file_get_contents('php://input'); 之前是用了 $request->input()的方式获取的,一直通过不了。本地测试的时候,我也用了 file_get_contents的方法,但也一直过不了。正式支付测试的时候,就过了。可能因为数据不是最新的缘故的吧。
本作品采用《CC 协议》,转载必须注明作者和本文链接
很久以前用的EasyWeChat,没遇到过这个问题
使用easywechat
建议直接使用 github.com/yansongda/laravel-pay 这个包,不要自己糊
在您提供的代码中,您正在处理微信支付的回调通知,验证签名的正确性。然而,您遇到了验证不通过的问题。这可能是由于几种原因导致的,让我们逐一检查可能的问题:
公钥的正确性: 确保
$this->platformPublicKeyInstance
中包含了正确的微信平台的公钥。验证签名需要使用正确的公钥,否则验证会失败。请求数据的处理: 您通过
file_get_contents('php://input')
获取请求数据,然后对其进行了 JSON 解码和重新编码。请确保这个过程没有造成数据变化,因为签名的验证是基于原始数据的。数据格式化:
Formatter::joinedByLineFeed()
的实现很重要。确保该方法按照微信支付要求的格式对数据进行正确的拼接。签名验证算法: 检查您使用的签名验证算法是否正确。微信支付通常使用 SHA-256 算法进行签名。
证书验证: 确保您的服务器可以正常访问微信平台的公钥证书。如果访问受到限制或有问题,可能导致验证失败。
错误信息: 检查验证失败时是否有相关的错误信息或错误代码返回。这可能会提供更多的线索。
如果您仔细检查了上述方面,但仍然无法解决问题,您可以尝试以下步骤:
总之,请仔细检查您的代码和配置,确保每个步骤都按照微信支付的要求执行,以解决验证签名失败的问题。
官方包是这么写的吧。
V3版本验签使用的是 微信支付平台证书,不是商户调用API的那套证书。头部信息中返回有证书序列号,可以确认一下使用的证书的序列号是不是头部返回的证书序列号,如果不是就要实时调用接口获取平台证书。参考官方文档:pay.weixin.qq.com/wiki/doc/apiv3/w...
esaywechat真实个好东西啊
用这个 pay.yansongda.cn/docs/v3/
用这个 pay.yansongda.cn/ 装多个包又影响 这个很方便
用现成的,不然以后微信接口改了还要维护。
为什么不用第三方的easywechat,之前项目用的就是官方的SDK,但是一团糕,你可以单独对easywechat包的边界进行封装你只用得到的接口,维护起来也非常方便。
第三方的easy只需要几行代码就能实现下单,或支付回调,查询等功能
微信支付有很多包用着都很方便 官方的确实蛮多坑 但是你想找到 问题那就是 打日志就行 一步一打找到那一步出问题就行了 从记录 多调试
本地测试,微信回调不到吧?!
我现在也遇到了。 还是一直失败。 和你的代码一样, 用的是官方包 平台证书 怎么都不通过 是咋回事。求助